SQLite .NET Insert ExecuteNonQuery返回1

时间:2013-02-21 21:36:41

标签: c# .net sql sqlite system.data.sqlite

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#Pseudo-ish代码:

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

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

  

SQL错误或缺少数据库

除外,不会抛出任何异常并且数据插入正确。

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

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

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

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

编辑:结果显示1是受影响的行数#在文档中http://msdn.microsoft.com/en-us/library/system.data.idbcommand.executenonquery%28v=vs.80%29.aspx

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:6)

您确定返回值吗?

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

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