0

SQL データベースからデータを取得するための Web サーバーを作成しました。この場合、赤、緑、黄色があるテーブルからすべての「赤」を取得したいと考えました。

これが私の PRODUCTS テーブルの例です。

ここに画像の説明を入力

したがって、このテーブルから、PRODUCT2 からすべての REDS を取得するためのクエリを作成できます。SQL クエリは次のようになります。

SELECT PRODUCT2 from PRODUCTS where Type = 'Stop';

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

System.InvalidOperationException: ExecuteReader: Connection property has not been initialized.
   at System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async)
   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.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
   at System.Data.SqlClient.SqlCommand.ExecuteReader()

このクエリは機能しますが、Web サービスとデータヘルパーを作成すると、入力文字列が正しくなく、値が int ではなく文字列であるというエラーが表示されます (そうあるべきです)。

これが私のWebサービスコードです:

 [WebMethod]
   public int GetRed(int Type)
   {
      return DataHelper.GetRed(Type);
   }

データヘルパー コード:

public static int GetRed(int Type)
{
   int PRODUCT1 = 0;
   var con = new SqlConnection(@"Data Source=TestComp\SQLEXPRESS; initial catalog=Database; integrated security=true;");

var cmd = new SqlCommand("Select PRODUCT1 from PRODUCTS where Type = 'Stop'");

con.Open();

SqlDataReader dr = cmd.ExecuteReader();

while(dr.Read())
{
   PRODUCT1 = (int)dr["PRODUCT1"];
}

dr.Close();
con.Close();

return PRODUCT1;

}

私は SQL Server でクエリをテストしましたが、正常に動作するため、これらの値を取得しようとしたときに何が間違っているのかわかりません。どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

0

あなたのスタックトレースで多くの時間が無駄になりました。私は問題を知っています:あなたはコマンドに接続を与えていません。

あなたはこれを必要とします:

cmd.Connection = con;

SqlDataReader dr = cmd.ExecuteReader();
于 2013-11-08T14:34:35.407 に答える