2013-03-13 67 views
0

編輯SQL插入語法,數據庫沒有更新

我改變了代碼,所以我使用:[「+ 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錯誤? – 2013-03-13 19:37:25

+0

首先,循環是否執行?附:在for循環中使用Double作爲索引變量通常被認爲是不好的做法! – 2013-03-13 19:38:51

+0

是@time你的專欄名稱,如果不是那麼你爲什麼在那裏使用? – Sachin 2013-03-13 19:39:22

回答

0

您不能在列列表中包含一個變量,我推測您希望@Time在關於真實位置的值列表中。

編輯:注入時間作爲列名,做一些C#字符串操作:再次

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

編輯:真不是T-SQL關鍵字,T-SQL位列具有值1或0

現在您不想將時間作爲參數添加到查詢中。

+0

時間是一個列和一個變量,我希望它是真實的,這是可能的,例如,欄8。5,我想這是真的 – Hamoudy 2013-03-13 19:42:07

+0

@Hamoudy答案更新了我認爲你你要求 – MattW 2013-03-13 19:47:11

+0

嘗試過但沒有工作,對不起 – Hamoudy 2013-03-13 19:54:42

0

你就在這裏列出一個變量作爲列名(@time)

編輯

INSERT INTO Slots (Date, RoomID,--- >>> @time < < < - - 危險將羅賓遜,危險

要解決它,您需要將其更改爲您的t列名稱能夠,否則擺脫它。

所以這樣的事情,例如:

INSERT INTO Slots (Date, RoomID, time)

+0

是的,你會怎麼做? – Hamoudy 2013-03-13 19:44:36

+0

@Hamoudy - 查看編輯答案 – Chains 2013-03-13 19:58:41

2
  1. 您在第3列(當地時間)之前有一個@
  2. 當您添加參數時,您需要添加@
  3. 在您的insert語句中,您試圖將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); 

編輯後的意見。試試這個:

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 2013-03-13 19:46:31

+0

如果你想在時間列中插入'true',那麼SQL數據類型需要是'位'。這是否是這種情況,那麼不需要'@ time'參數,它是幹什麼用的? – 2013-03-13 19:49:43

+0

它只是引用時間列,例如8.50,8.00 – Hamoudy 2013-03-13 19:55:41