将2个查询组合成1个结构

时间:2014-11-10 08:01:38

标签: c# sql-server

我有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:我更改了代码和查询,因为我太大了,但问题是一样的。

此致 亚历山大。

3 个答案:

答案 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