[英]Update with column name by parameter
如何通過參數傳遞列名,
以身作則
DataTable dt = new DataTable();
// Here I fill my datatable
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
string columnsname = dt.Rows[i][dt.columns[j].toString()].toString();
SqlCommand comando = new SqlCommand();
comando.commandText = "UPDATE Sales.Store SET @columnname = @demographics where id = @id";
comando.Parameters.Add(new SqlParameter("@columnname", columname));
comando.Parameters.Add(new SqlParameter("@dados2", dados2));
comando.ExecuteNonQuery();
comando.Clear();
comando.Dispose()
}
}
這不起作用,但我有 88 列,我需要更新每行中每 88 列的所有數據。
您不能參數化列名。
為了做你想做的事,你需要求助於動態 SQL 。
我已經找到了一種方法來包含參數化列名稱的變通方法。 我遇到了同樣的問題,但想出了一種不同的方法,因為我將是唯一一個使用列名的人,所以我相信這仍然是一個安全的賭注。
String sqlcomm = "SELECT * FROM Asset WHERE " + assetColName + " = ";
command.CommandText = sqlcomm + "$assetColValue";
//command.CommandText = @"SELECT * FROM Asset WHERE $assetColName = '$assetColValue'";
//command.Parameters.AddWithValue("$assetColName", assetColName);
command.Parameters.AddWithValue("$assetColValue", assetColValue);
從上面的代碼可以看出。 我幾乎嘗試了你所做的,然后我不得不注釋掉。 然后我將字符串連接在一起,並能夠使用我的參數化列名和值,然后安全地添加該值。 然而,列名並不安全,但這是一種只有我會使用的方法,所以它仍然有些安全。 如果你想更安全,你可以添加正則表達式,但你知道修復的想法。
只需連接 sql 字符串:
"UPDATE Contracts set " + columnName + " = @columnValue where ID = @ID"
其中列名是表示表中列的字符串
好吧,如果您有 30,000 行和 88 列,並且您需要更新所有 88 列,您可能需要重新考慮您的數據庫架構。
伊泰。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.