2

非常に奇妙な問題があります。SqlCommand.ExecuteNonQuery を使用して C# から特定のデータベース ストアド プロシージャを実行すると、ストアド プロシージャが実行されません。

さらに、SQL プロファイラーはコマンドをまったく登録しません。コマンド タイムアウトを受信せず、例外もスローされません。

最も奇妙なことは、このコードが 1,200,000 回以上正常に機能したことですが、データベースに挿入しようとしているこの 1 つの特定のファイルについては、永遠にハングアップするだけです。

アプリケーションを強制終了すると、データベース サーバーのイベント ログに次のエラーが表示されます"A fatal error occurued while reading the input stream from the network. The session will be terminated (input error: 64, output error: 0).。 SQL プロファイラーはそうではないと言っていますが、データベース サーバーがコマンドを受信して​​いると思われます。

適切なアクセス許可が設定されていること、およびこのコードとストアド プロシージャが他のファイルで正常に動作するため、接続文字列が正しいことを知っています。

以下は、ストアド プロシージャを呼び出すコードです。挿入しようとしているファイルが 33.5 MB であることに注意することが重要かもしれませんが、500 MB を超えるファイルを 10,000 個以上追加したため、サイズは問題ではないと思います。 :

using (SqlConnection sqlconn = new SqlConnection(ConfigurationManager.ConnectionStrings["TheDatabase"].ConnectionString))
using (SqlCommand command = sqlconn.CreateCommand())
{
    command.CommandText = "Add_File";
    command.CommandType = CommandType.StoredProcedure;
    command.CommandTimeout = 30 //should timeout in 30 seconds, but doesn't...
    command.Parameters.AddWithValue("@ID", ID).SqlDbType = SqlDbType.BigInt;
    command.Parameters.AddWithValue("@BinaryData", byteArr).SqlDbType = SqlDbType.VarBinary;
    command.Parameters.AddWithValue("@FileName", fileName).SqlDbType = SqlDbType.VarChar;
    sqlconn.Open();
    command.ExecuteNonQuery();
}

呼び出しを行っているサーバーとデータベース サーバーの間にファイアウォールはなく、この問題をトラブルシューティングするために Windows ファイアウォールが無効になっています。

4

1 に答える 1

0

これは、1つのワークステーションからのみストアドプロシージャを介してXMLをアップロードするときに一度見たことがあります

ネットワークケーブル(大きな建物では配線が異なる)を変更すると、機能しました。

奇妙に聞こえますが、どういうわけかサーバーを再マウントしたり、ケーブルを変更したり、スイッチをバイパスしたりできますか?

于 2010-04-16T18:48:03.080 に答える