2016-07-14 9 views
-4

このステートメントをパラメータ化されたクエリにしたいと思っています。type_idは、その作成方法を私に混乱させました。このパラメータ化されたクエリの作成方法

string type_id="text"; 
updateCommand = string.Format("UPDATE ") + type_id 
    + string.Format("_Table SET Status={0},Seq={1},Cy={2},Ca={3},Iv={4}", bcr, seq, cy, ca, iv) 
    + string.Format("WHERE ASDU = {0} AND IOA = {1}", station, ioa); 
+0

どのようなエラーが表示されますか? –

+0

'' type_id ''は有効なC#でもないので私も混乱します。変数と列の種類とこれまでに試した内容と動作しなかった内容を教えてください。 –

+0

これらのどれも実際にはSQLパラメータですが、同じ結果を出さない文字列形式です。適切なSQLパラメータを参照することができます – BugFinder

答えて

2

まず、しかし、C#6.0 文字列補間が出て助け、あなたはテーブル名をパラメータできないことを、注意してください

string type_id = "text"; 
... 
string updateCommand = 
    [email protected]"UPDATE {type_id}_Table 
     SET Status = @prm_Status, 
      Seq = @prm_Seq, 
      Cy = @prm_Cy, 
      Ca = @prm_Ca, 
      Iv = @prm_Iv 
     WHERE ASDU = @prm_ASDU AND 
      IOA = @prm_IOA"; 

SQL を読みやすくします。更新自体を実行してください:

using (SqlConnection conn = new SqlConnection(ConnectionStringHere)) { 
    conn.Open(); 

    using (SqlCommand q = new SqlCommand(updateCommand, conn)) { 
     // AddWithValue: not the best choice, 
     // but I have no idea on 'bcr', 'seq'.. 'ioa' etc. types 
     q.Parameters.AddWithValue("@prm_Status", bcr);  
     q.Parameters.AddWithValue("@prm_Seq", seq); 
     q.Parameters.AddWithValue("@prm_Cy", cy); 
     q.Parameters.AddWithValue("@prm_Ca", ca); 
     q.Parameters.AddWithValue("@prm_Iv", iv); 
     q.Parameters.AddWithValue("@prm_ASDU", station); 
     q.Parameters.AddWithValue("@prm_IOA", ioa); 

     q.ExecuteNonQuery(); 
    } 
    } 
関連する問題