我正在處理一些SQL代碼。SQL SELECT * FROM XXX WHERE columnName in Array
我熟悉的語法
SELECT * FROM myTable WHERE myColumn in ('1','2','3');
假設我寫,我想用C#數組,其中我用('1','2','3')
一些C#代碼。我怎麼做?
我正在處理一些SQL代碼。SQL SELECT * FROM XXX WHERE columnName in Array
我熟悉的語法
SELECT * FROM myTable WHERE myColumn in ('1','2','3');
假設我寫,我想用C#數組,其中我用('1','2','3')
一些C#代碼。我怎麼做?
您可以動態建立你的SQL字符串。
如果你知道數組中的數據是好的(不是由用戶提供的),你可以做一個字符串。加入。
var sql = string.Format("SELECT * FROM myTable WHERE myColumn in ({0})", string.Join(", ", myArray));
如果您不知道它是已清理過的數據,那麼您應該使用帶參數的Command。
var myArray = new string[] { "1", "2", "3" };
//var sql = string.Format("SELECT * FROM myTable WHERE myColumn in ({0})", string.Join(", ", myArray));
var cmd = new System.Data.SqlClient.SqlCommand();
var sql = new System.Text.StringBuilder();
sql.Append("SELECT * FROM myTable WHERE myColumn in (");
for (var i = 0; i < myArray.Length; i++)
{
cmd.Parameters.Add("@" + i, myArray[i]);
if (i > 0) sql.Append(", ");
sql.Append("@" + i);
}
sql.Append(")");
cmd.CommandText = sql.ToString();
中的tsql:myColumn接受:看起來有點KLUDGEy給我,但它的工作原理。 – 2010-12-13 15:42:05
我會通過for循環並按照你想要的方式進行格式化。例如,假設你有一個數組:6,3,abc。使用for循環將其添加到一般字符串中,以便得到結果:(6,3,abc);不要太難,然後將其插入聲明中。
SQL不支持通過IN子句對逗號分隔的值列表使用單個變量,這意味着您的C#代碼必須將數組轉換爲逗號分隔列表。該列表然後在執行查詢之前連接到查詢中。
否則,你需要看使用數據庫本地動態SQL語法 - 但仍然意味着你必須讓C#數組轉換成SQL被操縱......
您只需做一個string.Join
創建的數組,可以作爲參數傳遞給查詢字符串。
例如:
var values = new string[] { "1", "2", "3" };
var parameterString = string.Join(",", values);
var sql = "SELECT * FROM myTable WHERE myColumn in (@param)";
var cmd = new SqlCommand(sql, connectionstring);
cmd.Parameters.AddWithValue("@param", parameterString);
var reader = cmd.ExecuteReader();
是否使用LINQ到SQL?如果不是,你用什麼來訪問數據? – 2010-12-09 00:56:44
是myColumn字符串還是整數數據?如果是整數,你應該使用(1,2,3) – 2010-12-09 01:01:30