select MAX(BulidNo) as 最大值 from Bulid
这一条语句查询出来有一条值,但是是NULL
所以我就用了下面的方法判断控制
可以程序一直提示“在没有任何数据时进行无效的读取尝试!”        private void initBulidNo()//设置txtAreaNo值
        {
            int Number;
            string sql = "select MAX(BulidNo) as 最大值 from Bulid";
            SqlDataReader myReader = G_SqlExecute.GetReader(sql);            if (!myReader.IsDBNull(0))//错误出现在这里,我不明白为什么?
            {
                MessageBox.Show("aa");
                /*Number = Convert.ToInt16(myReader.GetString(0)) + 1;                if (Number.ToString().Length == 3)
                {
                    txtBulidNo.Text = Number.ToString();
                }
                else if (Number.ToString().Length >= 2 && Number.ToString().Length < 3)
                {
                    txtBulidNo.Text = "0" + Number.ToString();
                }
                else
                {
                    txtBulidNo.Text = "00" + Number.ToString();
                }
                txtBulidName.Text = "";
                txtFloorNum.Text = "";
                rtbRe.Text = "";*/
            }
            else
            {
                txtBulidNo.Text = "001";
            }            myReader.Close();
        }

解决方案 »

  1.   

    if myReader.read()
       试试
      

  2.   

    要我做的话在if (!myReader.IsDBNull(0))调式到这里的时候看看myReader的具体参数值是什么,在即时里试试看myReader的其他一些方法都返回什么。也许能找到问题。
      

  3.   

    对啊,不就是查个值吗。用SqlDataAdapter da = new SqlDataAdapter(sql);
    DataSet ds = new DataSet();
    da.Fill(ds);
      

  4.   

    返回一个DataTable方便一些.SqlDataReader 操作有些烦躁
      

  5.   

    ojb = dataReader["ProTypeId"];
    if(ojb != null && ojb != DBNull.Value)
    {
      model.ProTypeId=(int)ojb;
    }
      

  6.   

    呵呵,强烈支持楼上的说法,就是因为才读取一次而已!不需要用到dataset,我之前就是用dataset现在想换dataReader().已经知道解决方法了!谢谢大家~结题给分啊 。