SQLite .NET 插入 ExecuteNonQuery 返回 1

Posted

技术标签:

【中文标题】SQLite .NET 插入 ExecuteNonQuery 返回 1【英文标题】:SQLite .NET Insert ExecuteNonQuery Returns 1 【发布时间】:2013-02-07 09:24:46 【问题描述】:

SQL:

CREATE TABLE main.LogRecord (
Id INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL ,
TimeStamp DATETIME NOT NULL ,
Type TEXT NOT NULL ,
Severity TEXT NOT NULL ,
Message TEXT NOT NULL ,
Origin TEXT NOT NULL)

INSERT INTO LogRecord
(TimeStamp, Type, Severity, Message, Origins) VALUES
(@timestamp, @type, @severity, @message, @origin)

C# 伪代码:

SQLiteCommand command = new SQLiteCommand(INSERT_COMMAND_TEXT);
command.Parameters.AddWithValue("@paramName", object.value);
command.Connect = connectVar;
command.ExecuteNonQuery();

ExecuteNonQuery() 运行时,返回值1,根据 SqliteOrg 表示:

SQL 错误或缺少数据库

除了,没有抛出异常并且数据插入正确。

有没有办法使用System.Data.SQLite 获得LAST_ERROR_MESSAGE?我只遇到过获取非 .net API 的最后一条错误消息的方法。

当我错误地插入到不存在的列时,会返回相同的错误代码 (1),但这次会抛出最后一条错误消息的异常。

那么如果插入工作正常,为什么会返回 1?非常感谢任何帮助。

编辑:我也尝试不发送TimeStamp DateTime,以防这是日期格式问题,但会发生同样的情况。

编辑:原来 1 是受影响的行数,全部在文档http://msdn.microsoft.com/en-us/library/system.data.idbcommand.executenonquery%28v=vs.80%29.aspx

【问题讨论】:

你从哪里得到返回值?你总是可以try catch 例外。 我没有逐字复制我的工作代码 - 但概念是相同的。 【参考方案1】:

重读您的文档。我相信 ExecuteNonQuery 返回受影响的行数或 -1 错误。

【讨论】:

我疲惫的眼睛错过了,非常感谢您的帮助。 存储过程总是返回 -1 - 即使成功。 对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为 -1。【参考方案2】:

你确定返回值吗?

http://msdn.microsoft.com/en-us/library/system.data.idbcommand.executenonquery.aspx

对于 UPDATE、INSERT 和 DELETE 语句,返回值是受命令影响的行数。对于所有其他类型的语句,返回值为 -1。

【讨论】:

我认为它在说“是的,我插入了 '1' 个新行。恭喜!” 我疲惫的眼睛错过了,非常感谢您的帮助。 别忘了将其中一个标记为答案,这样就不会继续回答了。 我已经“去过那里”了!我在 StackOF 上大约 1/4 的问题是“累”的问题............ 好的。但那 60 秒是我给你的参考网址! (不用担心)

以上是关于SQLite .NET 插入 ExecuteNonQuery 返回 1的主要内容,如果未能解决你的问题,请参考以下文章

sql server 中executenon quary用法

使用 ADO.NET Entity Framework 将记录插入 Sqlite DB?

提升SQLite数据插入效率低速度慢的方法

Sqlite3插入大量数据性能优化

SQLite-Net 扩展 - GetAllWithChildrenAsync 没有拉动一切

Sqlite3常用的插入方法及性能测试