2013-01-02 28 views
-1

我有一個ASP.NET項目。使用C#使用條件更新數據庫

在這個項目上,我有2個日曆擴展(如datetimepickers來選擇日期),1個下拉列表,4個文本框和1個按鈕。

在我的數據庫中,我有這些列;

[ID] - [NAME] - [WORKTYPE] - [MON] - [TUE] - [WED] - [THU] - [FRI] - [SAT] - [SUN] - 
[TOTAL] - [DAYS] - [‌PENALTY1] - [PENALTY2] - [CORRECTION] - [DATE] - 
[RAWTIME] - [ACCUMULATIVE] 

所有這些列是integer,只是名稱和worktype是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),@天 INT,」預計參數 '@ DATE1',但未提供。

我需要你的幫助厲害,我在等你的回答我的朋友。

非常感謝。

+4

什麼問題? – ChrisF

+1

提到你的問題,你有什麼錯誤。 – Arshad

+0

請爲你的參數.add語句,因爲它出現在你的strSQL – Saju

回答

0

CalendarExtender1.SelectedDate爲空 - 或者因爲它應該是空值或它不是來自web請求參數更新尚未

主叫Parameters.AddWithValue具有空的第二個參數是(幾乎)相同的根本不調用它,如果您需要在SQL參數中傳遞null,請使用DbNull.Value

+0

我將如何使用,我應該把它放在哪裏,你能幫我我的朋友嗎? –

+0

我解決了我的問題。 我是巨牛.. Cuz,我期待從我的CalendarExtender保持價值。但是如何! 我的TEXTBOX取得了價值! 所以它必須像這樣改變; comm.Parameters.AddWithValue(「@ DATE1」,Convert.ToDateTime(TextBox1.Text)); comm.Parameters.AddWithValue(「@ DATE2」,Convert.ToDateTime(TextBox2.Text)); 感謝您對NULL值的警告。 –

0

我解決了我的問題。

因爲,我期待從我的CalendarExtender持有的價值。但這怎麼可能..

我的文本框得到的值.. 所以它必須改變這樣;

comm.Parameters.AddWithValue("@DATE1", Convert.ToDateTime(TextBox1.Text)); 
comm.Parameters.AddWithValue("@DATE2", Convert.ToDateTime(TextBox2.Text)); 

感謝提醒我有關NULL值..