我正在使用企业库,但想法是一样的。我有一个 SqlStringCommand 和 sql
是用StringBuilder构造的
"insert into table (column1, column2, column3) values (@param1-X, @param2-X, @parm3-X)"+" "
其中“X”表示一个大约 700 行的“for 循环”
StringBuilder sb = new StringBuilder();
for(int i=0; i<700; i++)
{
sb.Append("insert into table (column1, column2, column3) values (@param1-"+i+", @param2-"+i, +",@parm3-"+i+") " );
}
然后构造一个命令对象,将所有带值的参数注入(inject)其中。
基本上,700 行和 3 个参数,对于这个“一个 sql”语句,我最终得到了 2100 个参数。
正常运行了几天,突然报错
===============================================================
A severe error occurred on the current command. The results, if any, should be discarded.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNon
非常感谢任何指点。
最佳答案
关于c# - 具有超过 2000 个参数的 ADO.NET 批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2479054/