我在SQL查询中使用不同的别名两次加入相同的2个表,以便我可以选择2个(可能但不总是)不同的地址ID,然后链接到地址表。
SELECT C.court_id, C.court_name, CA.court_address, CA2.court_address...
FROM court C " +
JOIN court_addr CA ON C.court_addr_id = CA.court_addr_id " +
JOIN court_addr CA2 ON C.court_postal_addr_id = CA2.court_addr_id " + ...
现在尝试使用ASP.NET C#输出此查询的结果时,我不确定如何指定Response.Write中的两个地址中的哪一个。将别名放在列名称前面(如下面的第4个字符串值)不起作用并引发错误。有没有办法区分C#中的两个地址,尽管它们在数据库中都有相同的列名?
while (myDataReader.Read())
{
string court_id = myDataReader["court_id"].ToString();
string court_name = myDataReader["court_name"].ToString();
string court_address = myDataReader["court_address"].ToString();
string court_postal_address = myDataReader["CA2.court_address"].ToString();
etc.....
提前感谢你
答案 0 :(得分:32)
您应该在sql中使用别名来区分它们,然后您将能够返回正确的值:
SELECT C.court_id,
C.court_name,
CA.court_address as CACourtAddress,
CA2.court_address as CA2CourtAddress
FROM court C " +
JOIN court_addr CA ON C.court_addr_id = CA.court_addr_id " +
JOIN court_addr CA2 ON C.court_postal_addr_id = CA2.court_addr_id " + ...
答案 1 :(得分:3)
您应该使用别名来区分具有相同名称的两列,例如:
SELECT C.court_id, C.court_name, CA.court_address CourtAddress, CA2.court_address CourtPostalAddress FROM court C
JOIN court_addr CA ON C.court_addr_id = CA.court_addr_id
JOIN court_addr CA2 ON C.court_postal_addr_id = CA2.court_addr_id
然后在C#中,您可以非常轻松地访问它们:
string court_id = myDataReader["court_id"].ToString();
string court_name = myDataReader["court_name"].ToString();
string court_address = myDataReader["CourtAddress"].ToString();
string court_postal_address = myDataReader["CourtPostalAddress"].ToString();
我希望这有助于解决您的问题:)
答案 2 :(得分:2)
如果无法修改查询,则可以通过索引访问列。
var foo = MyDataReader[0].ToString();
或者您可以使用sql语句中的AS
关键字修改查询。
SELECT foo AS bar FROM Baz
答案 3 :(得分:0)
除了提供bluefeet建议的列名别名外,另一种方法是通过索引而不是C#中的名称访问值。
string theValue = myReader[0] as string ?? String.Empty;
然而,这要求列的顺序永远不会改变,因此要小心使用。此外,这仅适用于在SQL语句中按给定顺序按名称专门选择列的情况。
这可能不适用于SELECT *
,因为返回列的顺序未在SELECT *
中修复。