Дифференцирование между двумя именами столбцов 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.....
Благодарим вас заблаговременно
Ответы
Ответ 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 *
.