14

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

非常感谢你提前

4

4 回答 4

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 " + ...
于 2013-01-02T16:15:14.733 回答
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();

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

于 2013-01-02T16:28:15.000 回答
2

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

var foo = MyDataReader[0].ToString();

或者您可以使用ASsql 语句中的关键字修改查询。

SELECT foo AS bar FROM Baz
于 2013-01-02T16:18:22.370 回答
0

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

string theValue = myReader[0] as string ?? String.Empty;

然而,这要求列的顺序永远不会改变,因此要小心使用。此外,这仅适用于您在 SQL 语句中按给定顺序按名称专门选择列。

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

于 2013-01-02T16:18:27.783 回答