我有一个DataTable,它有很多记录。
我尝试了以下代码来迭代DataTable并插入数据库,但是我收到一条错误消息,说明参数尚未声明:
using (SqlCommand command = new SqlCommand(("My insert statement"), connection))
{
SqlParameter param1 = new SqlParameter();
SqlParameter param2 = new SqlParameter();
param1.ParameterName = "@ProductID";
param2.ParameterName = "@ID";
foreach (DataRow row in table.Rows)
{
param1.Value = row[0].ToString();
param2.Value = row[1].ToString();
command.ExecuteNonQuery();
}
}
有什么想法吗?请不要建议存储过程 - 我想通过这种方法或类似方法来做到这一点。
答案 0 :(得分:1)
您需要将参数添加到命令中。
http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx
谨慎
如果你把你的代码放在你的第一次执行的foreach中的方式将会有效,然后下一个将失败,并显示一条错误消息,指出你已经有一个名为@ProductID / @ID的变量。
每次都需要清除参数。
答案 1 :(得分:1)
查看SqlBulkCopy,它将允许您将Datatable直接传递到数据库。 Link
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.DestinationTableName = "dbo.TableYouWantToInsertTheRowsTo";
try
{
// Write from the source to the destination.
bulkCopy.WriteToServer(newProductsDataTable);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
答案 2 :(得分:0)
如果您使用的是SQL2008,那么整个List / object / datatable可以作为参数传递给存储过程。在这种情况下,您还需要在sql中声明相同的类。