C# 按参数使用列名更新

C# 按参数使用列名更新,c#,.net,ado.net,C#,.net,Ado.net,如何通过参数传递列名称 以身作则 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()].toS

如何通过参数传递列名称

以身作则

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()
    } 
}
DataTable dt=newdatatable();
//这里我填写我的数据表
对于(int i=0;i

这不起作用,但我有88列,我需要更新每行中每88列中的所有数据。

您不能参数化列名


要做您想做的事情,您需要求助于。

好吧,如果您有30000行88列,并且您需要更新所有88列,那么您可能需要重新考虑您的数据库模式


Itay.

我找到了一种方法,可以包含参数化列名的变通方法。我也有同样的问题,但我想出了一个不同的方法,因为我是唯一一个使用列名的人,所以我相信这仍然是一个安全的赌注

            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);

从上面的代码可以看出。我几乎尝试了你所做的,然后我不得不对其进行评论。然后,我将字符串连接在一起,并能够使用参数化的列名和值,然后安全地添加该值。然而,列名是不安全的,但这是一个只有我会使用的方法,所以它仍然有点安全。如果您希望更安全,您可以添加正则表达式,但您已经了解了修复方法。

但是,如果一个数据表中有30000行,并且需要更新每个88列上的每个数据,那么,如何将整个数据表传递给过程?@user965769-如果您使用的是SQL Server 2008及更高版本,您可以使用。是,我有SQLServer2008企业版。要插入许多数据,我使用的是SqlBulkCopy类,我的疑问是如何动态地进行更新,正如我上面所说的。我将学习这个表值参数,看看这是否适用于我的项目。非常感谢!我如何做一个逻辑,只更新必须更新的列?问题是只传递给comando.CommandText=“update…”