我有一个ASP.NET项目。
在这个项目中,我有2个日历扩展器(比如datetimepickers来选择日期),1个下拉列表,4个文本框和1个按钮。
在我的数据库中,我有这些列;
[ID] - [NAME] - [WORKTYPE] - [MON] - [TUE] - [WED] - [THU] - [FRI] - [SAT] - [SUN] -
[TOTAL] - [DAYS] - [PENALTY1] - [PENALTY2] - [CORRECTION] - [DATE] -
[RAWTIME] - [ACCUMULATIVE]
所有这些列都是integer
,只是名称和工作类型为varchar
。
这是一个问题。我需要更新我要编写的值,他们必须更新所选日期和所选员工之间的行。我希望自己解释一下。
我在.cs方面编写了这个C#代码。
protected void Button1_Click(object sender, EventArgs e)
{
string strSQL = "UPDATE informations SET DAYS= @DAYS, PENALTY1 = @PENALTY1, PENALTY2 = @PENALTY2, CORRECTION = @CORRECTION WHERE DATE BETWEEN @DATE1 AND @DATE2 AND ID = @ID ";
string connStr = WebConfigurationManager.ConnectionStrings["asgdb01ConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand comm = new SqlCommand())
{
comm.Connection = conn;
comm.CommandText = strSQL;
comm.CommandType = CommandType.Text;
comm.Parameters.AddWithValue("@ID", Int32.Parse(DropDownList1.SelectedItem.Value));
comm.Parameters.AddWithValue("@DATE1", CalendarExtender1.SelectedDate);
comm.Parameters.AddWithValue("@DATE2", CalendarExtender2.SelectedDate);
comm.Parameters.Add(new SqlParameter("@DAYS", Int32.Parse(TextBox3.Text)));
comm.Parameters.Add(new SqlParameter("@PENALTY1", Int32.Parse(TextBox4.Text)));
comm.Parameters.Add(new SqlParameter("@PENALTY2", Int32.Parse(TextBox5.Text)));
comm.Parameters.Add(new SqlParameter("@CORRECTION", Int32.Parse(TextBox6.Text)));
try
{
conn.Open();
int i = comm.ExecuteNonQuery();
conn.Close();
if (i > 0)
{
Response.Write("Success ! ");
}
else
{
Response.Write("No record was updated ");
}
}
catch (SqlException ex)
{
Response.Write(ex.ToString());
}
}
}
当我按下计算按钮
时,它会在页面顶部出现这个巨大的错误System.Data.SqlClient.SqlException(0x80131904):参数化 查询'(@ ID int,@ DATE1 nvarchar(4000),@ DATE2 nvarchar(4000),@ DAYS int,'期望参数'@DATE1',这是未提供的。
我需要你的帮助,我正在等待你的答案我的朋友。
非常感谢。
答案 0 :(得分:0)
CalendarExtender1.SelectedDate为null - 要么是因为它应该为null,要么尚未从Web请求参数更新
使用第二个参数null调用Parameters.AddWithValue(几乎)与完全不调用它相同,如果需要在SQL参数中传递null,请使用DbNull.Value
答案 1 :(得分:0)
我已经解决了我的问题。
Cuz,我期待从我的CalendarExtender中获取价值。但这怎么可能......
我的文本框获取值.. 所以必须改变这样;
comm.Parameters.AddWithValue("@DATE1", Convert.ToDateTime(TextBox1.Text));
comm.Parameters.AddWithValue("@DATE2", Convert.ToDateTime(TextBox2.Text));
感谢警告我关于NULL值..