protected void Button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd1 = new SqlCommand(string.Format("insert into dbo.FillTable values ('{0}', '{1}', 'FA0005')", TextBox2.Text, TextBox1.Text), con);
SqlDataAdapter dr = new SqlDataAdapter(cmd1);
con.Close();
DataSet dl = new DataSet();
dr.Fill(dl);
}
现在,让我们分解string.Format
函数。它说如果我有一个像这样格式化的字符串"Hello {0}!"
,我在函数的零索引处传入的任何内容都将替换{0}
. 所以,假设我有这个字符串"Hello {0}, and I say again hello {0}!"
并且我像这样使用它string.Format("Hello {0}, and I say again hello {0}!", "world")
,我会得到一个这样的字符串"Hello **world**, and I say again hello **world**!"
。
笔记
但是,上面的解决方案让您对 SQL 注入开放,所以如果您想防止这种情况发生,那么让我们走这条路。
protected void Button1_Click(object sender, EventArgs e)
{
con.Open();
SqlCommand cmd1 = new SqlCommand("insert into dbo.FillTable values (@TextBox2Val, @TextBox1Val, 'FA0005')", con);
cmd1.AddParameterWithValue( "TextBox1Val", TextBox1.Text );
cmd1.AddParameterWithValue( "TextBox2Val", TextBox2.Text );
SqlDataAdapter dr = new SqlDataAdapter(cmd1);
con.Close();
DataSet dl = new DataSet();
dr.Fill(dl);
}
现在让我们分解一下。发送到 SQL 服务器的语句就是您所看到的,@paramname
在字符串中带有 。但是,它会将其作为 a 发送并使用您在方法prepare
中提供的值准备该语句。AddParameterWithValue
请注意,只要 中的值TextBox2.Text
是日期,您就不必关心格式,因为 SQL Server 会处理这个问题。请记住,SQL Server 以一种格式存储它,您将以另一种格式显示它,但只要它们有效,它就可以从无数格式转换。
现在,正如@Willem 所说,您应该确保TextBox2.Text
in 实际上是一个日期,所以让我们这样做,在函数顶部添加这个片段......
DateTime theDate;
if (!DateTime.TryParse(TextBox2.Text, out theDate))
{
// throw some kind of error here or handle it with a default value
...
}
...然后用AddParameterWithValue
这样的方式修改行...
cmd1.AddParameterWithValue( "TextBox2Val", theDate );