хранить значения из базы данных в выпадающий список - PullRequest
0 голосов
/ 27 ноября 2011

Я пытаюсь написать программу с использованием SQL и OleDB, и я получаю сообщение об ошибке во время работы программы. программа сначала считает количество строк в таблице (таблица доступа, которая называется 'tblCodons') и сохранить число как целое число в j.

затем программа сохраняет все строки (из определенного столбца, который называется 'codonsFullName') в comboBox1. код ниже Я получаю эту ОШИБКУ: System.Data.OleDb.OleDbException (0x80040E14): недопустимый оператор SQL; обязательные значения «DELETE», «INSERT», «PROCEDURE», «SELECT» или «UPDATE

код:

int j=0;
OleDbConnection conn1 = new OleDbConnection(connectionString);
conn1.Open();
string sqlCount= "SET @j= SELECT COUNT(tblCodons.codonsFullName) FROM tblCodons";
OleDbCommand counter = new OleDbCommand(sqlCount, conn1);
counter.ExecuteNonQuery();
conn1.Close();

OleDbConnection conn2 = new OleDbConnection(connectionString);
conn2.Open();
string sqlFill = "SELECT tblCodons.codonsFullName FROM tblCodons";
OleDbCommand fill = new OleDbCommand(sqlFill, conn2);
fill.ExecuteNonQuery();
OleDbDataReader dataReader = fill.ExecuteReader();
dataReader.Read();
for (int i = 0; i < j; i++)
{
    comboBox1.Items.Add(dataReader.GetString(i));
}

Ответы [ 3 ]

5 голосов
/ 27 ноября 2011

Кажется, вам нужен счетчик только для цикла. Также я не понимаю, почему вы выполняете fill.ExecuteNonQuery () перед выполнением в качестве читателя.

Кроме того, установка @j (если это сработало) в запросе sql не имеет смысла для локальной переменной j в коде, который вы пытаетесь установить.

Вам нужен только следующий код (извинения за любые синтаксические ошибки)

OleDbConnection conn2 = new OleDbConnection(connectionString);
conn2.Open();
string sqlFill = "SELECT tblCodons.codonsFullName FROM tblCodons";
OleDbCommand fill = new OleDbCommand(sqlFill, conn2);

OleDbDataReader dataReader = fill.ExecuteReader();

int j = 0;

if (dataReader.HasRows)
{
   while(dataReader.Read())
   {
       comboBox1.Items.Add(dataReader.GetString(0));
       j++;
   }
}

Надеюсь, что поможет

1 голос
/ 27 ноября 2011

Оставив здесь этот ответ в качестве объяснения для исправления вашего кода в том виде, в котором он существует в настоящее время, но также хочу отметить, что я рекомендую использовать решение Камала;он запрашивает базу данных только один раз.

Эта строка, вероятно, является вашей ошибкой:

string sqlCount= "SET @j= SELECT COUNT(tblCodons.codonsFullName) FROM tblCodons";

изменить на

string sqlCount= "SELECT COUNT(tblCodons.codonsFullName) FROM tblCodons";

Вы хотите изменить свой код, чтобы получитьрезультат первого запроса, подобный следующему:

j = counter.ExecuteScalar();
0 голосов
/ 27 ноября 2011

Во-первых, как упомянул Камаль, вы не можете напрямую установить переменную из SQL-запроса, поскольку вы пытаетесь это сделать, а в качестве исключительной ситуации можно использовать только команды «SELECT», «INSERT», «UPDATE» и «DELETE».используйте в запросе.

Во-вторых, я не знаю, почему вам нужно получить количество записей перед получением фактических данных, но если это действительно необходимо, вы можете написать свой запрос следующим образом:

var query="SELECT COUNT(tblCodons.codonsFullName) FROM tblCodons;SELECT tblCodons.codonsFullName FROM tblCodons;";

Затем вы можете выполнить оба запроса, используя один DataReader.Когда вы выполняете DataReader.ExequteQuery (), он будет содержать два результата: первый имеет доступ к счетчику, а второй - к фактическим данным. Вот пример

...