2013-03-13 3 views
0

EDITСинтаксис SQL insert, базовая информация не обновляется

Я изменил код, поэтому я использую: ["+ Time1 +"] вместо параметра. Это работает впервые, но когда время увеличивается на 0,5, оно остается ложным. Цикл for работает, когда я попробовал MessageBox.Show ("" + Time1 + ""); внутри цикла for.

for (double Time = time_began_5; Time < time_finished_5; Time = Time + 0.5) 
     { 
      string Time1 = Time.ToString("0.00"); 


      try 
      { 
       SqlConnection cn = new SqlConnection("Data Source=.\\SqlExpress;Initial Catalog=AllensCroft;Integrated Security=True;MultipleActiveResultSets=True;Application Name=EntityFramework;"); 

       cn.Open(); 
       SqlCommand Command = new SqlCommand("INSERT INTO Slots ([Date],[RoomID],[" + Time1 + "]) Values (@date,@room,1)", cn); 
       Command.Parameters.AddWithValue("date", date); 
       Command.Parameters.AddWithValue("room", rooms_combo.SelectedValue); 


       Command.ExecuteNonQuery(); 


       try 
       { 
        cn.Close(); 
       } 
       catch (Exception e) 
       { 
        Console.WriteLine(e.ToString()); 
       } 

      } 
      catch (Exception e) 
      { 
       Console.WriteLine(e.ToString()); 
      } 

     } 
+0

Что такое ошибка SQL? –

+0

Прежде всего, это цикл, даже исполняющий? Постскриптум Обычно считается неправильной практикой использовать Double в качестве переменной индексатора в цикле for! –

+0

@time имя вашей колонки, если нет, то почему вы использовали там? – Sachin

ответ

0

Вы не можете включить переменную в свой список столбцов, я полагаю, вы хотели, чтобы @Time находилось в списке значений о том, где это истина.

EDIT: Для того, чтобы впрыснуть время как имя столбца, сделать некоторые # строка C манипуляции:

SqlCommand Command = new SqlCommand("INSERT INTO Slots (Date, RoomID, [" + time + "]) Values (@date, @room, 1)", cn); 

EDIT снова: правда не T-SQL ключевое слово, T-SQL разрядные столбцы имеют значения 1 или 0

Теперь вы не хотите добавлять время в качестве параметра в запрос.

+0

Время - это столбец и переменная, и я хотел, чтобы это было правдой, возможно, например. столбец 8.5, я хотел, чтобы это было правдой – Hamoudy

+0

@Hamoudy Отвечено обновлено с тем, что, я думаю, вы просите за – MattW

+0

, пробовал, но не работал, извините – Hamoudy

0

Вы перечисляя переменную в качестве имени столбца (@time)

EDIT
Прямо здесь:

INSERT INTO Slots (Date, RoomID,--- >>> @time < < < - - ОПАСНО БУДЕТ РОБИНСОН, ОПАСНО

Чтобы исправить это, вам необходимо либо изменить его на название столбца, или избавиться от него.

Так что-то вроде этого, например:

INSERT INTO Slots (Date, RoomID, time)

+0

да, как бы вы это сделали? – Hamoudy

+0

@Hamoudy - см. Отредактированный ответ – Chains

2
  1. У вас есть @ перед вашим 3-й колонке (время).
  2. Когда вы добавляете параметр, вам необходимо добавить @.
  3. В вашей инструкции вставки вы пытаетесь вставить true в качестве логического значения в столбец time.
SqlCommand Command = new SqlCommand("INSERT INTO Slots (Date,RoomID,time) " + "Values (@date,@room,@time)", cn); 

Command.Parameters.AddWithValue("@date", date); 
Command.Parameters.AddWithValue("@room", rooms_combo.SelectedValue); 
Command.Parameters.AddWithValue("@time", Time); 

EDIT После комментариев. Попробуйте следующее:

SqlCommand Command = new SqlCommand("INSERT INTO Slots (Date,RoomID,[" + Time1 + "]) " + "Values (@date,@room,@time)", cn); 

Command.Parameters.AddWithValue("@date", date); 
Command.Parameters.AddWithValue("@room", rooms_combo.SelectedValue); 
Command.Parameters.AddWithValue("@time", true); 
+0

Время - это столбец, и он является логическим, и я хотел, чтобы это было правдой, возможно ли это, например. столбец 8.5, я хотел, чтобы это было верно – Hamoudy

+0

Если вы хотите вставить 'true' в столбец времени, тогда тип данных SQL должен быть« бит ». Это так, тогда нет необходимости в параметре '@ time', для чего он нужен? –

+0

это просто ссылка на временной столбец, например.8.50, 8.00 – Hamoudy

Смежные вопросы