从字符串转换日期和/或时间时转换失败

时间:2012-09-05 07:39:08

标签: c# sql-server

 private void btnCheck_Click(object sender, EventArgs e)
        {
            string costring = connection();
            string MyQuery = "select expense from dbo.KmtAccounts where date between '"+ txtFromDate +"' and '" +txtToDate +"' and    registernumber='" + txtRegNo.Text + "'";
            SqlConnection conn = new SqlConnection(costring);
            SqlCommand cmd = new SqlCommand(MyQuery, conn);
            conn.Open();
            txtResult.Text = Convert.ToString(cmd.ExecuteScalar());
            conn.Close();
        }

2 个答案:

答案 0 :(得分:3)

在您的代码中有几点需要改进。

  1. 似乎 txtFromDate和txtToDate是控件?!我认为你想访问txtFromDate.Text
  2. 您应该真正使用 SqlParameters来阻止SQL注入dotnetperls.com上的好例子)
  3. 您可以通过某种验证检查您的UI值是否正确,甚至更好,选择仅允许有效值的控件 DateTimePicker,{{3} },...

答案 1 :(得分:2)

导致异常的问题是txtFromDate和/或txtToDate中的值不被理解为代表日期。

更大的问题是,似乎很少或没有什么可以阻止其中一个值包含有效值,后跟';delete from dbo.KmtAccounts;---

这两个问题都可以通过查询select expense from dbo.KmtAccounts where date between @from and @to and registernumber=@reg,然后使用参数将日期(作为日期,而不是字符串)和注册号添加到查询中来解决。