我正在使用 Microsoft.Data.Sqlite 2.1.0 在 .NETStandard 2.0 和 .NET Core 2.1.0 上与本地 SQLite 数据库交互。在异常中提到了 SQLitePCL,它也是一个依赖项。
我想要将参数的值设置为 NULL
,但当我这样做时,会出现“必须设置参数值”的异常。
SqliteCommand cd = cn.CreateCommand();
cd.CommandText = sql;
cd.Parameters.AddWithValue("@param1", null); //This fails
cd.Parameters.AddWithValue("@param2", DBNull.Value); //This also fails
cd.Parameters.AddWithValue("@param3", ""); //This insert an empty string, not a NULL
cd.ExecuteNonQuery(); //The exception is thrown on this line
完整异常:
{System.InvalidOperationException: Value must be set.
at Microsoft.Data.Sqlite.SqliteParameter.Bind (SQLitePCL.sqlite3_stmt stmt) [0x0004c] in <56cfa09aae23467e945f1a64a1f893bb>:0
at (wrapper remoting-invoke-with-check) Microsoft.Data.Sqlite.SqliteParameter.Bind(SQLitePCL.sqlite3_stmt)
at Microsoft.Data.Sqlite.SqliteParameterCollection.Bind (SQLitePCL.sqlite3_stmt stmt) [0x00017] in <56cfa09aae23467e945f1a64a1f893bb>:0
at (wrapper remoting-invoke-with-check) Microsoft.Data.Sqlite.SqliteParameterCollection.Bind(SQLitePCL.sqlite3_stmt)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader (System.Data.CommandBehavior behavior) [0x0025d] in <56cfa09aae23467e945f1a64a1f893bb>:0
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader () [0x00000] in <56cfa09aae23467e945f1a64a1f893bb>:0
at MyApp.DbHelper.BuildDataSet (Microsoft.Data.Sqlite.SqliteCommand cd) [0x00019] in C:\...\MyApp\DbHelper.cs:55 }
根据官方文档,该值“可以为 null”。我尝试创建一个新的SqliteParameter并在那里将值设置为空,想着可能是AddWithValue()出了问题,但结果还是一样。
如何将SqliteParameter的值设置为
NULL
?
null
而不是DBNull.Value
吗?不确定,但可能会起作用。 - sawbeanrazAdd
而不是AddWithValue
,特别是在SqlIte中,这样您就可以控制它所感知的数据类型。 - Ňɏssa Pøngjǣrdenlarpnull
,请看我的问题。@Plutonix,null
和DBNull.Value
都会产生我上面列出的相同错误。我刚刚尝试了使用显式数据类型的Add()
并得到了相同的结果。目标字段是可空的,但无论如何SQL语句都不会执行,问题在参数绑定上。 - EricAdd()
方法时我仍然会收到相同的错误提示。 - Eric