try
{

SqlConnection sc = new SqlConnection("server=192.1.1.1;uid=sa;pwd=sa;database=kj2006");//连接字符串

SqlDataAdapter sd = new SqlDataAdapter();
DataSet ds = new DataSet();
string str = "SELECT point,address,ssz,dw,sxyj FROM realdata  where dw = '"+this.textBox1.Text.Trim()+"' or dw = '"+this.textBox2.Text.Trim()+"' or dw = '"+this.textBox3.Text.Trim()+"' or dw = '"+this.textBox4.Text.Trim()+"' or dw = '"+this.textBox5.Text.Trim()+"'"; 

sc.Open();
sd.SelectCommand = new SqlCommand(str,sc);
sd.Fill(ds,"realdata");
SqlCommand cmd = sc.CreateCommand();
SqlDataReader dr; 
cmd.CommandText ="SELECT point,address,ssz,dw,sxyj FROM realdata  where dw = '"+this.textBox1.Text.Trim()+"' or dw = '"+this.textBox2.Text.Trim()+"' or dw = '"+this.textBox3.Text.Trim()+"' or dw = '"+this.textBox4.Text.Trim()+"' or dw = '"+this.textBox5.Text.Trim()+"'"; 
dr = cmd.ExecuteReader(); 

if (dr.HasRows)

   if(dr.GetDouble(2)>dr.GetDouble(4) || dr.GetDouble(2)==dr.GetDouble(4))
{
int i = 0;  StreamWriter sw=new StreamWriter(path1,false,Encoding.GetEncoding("gb2312"));

 
while (dr.Read()) 

 i++; 

sw.Write(dr.GetString(0).ToString().TrimEnd()+"   "); 
sw.Write(dr.GetString(1).ToString().TrimEnd()+" ");
sw.Write(dr.GetString(2).ToString().TrimEnd()+" ");
sw.Write(dr.GetString(3).ToString().TrimEnd()+"   ");
sw.Write(dr.GetString(4).ToString().TrimEnd()+"  ");
sw.WriteLine("");



}
 sw.Close(); 
 dr.Close();






sc.Close();



}

catch(Exception eorr)
{
MessageBox.Show("错误:"+eorr.Message+" !");
}
出现异常提示:错误:在没有任何数据时进行无效的读取尝试!
数据库字段都是char 类型的

解决方案 »

  1.   

    有数据的
     if(dr.GetDouble(2)>dr.GetDouble(4) || dr.GetDouble(2)==dr.GetDouble(4)) 
    上面这句代码是不是有问题
      

  2.   

    有数据的
     if(dr.GetDouble(2)>dr.GetDouble(4) || dr.GetDouble(2)==dr.GetDouble(4)) 
    上面这句代码是不是有问题
      

  3.   

    有数据的 
    if(dr.GetDouble(2)>dr.GetDouble(4) || dr.GetDouble(2)==dr.GetDouble(4)) 
    上面这句代码是不是有问题 
    dr.GetDouble(2)是实时值    
    dr.GetDouble(4)是上限预警值
    这两个要比较
      

  4.   


    UP,检查下数据库看看有没有记录
    设置个断点调试下吧 if(dr.GetDouble(2)>dr.GetDouble(4) || dr.GetDouble(2)==dr.GetDouble(4)) 写的很有创意的啊
      

  5.   

    dr.GetString(2).ToString().TrimEnd()dr.GetDouble(2)看看是不是有问题? 这2句话!!
    GetString(2)都这样了还ToString干吗呢
      

  6.   

    你还没有Read呢,就GetDouble了?那肯定错啊
      

  7.   

    if (dr.Reader()) //首先要读到!!
      

  8.   

    9楼有误!应该是:
    if (dr.Read()) //首先要读到!!
      

  9.   


    dr.Read 和 dr.MoveNext
      

  10.   

    以下为个人见解
    建议你每执行一次就sc.Close() sc.Open()
    SqlDataReader 要单独占用一个连接,如果你上个连接没释放,那么下面就读不到数据。另外,要dr.Reader()先读取才行,不然也是读不到数据的。不知道你是哪种情况,仅供参考
      

  11.   

    谢谢
    把if(dr.GetDouble(2)>dr.GetDouble(4) || dr.GetDouble(2)==dr.GetDouble(4)) 
    移到了if (dr.Read()) 下
    可以过去了 
    又出现新的异常
    说 无效转换
    是不是就是下面这句有问题啊
    if(dr.GetDouble(2)>dr.GetDouble(4) || dr.GetDouble(2)==dr.GetDouble(4)) 
    数据库字段类型都是char
      

  12.   

    汗GetDouble不执行任何转换所检索的数据必须已经是双精度浮点数,而你的是char……
      

  13.   

    建议读取到变量,自己转换后再比较还有,“调用 IsDBNull 以便在调用此方法之前检查 null 值” msdn
      

  14.   

    既然是char类型你为什么要GetDouble呢?
    试试这样:
    if(Convert.ToDouble(dr[2])>=Convert.ToDouble(dr[4]))