while(reader.Read())表里数据为空 还是进了循环

时间:2022-12-13 14:40:30
把所有数据都删除后,再查询时  ,还是进了循环  报错了

查询:
string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";
            SqlCeDataReader read = null;
            //创建SQL数据集
            sqlcmd = new SqlCeCommand(sqlstr, DataBaseCon.acon);
            read = sqlcmd.ExecuteReader();

            //列表清空
            listView1.Items.Clear();
            //读取数据集信息
            while (read.Read())
            {
                metrology_jdjl.Add(read[0].ToString(), read[0].ToString());

                //创建子数组 subitem
                ListViewItem tmpSubitem = new ListViewItem();
                tmpSubitem.SubItems.Clear();

                //委托单号
                tmpSubitem.SubItems[0].Text = read[1].ToString();
                //仪器名称
                tmpSubitem.SubItems.Add(read[2].ToString());

                listView1.Items.Add(tmpSubitem);
            }
            //释放资源
            read.Close(); read = null; sqlcmd = null;



删除:

         SqlCeCommand sqlcmd = null;
            try
            {
                string sqlstr = "delete from [T_Sys_JDJLB] where bs in (" + bs + ")"; ;
                sqlcmd = new SqlCeCommand(sqlstr, DataBaseCon.acon);
                sqlcmd.ExecuteNonQuery();

            }catch(Exception ee)
            {
                ret = false;
            }
                 //释放资源
            sqlcmd = null;

13 个解决方案

#1


你有判断吗  while(reader.Read())表里数据为空 还是进了循环

#2


第一:

把所有数据都删除后,再查询时 ,还是进了循环 报错了

=============

数据都没有了,应该不进循环了,是不是数据缓存了?


第二:

string sqlstr = "delete from [T_Sys_JDJLB] where bs in (" + bs + ")";

但看这条sql 看不出你把全部数据都删除了。

string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";

这里又查询列表数据,是不是sql 写错了?

改成:
string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB] where bs in (" + bs + ")";

#3


缓存??

#4


加个判断~~

#5


引用 4 楼  的回复:
加个判断~~



怎样判断?

#6


如果没有数据肯定不会循环的,肯定是哪边错误,仔细调试下

#7


sqlce 数据库  删除后再查询就会报错  有木有人遇到过啊?

#8


单步调试一下,用datatable和dataadapter看看能不能取出数据来

#9


不是的你的
while里面是有装换出错

另外就是string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";的后面没有条件的

你的删除是有条件的

比如:你吧>0的删除了
然后查询的是全部数据
当然还有数据了哦

string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]"; 加上条件
然后while里面有bug

#10



string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";
  SqlCeDataReader read = null;
  //创建SQL数据集
  sqlcmd = new SqlCeCommand(sqlstr, DataBaseCon.acon);
  read = sqlcmd.ExecuteReader();

  //列表清空
  listView1.Items.Clear();
  //读取数据集信息
if(read!=null)  //这样判断!!!!
{
  while (read.Read())
  {
  metrology_jdjl.Add(read[0].ToString(), read[0].ToString());

  //创建子数组 subitem
  ListViewItem tmpSubitem = new ListViewItem();
  tmpSubitem.SubItems.Clear();

  //委托单号
  tmpSubitem.SubItems[0].Text = read[1].ToString();
  //仪器名称
  tmpSubitem.SubItems.Add(read[2].ToString());

  listView1.Items.Add(tmpSubitem);
  }
}
  //释放资源
  read.Close(); read = null; sqlcmd = null;



if(read!=null)  //这样判断!!!!

#11


引用 10 楼  的回复:
C# code

string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";
  SqlCeDataReader read = null;
  //创建SQL数据集
  sqlcmd = new SqlCeCommand(sqlstr, DataBaseCon.acon);
  read = sqlcmd.ExecuteReader();……



不是这个问题额  报的错是:Value does not fall within the expected range.

#12


问题解决了  还是谢谢各位了!

#13


是 while 里的转换出错了

#1


你有判断吗  while(reader.Read())表里数据为空 还是进了循环

#2


第一:

把所有数据都删除后,再查询时 ,还是进了循环 报错了

=============

数据都没有了,应该不进循环了,是不是数据缓存了?


第二:

string sqlstr = "delete from [T_Sys_JDJLB] where bs in (" + bs + ")";

但看这条sql 看不出你把全部数据都删除了。

string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";

这里又查询列表数据,是不是sql 写错了?

改成:
string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB] where bs in (" + bs + ")";

#3


缓存??

#4


加个判断~~

#5


引用 4 楼  的回复:
加个判断~~



怎样判断?

#6


如果没有数据肯定不会循环的,肯定是哪边错误,仔细调试下

#7


sqlce 数据库  删除后再查询就会报错  有木有人遇到过啊?

#8


单步调试一下,用datatable和dataadapter看看能不能取出数据来

#9


不是的你的
while里面是有装换出错

另外就是string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";的后面没有条件的

你的删除是有条件的

比如:你吧>0的删除了
然后查询的是全部数据
当然还有数据了哦

string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]"; 加上条件
然后while里面有bug

#10



string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";
  SqlCeDataReader read = null;
  //创建SQL数据集
  sqlcmd = new SqlCeCommand(sqlstr, DataBaseCon.acon);
  read = sqlcmd.ExecuteReader();

  //列表清空
  listView1.Items.Clear();
  //读取数据集信息
if(read!=null)  //这样判断!!!!
{
  while (read.Read())
  {
  metrology_jdjl.Add(read[0].ToString(), read[0].ToString());

  //创建子数组 subitem
  ListViewItem tmpSubitem = new ListViewItem();
  tmpSubitem.SubItems.Clear();

  //委托单号
  tmpSubitem.SubItems[0].Text = read[1].ToString();
  //仪器名称
  tmpSubitem.SubItems.Add(read[2].ToString());

  listView1.Items.Add(tmpSubitem);
  }
}
  //释放资源
  read.Close(); read = null; sqlcmd = null;



if(read!=null)  //这样判断!!!!

#11


引用 10 楼  的回复:
C# code

string sqlstr = "select bs,wtdh,yqmc from [T_Sys_JDJLB]";
  SqlCeDataReader read = null;
  //创建SQL数据集
  sqlcmd = new SqlCeCommand(sqlstr, DataBaseCon.acon);
  read = sqlcmd.ExecuteReader();……



不是这个问题额  报的错是:Value does not fall within the expected range.

#12


问题解决了  还是谢谢各位了!

#13


是 while 里的转换出错了