代码如下:
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函数,为什么呢?请高手指点!至高无上的感谢感激!
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函数,为什么呢?请高手指点!至高无上的感谢感激!
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货