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();
}
问问题
364 次
2 回答
3
您的代码中有几点需要改进。
- 看来txtFromDate 和 txtToDate 是控件?!我想你想访问 txtFromDate.Text
- 你真的应该使用SqlParameters来防止 SQL 注入(dotnetperls.com上的好例子)
- 您可以通过某种验证来检查您的 UI 值是否正确,或者甚至更好,选择一个只允许有效值的控件(DateTimePicker、Calendar,...)
于 2012-09-05T07:45:35.277 回答
2
导致异常的问题是txtFromDate
和/或中的值txtToDate
不被理解为表示日期。
更大的问题是,似乎很少或根本没有可以阻止其中一个包含有效值的值,然后是';delete from dbo.KmtAccounts;---
.
这两个问题都可以通过查询来解决select expense from dbo.KmtAccounts where date between @from and @to and registernumber=@reg
,然后使用参数将日期(作为日期,而不是字符串)和注册号添加到查询中。
于 2012-09-05T07:46:25.323 回答