SqlHelper.cs运行时,错误会时有时无 我把if (reader.IsDBNull((int)reader[fieldName])) 换成if (Convert.IsDBNull(reader[fieldName]))也不行!???? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 try{ if (reader[fieldName]!=null || reader[fieldName].toString().Trim()!="") { return reader[fieldName].toString().Trim(); } else { return ""; }}catch(Exception ex){ //捕捉错误} 楼主还不清楚reader[fieldName]的意思啊!!! “/”应用程序中的服务器错误。--------------------------------------------------------------------------------ID 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: ID源错误: 行 265: public static int GetIntFieldValue(SqlDataReader reader, string fieldName, int replaceValue)行 266: {行 267: if (Convert.IsDBNull(reader[fieldName]))行 268: return replaceValue;行 269: return (int)reader[fieldName]; 源文件: E:\WEB\DataAccess\SqlHelper.cs 行: 267 堆栈跟踪: [IndexOutOfRangeException: ID] System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +1433771 System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +102 System.Data.SqlClient.SqlDataReader.get_Item(String name) +12 Dzsw.DataAccess.SqlHelper.GetIntFieldValue(SqlDataReader reader, String fieldName, Int32 replaceValue) in E:\WEB\DataAccess\SqlHelper.cs:267 Dzsw.DataAccess.SqlHelper.GetIntFieldValue(SqlDataReader reader, String fieldName) in E:\WEB\DataAccess\SqlHelper.cs:281 Dzsw.DataAccess.AirDisData.CreateFromDataReader(SqlDataReader reader) in E:\WEB\DataAccess\AirDisData.cs:89 Dzsw.DataAccess.AirDisData.GetSpecialsPrice(DateTime rq, String myPage) in E:\WEB\DataAccess\AirDisData.cs:53 Dzsw.BusinessObjects.AirDis.GetSpecialsPrice(DateTime rq, String myPage) in E:\WEB\BusinessObjects\AirDis.cs:214 Dzsw.SeDo.ESelect.Page_Load(Object sender, EventArgs e) in E:\WEB\SeDo\ESelect.aspx.cs:26 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +43 System.Web.UI.Control.OnLoad(EventArgs e) +98 Dzsw.Components.BasePage.OnLoad(EventArgs e) in E:\WEB\Components\BasePage.cs:193 System.Web.UI.Control.LoadRecursive() +71 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4300 --------------------------------------------------------------------------------版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433 看看数据库中有"ID"这个字段没,在看看,select 语句中有没有"ID"。这段代码应该没问题的。 没有ID这个Field, 建议打开SQL Server profiler, 看看出错的SQL script就清楚了. 如果reader里没有数据时,你用reader[field]会抛索引越界异常。所以必须判断reader里是否有数据,一般用法是:while(reader.Read()){...}另外,SqlDataReader读取数据时独占SqlConnection,LZ用它每次就读一列出来非常低效,而且SqlDataReader最好显示调用Close()方法,否则也可能报错。 datareder是只进只读的!读小数据的时候是很快的!如果操作数据库只想返回一个值,用输出参数就行了。没必要用datareder的!~ LZ在SQLHelper里设计这样的方法,目的估计是想让数据库返回统一的类型,而不用每次去判断是不是Null还是String.Empty.其实每次去判断一下也没什么大不了的,string类提供的IsNullOrEmpty方法大概就是为了方便大家判断。并且Null值和空值含义不一样,在有些业务逻辑可能需要加以区分,如果在DAL层将两者混为一团,在BLL层将无法判断。所以,所以,这类方法不用也罢…… try { if (reader[fieldName]!=null && reader[fieldName].toString().Trim()!=""&&reader[fieldName]!=DBNull.value) { return reader[fieldName].toString().Trim(); } else { return ""; } } catch(Exception ex) { //捕捉错误 } 到底怎么写代码才能捕捉错误?这里又不能response.write? 通常每个套接字地址(协议/网络地址/端口)只允许使用一次 如何设置打印的总页数 数据库查询,字段为空,查不出来 怎样用c#提取这样的句子? 类似盗取QQ的程序 C# 我想把richtextbox中选种的字的颜色换了,可是换了以后,以后显示的字都变成了那种换颜色的字,请问我怎么在使用原来的颜色啊; 建立了一张表存到了DataSet中,现在我想将这张表打印? 请问大侠们如何实现? DataBind() 求助:为什么只返回了一人值呢? 急!询问VS2005 c#打印页高度变化问题 求线程处理N多数据代码
{
if (reader[fieldName]!=null || reader[fieldName].toString().Trim()!="")
{
return reader[fieldName].toString().Trim();
}
else
{
return "";
}
}
catch(Exception ex)
{
//捕捉错误
}
--------------------------------------------------------------------------------ID
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.IndexOutOfRangeException: ID源错误:
行 265: public static int GetIntFieldValue(SqlDataReader reader, string fieldName, int replaceValue)
行 266: {
行 267: if (Convert.IsDBNull(reader[fieldName]))
行 268: return replaceValue;
行 269: return (int)reader[fieldName];
源文件: E:\WEB\DataAccess\SqlHelper.cs 行: 267 堆栈跟踪:
[IndexOutOfRangeException: ID]
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) +1433771
System.Data.SqlClient.SqlDataReader.GetOrdinal(String name) +102
System.Data.SqlClient.SqlDataReader.get_Item(String name) +12
Dzsw.DataAccess.SqlHelper.GetIntFieldValue(SqlDataReader reader, String fieldName, Int32 replaceValue) in E:\WEB\DataAccess\SqlHelper.cs:267
Dzsw.DataAccess.SqlHelper.GetIntFieldValue(SqlDataReader reader, String fieldName) in E:\WEB\DataAccess\SqlHelper.cs:281
Dzsw.DataAccess.AirDisData.CreateFromDataReader(SqlDataReader reader) in E:\WEB\DataAccess\AirDisData.cs:89
Dzsw.DataAccess.AirDisData.GetSpecialsPrice(DateTime rq, String myPage) in E:\WEB\DataAccess\AirDisData.cs:53
Dzsw.BusinessObjects.AirDis.GetSpecialsPrice(DateTime rq, String myPage) in E:\WEB\BusinessObjects\AirDis.cs:214
Dzsw.SeDo.ESelect.Page_Load(Object sender, EventArgs e) in E:\WEB\SeDo\ESelect.aspx.cs:26
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +13
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +43
System.Web.UI.Control.OnLoad(EventArgs e) +98
Dzsw.Components.BasePage.OnLoad(EventArgs e) in E:\WEB\Components\BasePage.cs:193
System.Web.UI.Control.LoadRecursive() +71
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4300
--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433
所以必须判断reader里是否有数据,一般用法是:while(reader.Read())
{...}另外,SqlDataReader读取数据时独占SqlConnection,LZ用它每次就读一列出来非常低效,
而且SqlDataReader最好显示调用Close()方法,否则也可能报错。
读小数据的时候是很快的!
如果操作数据库只想返回一个值,用输出参数就行了。没必要用datareder的!~
目的估计是想让数据库返回统一的类型,
而不用每次去判断是不是Null还是String.Empty.
其实每次去判断一下也没什么大不了的,
string类提供的IsNullOrEmpty方法大概就是为了方便大家判断。
并且Null值和空值含义不一样,在有些业务逻辑可能需要加以区分,
如果在DAL层将两者混为一团,在BLL层将无法判断。
所以,所以,
这类方法不用也罢……
{
if (reader[fieldName]!=null && reader[fieldName].toString().Trim()!=""&&reader[fieldName]!=DBNull.value)
{
return reader[fieldName].toString().Trim();
}
else
{
return "";
}
}
catch(Exception ex)
{
//捕捉错误
}
到底怎么写代码才能捕捉错误?这里又不能response.write?