2016-07-14 63 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(); 
    } 
    }