1

私はC#でWindowsサービスを開発していますが、ファイルが特定のディレクトリにドロップされると、データベースに数回アクセスします。さらに、データベースにもアクセスする5分ごとに実行されるservice_timerがあります。問題は、サービスがファイルを処理しているときにservice_timerが呼び出されると、InvalidOperationErrorが発生することです(すでに開いているデータリーダーがあります)。

この問題を回避できるように(Microsoft SQL Server Expressで)データベースへの新しい接続を作成する方法はありますか、それとも別の一般的な解決策がありますか?

ありがとう。

例外がスローされる関数のコードは次のとおりです。

            DateTime start = DateTime.Now;

            string SqlQuery = "SELECT COUNT (*) AS recCount FROM " + tableName + " " + whereclause;

            Debug.WriteLine(thisMethod + " SqlQuery: " + SqlQuery);
            myCommand = new SqlCommand(SqlQuery, this.SDB); //Execute Sql Statement

            myCommand.ExecuteNonQuery();

            // Create New Adapter

            adapter = new SqlDataAdapter(myCommand);


            adapter.SelectCommand = myCommand;

            DataSet ds = new DataSet();

            // Populate Adapter

            adapter.Fill(ds);

            foreach (DataTable dt in ds.Tables)
                foreach (DataRow dr in dt.Rows)
                {
                    recCount = Convert.ToInt32(dr["recCount"]);
                }
4

1 に答える 1

2

問題はここにあります

myCommand = new SqlCommand(SqlQuery, this.SDB);

グローバルを使用する代わりに、メソッド内に新しいSQLConnectionを作成する必要があります。

SqlConnection newConn = new SqlConnection(connectionString);
newConn.Open();
myCommand = new SqlCommand(SqlQuery, newConn);
//Rest of logic
newConn.Close();
于 2012-06-08T20:48:01.883 に答える