我正在尝试批量插入/更新SqlDataAdapter。当我设置UpdateBatchSize = 1时,它是有效的,但是设置为2会给出异常“指定的参数名'Id‘无效。”
using (var sqlDataAdapter = new SqlDataAdapter
{
UpdateBatchSize = 2
})
using (var connection = new SqlConnection("Data Source=server;Initial Catalog=DB;Integrated Security=True"))
using (var command = new SqlCommand("INSERT INTO Test (Id) VALUES (@Id)", connection)
{
UpdatedRowSource = UpdateRowSource.None
})
{
command.Parameters.Add("Id", SqlDbType.Int).SourceColumn = "Id";
sqlDataAdapter.InsertCommand = command;
var table = new DataTable("Test");
table.Columns.Add("Id");
table.Rows.Add(1);
table.Rows.Add(2);
sqlDataAdapter.Update(table);
}发布于 2013-04-12 09:36:05
在反编译SqlDataAdapter并使用堆栈跟踪之后,我来到了这一行。
if (!SqlCommandSet.SqlIdentifierParser.IsMatch(sqlParameter.ParameterName))
throw ADP.BadParameterName(sqlParameter.ParameterName);因此,通常您可以在SqlParameter名称中省略@,但在执行此批处理时,它需要@。非常奇怪。正确的行将变为
command.Parameters.Add("@Id", SqlDbType.Int).SourceColumn = "Id";发布于 2013-04-12 08:47:24
{
sqlDataAdapter.Update(table);
}该参数对sqlDataAdapter无效,需要先输入DataSet名称,再输入表名,我觉得应该是这样:
{
sqlDataAdapter.Update(youDataSet,"YourTable");
}https://stackoverflow.com/questions/15961208
复制相似问题