2

何時間もデバッグした後でも明らかに解決策が見つからないという問題があります。

いくつかの値で行を更新したい単純な SQL コマンドがあります (値は約 5 mb のテキストです)。SQL コマンドを実行した後、C# コード側の 'ExecuteNonQuery()' は '1' を返します。例外はありませんが、変更がデータベース行に反映される場合と反映されない場合があります。

古い値を置き換える値が正しいかどうかを確認するためにデバッグを試みました。MySQL 5.5.11 を使用しています。

  • それはMySQLの設定か何かでしょうか?

この問題について頭がおかしくなりました。何か考えがあれば、よろしくお願いします。

編集、コードを含める:

コードは次のように単純です。

cmd.CommandText = "UPDATE user SET data = @data WHERE id = @id";

次に、SQL クエリの DBCommand オブジェクトに params を追加します。「データ」のサイズは約 5 MB です。

このコマンドは、変更がデータベースに反映されていない場合でも、常に「1」を返します (機能する場合と機能しない場合があります)。

cmd.ExecuteNonQuery();

前もって感謝します!

4

3 に答える 3

1

mysql プロバイダーが自動コミットを使用しているかどうかわかりません。そうでない場合は、接続オブジェクトの BeginTransaction で取得できる Transaction オブジェクトで commit を呼び出す必要があります。

于 2012-06-10T21:43:14.513 に答える
0

この問題があり、自動コミットに関連していました。

問題: アプリの有効期間の早い段階で、自動コミットがアプリ内の別のプロセスによって 0 に設定され、失敗しました。自動コミットがオフになっている接続は、接続プールによって再利用されます。

これにより、予測できないときにこの種のエラーが発生します。

于 2015-09-21T00:14:33.637 に答える
0

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

Microsoft .NET Framework Data Provider for SQL Server は、 のコマンドによって呼び出される SQL ステートメントまたはストアド プロシージャにパラメータを渡すための疑問符 (?) プレースホルダをサポートしていませんCommandType.Text。この場合、名前付きパラメーターを使用する必要があります。

例えば:

SELECT * FROM Customers WHERE CustomerID = @CustomerID 

編集: これがMySQLであることに気付きました.すぐに類似したものを見つけることはできませんが、とにかく名前付きパラメータを使用することをお勧めします.

于 2012-06-10T18:45:30.617 に答える