我已经为我的 C# 程序编写了一个 SQL 查询,但是当我尝试运行该查询时,我得到了这个错误
System.IndexOutOfRangeException:
while (DRorder.Read())
我试图更改查询顺序以查看是否只有那一个这样做,并且我注意到当我有代码尝试转换这 3 列中的至少 2 列(ADRES
, LEV
, TAAL
)时,它只会给我这个错误。
// the code that gives the error
SqlCommand getlist = new SqlCommand("select * from BESW where BEST = @best", Connectie.connMEVO);
getlist.Parameters.Add("@best", SqlDbType.VarChar).Value = data.corrigeerbestnr;
DRorder = getlist.ExecuteReader();
while (DRorder.Read())
{
dateTimePicker1.Value = Convert.ToDateTime(DRorder["BESTEL"]);
dateTimePicker2.Value = Convert.ToDateTime(DRorder["PLAN"]);
comboBox2.Text = DRorder["ADRES"].ToString();
comboBox1.Text = DRorder["LEV"].ToString();
textBox8.Text = DRorder["TAAL"].ToString();
}
但是,当我将查询拆分为 3 个几乎相同的查询,其中 3 列中的每一列都可能出现错误时,它突然可以正常工作,没有任何问题。
// this is the code that im currently using without error
SqlCommand getlist = new SqlCommand("select BESTEL, [PLAN], ADRES from BESW where BEST = @best", Connectie.connMEVO);
getlist.Parameters.Add("@best", SqlDbType.VarChar).Value = data.corrigeerbestnr;
DRorder = getlist.ExecuteReader();
while (DRorder.Read())
{
dateTimePicker1.Value = Convert.ToDateTime(DRorder["BESTEL"]);
dateTimePicker2.Value = Convert.ToDateTime(DRorder["PLAN"]);
comboBox2.Text = DRorder["ADRES"].ToString();
}
SqlCommand getlist2 = new SqlCommand("select LEV from BESW where BEST = @best", Connectie.connMEVO);
getlist2.Parameters.Add("@best", SqlDbType.VarChar).Value = data.corrigeerbestnr;
DRorder = getlist2.ExecuteReader();
while (DRorder.Read())
{
comboBox1.Text = DRorder["LEV"].ToString();
}
SqlCommand getlist3 = new SqlCommand("select TAAL from BESW where BEST = @best", Connectie.connMEVO);
getlist3.Parameters.Add("@best", SqlDbType.VarChar).Value = data.corrigeerbestnr;
DRorder = getlist3.ExecuteReader();
while (DRorder.Read())
{
textBox8.Text = DRorder["TAAL"].ToString();
}
我不知道它为什么这样做,因为我的程序中的所有其他查询都有效,我什至有读取整个表的查询,并且这些查询不会给while
循环中的这些字段带来任何问题。
现在我的问题是,为什么这些代码块中的一个工作,而另一个给出错误?也许如果有人知道这个问题的解决方案,我想听听它,因为我觉得最好将它全部放入 1 个查询中。
我知道我忘记将Dispose
查询放在这些代码块中。
有关该问题的其他信息:当我运行单个查询代码时,给出错误的列是,LEV
但是如果我更改列的顺序,则问题将由这 3 个(、、、)中列出的第二ADRES
列LEV
给出TAAL
。
编辑:“新”代码(数据库有 28 列)
// the code that gives the error
SqlCommand getlist = new SqlCommand("select * from BESW where BEST = @best", Connectie.connMEVO);
getlist.Parameters.Add("@best", SqlDbType.VarChar).Value = data.corrigeerbestnr;
DRorder = getlist.ExecuteReader();
while (DRorder.Read())
{
if (!DRorder.IsDBNull(10)) { dateTimePicker1.Value = Convert.ToDateTime(DRorder[10]); }
if (!DRorder.IsDBNull(11)) { dateTimePicker2.Value = Convert.ToDateTime(DRorder[11]); }
if (!DRorder.IsDBNull(7)) { comboBox1.Text = DRorder[7].ToString(); }
if (!DRorder.IsDBNull(8)) { comboBox2.Text = DRorder[8].ToString(); }
if (!DRorder.IsDBNull(25)) { textBox8.Text = DRorder[25].ToString(); }
}