0

MSSQL データ アクセス マネージャーでこのコードに問題があります。返されたレコードが予期したものではない場合があります。DataReader 列は適切なテーブルから取得されますが、フィールドは別の要求から取得されたようです。
この動作は、同じテーブルで多くの同時リクエストを取得したときに発生し、結果は「select A rerun B, select B return D, select C rerun Z,...」のようなものではありません。

 public bool Read(string ID)
    {

        bool _return = false;

        System.Data.SqlClient.SqlConnection Connection = new System.Data.SqlClient.SqlConnection(ConnectionString);

        try
        {

            string Query = "Select * From Sounds Where ID = '" + ID + "'";

            System.Data.SqlClient.SqlDataReader DataReader;


            using (System.Data.SqlClient.SqlCommand Command = new SqlCommand())
            {
                Command.Connection = Connection;
                Command.CommandText = Query;

                Connection.Open();

                DataReader = Command.ExecuteReader();
            }
            if (DataReader.Read())
            {
                FillClass(DataReader);
                _return = true;
            }
            else
            {
                _return = false;
            }

            if (! DataReader.IsClosed)  DataReader.Close();

        }
        catch (Exception e)
        {
            _return = false;
        }
        finally
        {
            if ((Connection != null) && (Connection.State == ConnectionState.Open)) {
                Connection.Close();
            }
        }


        return _return;
    }


SQL 2012が悪いレコードを返すか、.Net CLRがSQLパイプと一致しないかを理解していません...

助けてくれてありがとう。-アレックス

4

2 に答える 2

0

アプリケーションのこの部分には静的なものはありません。この読み取りメソッドは、データベースからオブジェクトをロードする基本クラスの一部です。

あなたのコードをアプリケーションに実装し、サーバーに配置します。問題はまだ残っています...

データベースへの読み取りを呼び出すコードの一部を次に示します。

public class program
{
    public static Toolbox toolbox = new Toolbox();

    public void main()
    {
        // ....

        var Duration = toolbox.GetFileDuration(File);

        // ...
    }

    //...
}


public class Toolbox
{
    //....

     public long GetFileDuration (string FileName){

         Repository.dbSound Sound = new Repository.dbSound(ConnectionString);
         if (Sound.Read(FileName))
         {
             return Sound.Duration;
         }
         else
         {
             return -1;
         }

    }

    //....

}

一方、メソッドにログを追加して、送信された ID と返された ID をデータリーダーに取得すると、ログファイルに次のように表示されます。

07920-04.mp3 --> Datareader.Read()が失敗しまし
た 07747-12.mp3 --> 07920-04.mp3

両方のファイルがテーブルに存在します!!!

助けてくれてありがとう。

于 2013-06-25T09:02:03.403 に答える