我遇到了几个错误:
- 我无法将 NULL 值直接传递给 Odbc
- 命名参数似乎不起作用。
经过几个小时精疲力竭的故障排除,我终于想到了我是如何在不久前的一个 Java 项目中看到这样做的。我将代码更改为仅使用“?” 对于参数(这就是我在 Java 代码中看到的方式),然后确保按照我希望将参数添加到查询中的顺序将参数添加到 OdbcCommand 对象。就像魔术一样,它奏效了。
这是一个例子:
OdbcTransaction lTransaction = MyConnection.BeginTransaction();
object[] my_params = function_to_get_input();
toInsert = new OdbcCommand();
toInsert.CommandText = string.Format("INSERT INTO table_name (`col1`,`col2`,`col3`) VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?);");
toInsert.Parameters.AddWithValue("val0", my_params[0]);
toInsert.Parameters.AddWithValue("val1", my_params[1]);
toInsert.Parameters.AddWithValue("val2", my_params[2]);
toInsert.Parameters.AddWithValue("val3", my_params[3]);
toInsert.Parameters.AddWithValue("val4", my_params[4]);
toInsert.Parameters.AddWithValue("val5", my_params[5]);
toInsert.Parameters.AddWithValue("val6", my_params[6]);
toInsert.Parameters.AddWithValue("val7", my_params[7]);
toInsert.Parameters.AddWithValue("val8", my_params[8]);
toInsert.Connection = MyConnection;
toInsert.Transaction = lTransaction;
toInsert.ExecuteNonQuery();
lTransaction.Commit();
这种方法可以重写,因此如果您愿意,您可以插入批量数据。如果您要插入批量数据,则必须限制使用一条 INSERT 语句插入的记录数。如果传输到服务器的数据量超过 MAX_ALLOWED_PACKET 值,则会产生错误。有关更多详细信息,请参见此处。
请原谅我在此处未显示适当的错误处理或其他任何内容的懒惰。我一直在试图弄清楚如何解决这个错误持续了 6 个小时,并且即将因“我不能使用命名参数,但我必须使用命名参数!”的第 22 条问题而发疯。