OleDbDataReader внутри OleDbDataReader

#c# #sql #oledbcommand #oledbdatareader

#c# #sql #oledbcommand #oledbdatareader

Вопрос:

У меня есть 2 таблицы. Я хочу получить все идентификаторы из Table1, и пока я нахожусь внутри первой OleDbCommand, я хочу проверить, есть ли идентификатор и в Table2. Я пробовал это:

 using (OleDbCommand cmd = new OleDbCommand("SELECT ID FROM Table1 WHERE NAME=:NAME)
{
 ............
   decimal dId = (decimal)odr["ID"];
   using (OleDbCommand cmdE = new OleDbCommand("SELECT LOGID FROM Table2 WHERE ID:=ID", con))
   cmdE.CommandType = CommandType.Text;
   cmdE.Parameters.Add(new OleDbParameter("ID", dId));
   decimal cId=-1;
   using (OleDbDataReader odrE = cmdE.ExecuteReader())
   {
    while (odrE.Read())
    {
     cId = (decimal)odrE["ID"];
    }...............
  

Проблема в том, что

  cId = (decimal)odrE["ID"]; 
  

никогда не выполняется, хотя, если я выполняю manaul Select внутри Sql Developer, я получаю результаты. Что я делаю не так?

Комментарии:

1. пожалуйста, сделайте код ПОНЯТНЫМ для понимания

2. Вы получаете какую-либо ошибку? и, пожалуйста, будьте более понятны.

3. Вы отлаживали свой код построчно?

4. Нет, я не получаю никакого сообщения об ошибке. odrE.Read() не содержит никакого значения.

Ответ №1:

Это неправильный синтаксис для параметров в OLEDB. Попробуйте

 using (OleDbCommand cmdE = new OleDbCommand("SELECT LOGID FROM Table2 WHERE ID=@ID", con))
  

Ответ №2:

Я думаю, проблема заключается в использовании OleDbCommand внутри OleDbCommand. Использование ВНЕШНЕГО соединения решило проблему. Спасибо