将数据库中的值存储到组合框中

时间:2011-11-27 08:22:00

标签: c# sql combobox oledb

我正在尝试使用SQL和OleDB编写程序,并且在程序运行时出现错误。 程序首先计算表中的行数(访问表称为'tblCodons') 并将数字存储为j中的整数。

然后程序将所有行(来自名为'codonsFullName'的特定列)存储在comboBox1中。 代码如下 我得到这个错误: System.Data.OleDb.OleDbException(0x80040E14):无效的SQL语句;必需的值'DELETE','INSERT','PROCEDURE','SELECT'或'UPDATE < / p>

代码:

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 个答案:

答案 0 :(得分:5)

您似乎只需要循环计数。另外我不明白为什么你在执行之前执行fill.ExecuteNonQuery()作为读者。

在sql查询中设置@j(如果它确实有效)在您尝试设置的代码中没有范围到本地变量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 :(得分:1)

在此留下这个答案作为修复目前存在的代码的解释,但也想指出我建议采用Kamal的解决方案;它只查询数据库一次。

这一行可能是你的错误:

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

更改为

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

您想要更改代码以获取第一个查询的结果,如下所示:

j = counter.ExecuteScalar();

答案 2 :(得分:0)

首先,正如Kamal所提到的,你不能像你想要的那样直接从sql查询设置一个变量,并且作为异常状态只有“SELECT”,“INSERT”,“UPDATE”和“DELETE”命令可以是在查询中使用。

其次,我不知道为什么在获取实际数据之前需要获取记录计数,但如果确实有必要,可以像这样编写查询:

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

然后,您可以使用单个DataReader执行两个查询。当您执行DataReader.ExequteQuery()时,它将包含两个结果。第一个可以访问计数,第二个可以访问实际数据。 Here是一个例子