【发布时间】: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