14

SQLクエリで異なるエイリアスを使用して同じ2つのテーブルを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#を使用してこのクエリの結果を出力しようとすると、2つのアドレスのどちらをResponse.Writeに指定するかがわかりません。列名の前にエイリアスを配置すると(以下の4番目の文字列値のように)、機能せず、エラーが発生します。データベース内で両方が同じ列名を持っているにもかかわらず、C#の2つのアドレスを区別する方法はありますか?

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

次のような同じ名前の2つの列を区別するには、エイリアス名を使用する必要があります。

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();

ASまたは、SQLステートメントのキーワードを使用してクエリを変更することもできます。

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

bluefeetが示唆するように列名のエイリアスを提供することに加えて、別の方法は、C#の名前ではなく、インデックスによって値にアクセスすることです。

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

ただし、これには列の順序が変更されないようにする必要があるため、慎重に使用する必要があります。また、これは、SQLステートメントで指定された順序で名前で列を具体的に選択した場合にのみ機能します。

SELECT *返される列の順序が。で固定されていないため、これは。では機能しない可能性がありますSELECT *

于 2013-01-02T16:18:27.783 に答える