2016-09-30 38 views
0

我有兩個按鈕,SetIn和SetOut。他們都有commandName UPDATE(我有兩個按鈕,因爲我希望文本在按鈕上有所不同,具體取決於行中的一個字段的值。)帶有時間戳更新的gridviewUpdating asp.net錯誤

我遇到了問題,因爲當我運行更新SQL語句,它在我拋出一個錯誤它說:

類型「System.Data.SqlClient.SqlException」的異常出現在System.Data.dll中,但在用戶代碼中沒有處理
附加信息:「14」附近的語法錯誤

這意味着我試圖更新行的日期和時間戳的問題(我在14.02pm進行更新)。

我的aspx.cs頁面代碼是:

protected void GridView1_RowUpdating(object sender, System.Web.UI.WebControls.GridViewUpdateEventArgs e) 
{ 
    Label id = GridView1.Rows[e.RowIndex].FindControl("lbl_Index") as Label; 
    int rowToUpdate = Int32.Parse(id.Text); 
    con = new SqlConnection(cs); 

    int scopeValue; 
    con = new SqlConnection(cs); 
    cmd = new SqlCommand(); 

    cmd.CommandText = "SELECT in_scope FROM " + databaseName + " WHERE id = '" + rowToUpdate + "'"; 
    cmd.Parameters.AddWithValue("@id", rowToUpdate); 
    cmd.Connection = con; 

    try 
    { 
     con.Open(); 
     scopeValue = Convert.ToInt32(cmd.ExecuteScalar()); 
     //database_entries.Text = recordCount.ToString(); 
    } 
    finally 
    { 
     con.Close(); 
    } 

    string modifiedBy = userManagement.getWeldID(); 
    string updateDate = DateTime.UtcNow.ToString("dd/MMM/yyyy HH:mm:ss"); 
    { 
     if (scopeValue == 1) 
     { 
      // Label id = GridView1.Rows[e.RowIndex].FindControl("lbl_Index") as Label; 
      string sqlStatement = ""; 
      con = new SqlConnection(cs); 
      // SqlCommand cmd = new SqlCommand(); 
      sqlStatement = @"update dbo.Fair_Use_InScope_MIF_Alex_temp set in_scope = '0', modified_by = " + modifiedBy + ", date_updated = " + updateDate + " where id = '" + rowToUpdate + "'"; 

      con.Open(); 
      cmd = new SqlCommand(sqlStatement, con); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      ShowData(); 
     } 
     if (scopeValue == 0) 
     { 
      // Label id = GridView1.Rows[e.RowIndex].FindControl("lbl_Index") as Label; 
      string sqlStatement = ""; 
      con = new SqlConnection(cs); 
      // SqlCommand cmd = new SqlCommand(); 
      sqlStatement = @"update dbo.Fair_Use_InScope_MIF_Alex_temp set in_scope = '1', modified_by = " + modifiedBy + ", date_updated = " + updateDate + " where id = '" + rowToUpdate + "'"; 
      con.Open(); 
      cmd = new SqlCommand(sqlStatement, con); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      ShowData(); 
     } 
    } 
} 

基本上,我試圖讓scopeValue(0或1)行的,如果更新調用的命令,並scopeValue以前0,現在設置爲1,反之亦然。我還需要更新更改的時間以及在該行進行更改的人員。 (這些都顯示在gridview)

任何幫助將不勝感激,因爲我是初學ASP.NET和C#和SQL SERVER!

回答

0

您正在發送一個DateTime作爲一個字符串(甚至沒有包含單引號date_updated = '" + updateDate + "'),這將始終會導致問題。

最好在查詢中使用參數。這樣可以防止SQL注入,提高可讀性,確保類型安全性,不用擔心正確使用引號等。

 string sqlStatement = "UPDATE dbo.Fair_Use_InScope_MIF_Alex_temp SET in_scope = 0, modified_by = @modifiedBy, date_updated = @updateDate WHERE (id = @rowToUpdate)"; 

     using (SqlConnection connection = new SqlConnection(cs)) 
     using (SqlCommand command = new SqlCommand(sqlStatement, connection)) 
     { 
      command.Parameters.Add("@modifiedBy", SqlDbType.VarChar).Value = modifiedBy; 
      command.Parameters.Add("@updateDate", SqlDbType.DateTime).Value = DateTime.Now; 
      command.Parameters.Add("@rowToUpdate", SqlDbType.Int).Value = 35; 

      connection.Open(); 
      command.ExecuteNonQuery(); 
     } 
+0

感謝您的幫助!我不再收到錯誤信息!我可以問爲什麼rowtoupdate的價值是35?謝謝! – akb29

+0

在我的示例中,它是一個編號,用於顯示3種不同的數據類型。你可以把它改成'rowToUpdate' – VDWWD

+0

非常感謝你!這已經解決了我的問題 - gridview像預期的那樣更新,一切都成爲魅力 - 救星! – akb29