Дифференцирование между двумя именами столбцов SQL с тем же именем в С# SqlConnection - программирование

Дифференцирование между двумя именами столбцов SQL с тем же именем в С# SqlConnection

Я присоединился к тем же двум таблицам дважды, используя разные псевдонимы в SQL-запросе, чтобы я мог выбрать 2 (потенциально, но не всегда) разные идентификаторы адресов, которые затем соединяются с таблицей адресов.

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 С#, я не знаю, как указать, какой из двух адресов для Response.Write. Помещение псевдонима перед именем столбца (как в 4-м строчном значении ниже) не работает и вызывает ошибку. Есть ли способ дифференцировать два адреса в С#, несмотря на то, что оба они имеют одинаковое имя столбца в базе данных?

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

Благодарим вас заблаговременно

4b9b3361

Ответ 1

Вы должны использовать псевдоним в своем 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 " + ...

Ответ 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 

И затем в С# вы можете получить к ним доступ очень легко:

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

Надеюсь, это поможет решить вашу проблему:)

Ответ 3

вы можете получить доступ к столбцам с помощью индекса, если вы не можете изменить запрос.

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

Или вы можете изменить запрос, используя ключевое слово AS в своем заявлении sql.

SELECT foo AS bar FROM Baz

Ответ 4

В дополнение к предоставлению псевдонима столбца с именем bluefeet, другим способом будет доступ к значениям по индексу, а не по имени в С#.

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

Это, однако, требует, чтобы порядок столбцов никогда не менялся и, следовательно, должен использоваться осторожно. Кроме того, это работает только в том случае, если вы специально выбираете столбцы по имени в указанном порядке в своем SQL-заявлении.

Это может не работать для SELECT *, так как порядок возвращаемых столбцов не фиксирован в SELECT *.