2013-03-13 64 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