1

以下代码有什么问题?我将日期 n 时间存储到 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");
4

3 回答 3

4

这是一个非常糟糕的方法,因为它为 sql-injections 开放。你最好使用 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();
于 2012-04-11T07:38:50.583 回答
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();
     }
  }
}
于 2012-04-11T07:37:09.363 回答
1

除了您使用的是内联 SQL 之外,这很糟糕。您应该@param1在查询中使用语法,然后向其中添加参数(因此也回避了这个问题)。更好的是 - 使用像 Linq to Sql 或实体框架(或 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(或更多)是应得的。

于 2012-04-11T07:38:26.607 回答