0

我创建了一个 Web 服务器来从我的 sql 数据库中检索数据。对于这种情况,我想从我的表中检索所有“红色”,其中有红色、绿色和黄色。

这是我的 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 服务和 datahelper 时,我得到了我的输入字符串不正确并且我的值是一个字符串而不是一个 int 的错误(它应该是)

这是我的网络服务代码:

 [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 回答