2016-09-30 2 views
0

私は2つのボタン、SetInとSetOutを持っています。彼らは両方ともcommandName UPDATEを持っています(行の1つのフィールドの値に応じて、ボタン上のテキストが異なるように2つのボタンがあります)タイムスタンプ更新でgridviewUpdatingエラーが発生しました

私は実行時に問題が発生します更新SQL文は、それは私にエラーをスローそれは言う:。

型「System.Data.SqlClient.SqlException」の例外が発生したのSystem.Data.dllではなく、ユーザーコードで処理されなかった
追加情報: '14'付近の構文が正しくありません。

これは、行を更新しようとしている日付と時刻の問題(私は14.02pmに更新を行っています)。

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)行の、およびUpdateコマンドが呼び出された場合、およびscopeValueは以前だった:

マイaspx.csページのコードです0の場合は1に、逆の場合は1に設定します。私はまた、変更が行われた時刻とその行を誰が変更したのかを更新する必要があります。 (これらは両方ともグリッドビューで表示されます)

私は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

ありがとうございました!私はもはやそのエラーメッセージを受け取りません!なぜ私は列替えの価値が35であるのか尋ねることはできますか?ありがとう! – akb29

+0

私の例では、3つの異なるデータ型を表示するためのメイクアップ番号です。これを 'rowToUpdate'に変更することができます – VDWWD

+0

ありがとうございます!これは私の問題を修正しました - 期待通りにgridviewのアップデートとすべてが魅力的な人生の節約になります! – akb29

関連する問題