0

NullReferenceException がスローされるという問題が発生しています。コードは次のとおりです。

using (SqlConnection connection = new SqlConnection(@"server=localhost\SQL2005;database=UintaTest;Integrated Security=SSPI;Connect Timeout=240"))
using (SqlCommand command = new SqlCommand(@"SELECT * FROM tblCaseActual WHERE CaseID = @Param", connection))
{
    connection.Open();
    connection.StatisticsEnabled = true;
    SqlParameter commandParameter = new SqlParameter
    {
        ParameterName = "Param",
        SqlDbType = SqlDbType.VarChar,
        Size = 12,
        Value = "1-19"
    };
    command.Parameters.Add(commandParameter);

    command.Prepare();
    //this does not throw an exception
    command.ExecuteNonQuery();

    //This throws an exception
    command.ExecuteNonQuery();
}

2 番目の「ExecuteNonQuery」関数が呼び出されると、例外がスローされます。最初の呼び出しは正常に機能します。

このmsdn リンクを見てきましたが、役に立ちませんでした。そこにあるコード スニペットは、私がやろうとしていることと非常によく似ています。同様の問題を抱えている他の人も検索しましたが、何も見つかりませんでした。

これはすべての SQL ステートメントで発生するわけではありませんが、いくつかの異なるデータベースといくつかの異なるテーブルで再現しました。

ここにもスタックトレースがあります:

at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at SqlCommandPrepareTest.Program.Main(String[] args) in C:\Users\jadams\Documents\Visual Studio 2010\Projects\SqlCommandPrepareTest\SqlCommandPrepareTest\Program.cs:line 33
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

コメントありがとうございます。代わりにExecuteReader()呼び出しに変更することになりました。私のテストから、事前にステートメントを準備する場合は、SELECTステートメントとExecuteNonQuery()呼び出しを組み合わせて使用​​することはできないようです。

最初の呼び出しが成功し、2番目の呼び出しが失敗するという事実は、これが.NETFrameworkのバグである可能性が高いことを示しています。

于 2012-05-16T16:05:18.760 に答える