代码如下:
 int nBillNO;
protected void Page_Load(object sender, EventArgs e)
{                 SqlConnection myConn = new SqlConnection();
        myConn.ConnectionString = ConfigurationSettings.AppSettings["StorageManagementConnectionString"].ToString();
        myConn.Open();        SqlCommand myCMD = myConn.CreateCommand();
        myCMD.CommandText = "select max(BillNumber) from StorageIn where [Accounting Period]='"+System .DateTime .Now .Year .ToString ()+"/"+System .DateTime .Now .Month .ToString ()+"'";
        SqlDataReader myDR = myCMD.ExecuteReader();        if (!myDR.HasRows)
        {
            //如果没有任何数据行,显示成20080800001的样式
            this.lblNO.Text = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString("00")+"00001";
        }
        //如果有数据则读取
        while (myDR.Read())
        {
            //假设有值,为样式20080800012,那么+1      
            strBillNO[0] = myDR["BillNumber"].ToString();
            //截取字符串后五位
            strBillNum = strBillNO[0].Remove(0, 6);
            //变成去掉200808后的后五位,如00012,转化成整型进行+1计算            this.nBillNO = Convert.ToInt32(strBillNum) + 1;
            
            this.lblNO.Text =System .DateTime .Now .Year .ToString ()+   System .DateTime .Now .Month .ToString ("00")+ nBillNO.ToString();        
        }
        myDR.Close();
        myConn.Close(); 
}
运行后出错:
BillNumber 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: BillNumber源错误: 
行 34:         {
行 35:             //假设有值,为样式20080800012,那么+1返回数据库即可?超界!            
行 36:             strBillNO = myDR["BillNumber"].ToString ();
行 37:             //截取字符串后五位
行 38:             strBillNO = strBillNO.Remove(0, 6);
 源文件: c:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\WebSites\WebSite2\入库管理\StorageManagement_In.aspx.cs    行: 36 为什么会这样呢?以前从数据库读取数据时,都是用DataReader对象啊?这次唯一的区别就在与SQL语句里多了一个max函数,为什么呢?请高手指点!至高无上的感谢感激!