使用C#更新数据库条件

时间:2013-01-02 14:36:36

标签: c# asp.net drop-down-menu calendarextender

我有一个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',这是未提供的。

我需要你的帮助,我正在等待你的答案我的朋友。

非常感谢。

2 个答案:

答案 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值..