#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. Использование ВНЕШНЕГО соединения решило проблему. Спасибо