试图在sql server中插入日期和时间但是收到错误

时间:2012-04-11 07:33:40

标签: c# sql-server

以下代码有什么问题?将日期和时间存储到sql server中的datetime字段中。

private void button1_Click(object sender, EventArgs e)
    {
        string d = DateTime.Now.ToShortDateString();
        cmd.CommandText = "insert into trans values("+label9.Text+",'d');";
        cmd.Connection = con;
        con.Open();
        int x= cmd.ExecuteNonQuery();
        MessageBox.Show("Attendance recorded succesfully");

3 个答案:

答案 0 :(得分:4)

这是一种非常糟糕的方法,因为它打开了sql注入。你最好使用SqlParameter。

cmd.CommandText="insert into trans values(@label, @date)";
cmd.Parameters.AddWithValue("label", int.Parse(label9.Text));
cmd.Parameters.AddWithValue("date", DateTime.Now);
cmd.Connection = con;
con.Open();
int x= cmd.ExecuteNonQuery();

答案 1 :(得分:2)

CommandText字符串中有错误输入。请改用

cmd.CommandText="insert into trans values("+label9.Text+","+DateTime.Now.ToString()+");";

修改

完整编辑的代码将是这样的。请注意,using语句会关注处理您的更新,但此代码仍然很糟糕且是 sql-injections 的内容。如果您想要安全的代码,则必须使用参数。

private void button1_Click(object sender, EventArgs e)
{
    using (System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection("Data Source=localhost; Initial Datalog=myDatabase; Integrated Security=TRUE;")) 
  {
      using (System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand("insert into trans values("+label9.Text+","+DateTime.Now.ToString()+");", connection)) 
    {
        connection.Open();
        command.ExecuteNonQuery();
        connection.Close();
     }
  }
}

答案 2 :(得分:1)

除了使用内联SQL之外,这很糟糕。您应该在查询中使用@param1语法,然后向其添加参数(因此也可以回避此问题)。更好 - 使用像Linq到Sql或Entity Framework(或者nHibernate或其他)的ORM。

SQL Server通常希望它是yyyymmdd格式的时间,而且你真的应该检查标签的值确实是一个整数,并且只运行查询:

int labelValue = 0;
if(int.TryParse(label9.Text, out labelValue))
{
  cmd.CommandText="insert into trans values("+ labelValue +
    ", '" + DateTime.Now.ToString("yyyyMMdd");"')"; 
  cmd.Connection = con;      
  con.Open();      
  int x= cmd.ExecuteNonQuery();      
  MessageBox.Show("Attendance recorded succesfully");
}     

我还说你真的需要检查你对连接/命令的使用 - 你在哪里Dispose?从这段代码来看,我猜你没有?

总而言之,即使有了这些修正,我也不建议你这样做 - 按照Harm建议的方式做到 - +5(或更多)是应得的。