【问题标题】:Create webservice to get SQL data创建 Web 服务以获取 SQL 数据
【发布时间】:2013-11-08 14:31:16
【问题描述】:

我创建了一个 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()

这个查询有效,但是当我创建我的网络服务和数据助手时,我收到错误,我的输入字符串不正确并且我的值是一个字符串而不是一个 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 中测试了查询,它工作正常,所以不确定我在尝试检索这些值时做错了什么。任何帮助表示赞赏。

谢谢

【问题讨论】:

  • 你从哪里得到这个异常?将 db 值转换为 int 时?还是其他地方?
  • 您的示例查询查询PRODUCT2,但在您的代码中您查询的是PRODUCT1。它们的数据类型不同吗?
  • 在上面的代码中,您没有告诉SqlCommand 它应该使用哪个SqlConnection。这将导致出现“连接属性尚未初始化”消息的异常。如果您的异常来自GetRed,我怀疑它来自您在上面发布的版本。如果上面的你正在执行的,我认为错误不是来自GetRed。你能发布一个堆栈跟踪吗?
  • @AlexHumphrey,我附上了我的堆栈跟踪。

标签: c# .net sql sql-server web-services


【解决方案1】:

浪费了很多时间,你的堆栈跟踪,我知道问题:你没有给你的命令一个连接。

你需要这个:

cmd.Connection = con;

之前

SqlDataReader dr = cmd.ExecuteReader();

【讨论】:

  • 我更改了解析 PRODUCT1 的行,但仍然出现相同的错误。真的很困惑为什么我会出错。不太确定我需要输入什么值来测试操作。如果我输入 PRODUCT1 我会收到错误,所以也许我错了。
  • @CSharpDev4Evr 我已经编辑了我的答案,这是你的问题。
猜你喜欢
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2018-04-24
  • 2017-04-11
  • 1970-01-01
相关资源
最近更新 更多