C# SQL插入语法,数据库未更新

C# SQL插入语法,数据库未更新,c#,sql,database,visual-studio-2010,insert,C#,Sql,Database,Visual Studio 2010,Insert,编辑 我更改了代码,因此使用:[“+Time1+”]而不是参数。这是第一次工作,但当时间增加0.5时,它保持为false。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");

编辑

我更改了代码,因此使用:[“+Time1+”]而不是参数。这是第一次工作,但当时间增加0.5时,它保持为false。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());
            }

        }
for(双倍时间=开始时间\u 5;时间<结束时间\u 5;时间=时间+0.5)
{
字符串Time1=Time.ToString(“0.00”);
尝试
{
SqlConnection cn=new SqlConnection(“数据源=。\\SqlExpress;初始目录=AllensCroft;集成安全性=True;MultipleActiveResultSets=True;应用程序名称=EntityFramework;”);
cn.Open();
SqlCommand=newsqlcommand(“插入插槽([Date],[RoomID],“+Time1+”])值(@Date,@room,1)”,cn);
Command.Parameters.AddWithValue(“日期”,日期);
Command.Parameters.AddWithValue(“房间”,房间组合。SelectedValue);
Command.ExecuteNonQuery();
尝试
{
cn.Close();
}
捕获(例外e)
{
Console.WriteLine(如ToString());
}
}
捕获(例外e)
{
Console.WriteLine(如ToString());
}
}

您不能在列列表中包含变量,我猜您希望@Time位于值列表中,关于该值的正确位置

编辑:要将时间作为列名插入,请执行一些C#字符串操作:

SqlCommand Command = new SqlCommand("INSERT INTO Slots (Date, RoomID, [" + time + "]) Values (@date, @room, 1)", cn);
再次编辑:true不是T-SQL关键字,T-SQL位列的值为1或0


现在,您不想将时间作为参数添加到查询中。

您将一个变量列为列名(@time)

编辑
就在这里:

插入插槽(日期、房间号,
-->@time
  • 在第三列(时间)之前有一个
    @
  • 添加参数时,需要添加
    @
  • 在insert语句中,您试图将true作为布尔值插入
    time
  • SqlCommand=newsqlcommand(“插入插槽(日期、房间ID、时间)”+“值(@Date、@room、@time)”,cn);
    Command.Parameters.AddWithValue(“@date”,date);
    Command.Parameters.AddWithValue(“@room”,rooms\u 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);
    

    SQL错误是什么?首先,循环是否正在执行?请注意,在for循环中使用Double作为索引器变量通常被认为是不好的做法!如果不是,@time是您的列名,那么为什么要在那里使用它?time是一个列和一个变量,我希望它是真的,是吗possible@JackPettinger只是数据库没有更新时间是一列和一个变量,我希望它是真的,这可能吗,例如8.5列,我希望它是真的true@Hamoudy答案更新为我认为您要求的内容我回答了这个问题,但同样的问题SqlCommand=new SqlCommand(“插入插槽(日期,房间ID,8.00)值(@Date,@room,true)”,cn)@Hamoudy我包含的方括号很重要,8.00需要转义才能用作列名。此外,我刚刚更新了答案,以反映您在SQL Server中没有使用
    true
    作为值,而是使用1。此外,您试图对这些时间列所做的操作与关系数据库理论的建议并不完全一致。您因为时间列不是独立的,所以打破了第三个标准形式。时间是一个列,它是布尔值,我希望它是真的,这是可能的吗,例如第8.5列,我希望它是真的如果你想在时间列中插入
    true
    ,那么SQL数据类型需要是
    。是这样吗是否不需要使用
    @time
    参数,它的作用是什么?它只是引用时间列,例如8.50、8.00您是说您在不同的时间有不同的列?即,8.00、8.15、8.30等的列。