5

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 エラーまたはデータベースがありません

ただし、例外はスローされず、データは正しく挿入されます。

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

4

2 に答える 2

13

ドキュメントを読み直してください。ExecuteNonQuery は影響を受けた行数を返すか、エラーの場合は-1を返すと思います。

于 2013-02-21T21:42:53.277 に答える
6

戻り値は確かですか?

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

UPDATE、INSERT、および DELETE ステートメントの場合、戻り値はコマンドの影響を受けた行数です。他のすべてのタイプのステートメントの場合、戻り値は -1 です。

于 2013-02-21T21:43:45.163 に答える