2016-07-14 62 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参数,这是一个字符串格式,不会产生相同的结果..所以,你可以继续你的方式和沟渠,第一个字符串格式,只有1个字符串格式和一堆参数,或者您可以查看适当的sql参数 – BugFinder

回答

2

首先,使SQL 可读

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"; 

请注意,你不能参数化表的名称,但是C#6.0 串插帮助了;然后执行更新本身:

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(); 
    } 
    }