C# 区分C SqlConnection中具有相同名称的两个SQL列名

C# 区分C SqlConnection中具有相同名称的两个SQL列名,c#,asp.net,sql-server,C#,Asp.net,Sql Server,我在一个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_ad

我在一个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的两个地址中的哪一个。将别名放在列名前面(如下面的第四个字符串值中所示)不起作用,会导致错误。尽管在数据库中这两个地址具有相同的列名,但有没有办法区分它们

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.....

提前非常感谢您

您应该在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 " + ...

如果无法修改查询,则可以通过索引访问列

var foo = MyDataReader[0].ToString();
也可以在sql语句中使用AS关键字修改查询

SELECT foo AS bar FROM Baz

除了像BlueFoots建议的那样提供列名别名外,另一种方法是通过索引而不是在C中通过名称访问值

string theValue = myReader[0] as string ?? String.Empty;
然而,这要求列的顺序永远不要改变,因此要小心使用。此外,这只适用于在SQL语句中按给定顺序按名称专门选择列的情况

这可能不适用于SELECT*,因为返回列的顺序在SELECT*

中不是固定的。您应该使用别名来区分具有相同名称的两列,如:

然后在C中,您可以非常轻松地访问它们:


我希望这有助于解决您的问题:

非常好,谢谢。尤其是对于非常快速的回复。工作很愉快,我可以在其他可能需要多次出现的专栏上使用相同的原则。@DanSolo-使用有意义的别名应该有助于让生活更轻松。例如,如果第一个连接是定位上诉法院IANAL。然后使用courtofapeals或CoA而不是CA2作为别名。我通常使用列别名中的点来分隔表别名和列名,例如CoA.Court_name。删除下一票,因为如果情况允许,您的答案是可行的解决方案。
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 
 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();