我有2个不同的数据库,我需要将他们的查询结果分成1个结构:
struct my_order
{
public int Id_N
public int OrderId;
public string Discount;
public string CustomerId;
public string ShipAddress;
}
我的疑问:
my_order ret = new my_order();
SqlConnection con = open_sql(firstDB);
string firstQuery= @" SELECT OrderId, Discount FROM Orders
WHERE Id = " + id_n.ToString(); //some ID that I got earlier
SqlCommand command = new SqlCommand(firstQuery, con);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
ret.Id_N = id_n;
ret.OrderId = reader["OrderId"].ToString();
ret.Discount = reader["Discount"].ToString();
}
SqlConnection second_con = open_sql(secondDB);
string secondQuery= @" SELECT CustomerId, ShipAdress FROM Details
WHERE Id = " + id_n.ToString();
//id_n - some ID that I got earlier(the same as in the first query)
SqlCommand secondCommand = new SqlCommand(secondQuery, second_con);
SqlDataReader secondReader = secondCommand.ExecuteReader();
while (secondReader.Read())
{
ret.Id_N = id_n;
ret.CustomerId = secondReader["CustomerId"].ToString();
ret.ShipAddress = secondReader["ShipAddress"].ToString();
}
问题是编译器从firstQuery
获得结果而不是secondQuery
。它没有进入while(secondReader.Read())
。
如何纠正?
PS:我更改了代码和查询,因为我太大了,但问题是一样的。
此致 亚历山大。
答案 0 :(得分:1)
在这里拍摄蓝色没有错误或更详细地说明出现了什么问题,但是你的代码中有一个拼写错误:
string secondQuery= @" SELECT CustomerId, ShipAdress FROM Details WHERE Id = " + id_n.ToString();
ret.ShipAddress= secondReader["ShipAddress"].ToString();
您正在编写一个带有一个和两个用户的ShipAdress。
选择正确的版本
答案 1 :(得分:0)
它没有进入while (secondReader.Read()) { ... }
的原因是因为第二个查询没有返回任何行,因为表Details中没有具有指定Id值的行。
答案 2 :(得分:0)
您可以使用propriete HasRows和IsDBNull(columnIndex)方法来检查它是否包含数据
if (secondReader.HasRows)
// Get data
else
//there is no data