如何通过参数
传递列名按照示例
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列的所有数据。
答案 0 :(得分:2)
您无法参数化列名称。
要做你想做的事,你需要诉诸dynamic SQL。
答案 1 :(得分:0)
好吧,如果你有30,000行,88列,并且你需要更新所有88列,你可能想重新考虑你的数据库模式。
伊泰。
答案 2 :(得分:0)
我找到了一种方法来包含参数化列名的解决方法。我有同样的问题,但想出了一个不同的方式,因为我是唯一使用列名的人,所以我相信这仍然是一个安全的赌注。
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);
从上面的代码中可以看出。我几乎尝试了你所做的事情,然后我不得不评论出来。然后我将字符串连接在一起,并能够使用我的参数化列名称和值,然后安全地添加该值。然而,列名不是安全的,但这是一种只有我将使用的方法,所以它仍然有点安全。如果您想要更安全但可以了解修复,则可以添加正则表达式。