簡體   English   中英

通過參數更新列名

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM