一个关于字符串空值的错误,大家帮忙看看

fong_yh 2009-10-08 06:00:25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using udb;

namespace Framework.oa.crm
{
public partial class show_inquire : System.Web.UI.Page
{
/// <summary>
/// 页面加载时即获取查询页面(msg_inauire.aspx)传过来的查询字符串(JsInquireStr)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
string inquireStr;
inquireStr = Request["JsInquireStr"];
unitalendb cxString = new unitalendb();
cxString.EQStr(inquireStr);
Response.Write(cxString);
}
}
}

上面的是后台C#代码,调试的时候返回下面的错误信息:

The value can not be null or an empty string.

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.ArgumentException: The value can not be null or an empty string.

源错误:


行 20: string inquireStr;
行 21: inquireStr = Request["JsInquireStr"];
行 22: unitalendb cxString = new unitalendb();
行 23: cxString.EQStr(inquireStr);
行 24: Response.Write(cxString);

源文件: G:\Framework\oa\crm\show_inquire.aspx.cs 行: 22

堆栈跟踪:


[ArgumentException: The value can not be null or an empty string.]
Microsoft.Practices.EnterpriseLibrary.Data.DatabaseConfigurationView.ValidateInstanceName(String name) +69
Microsoft.Practices.EnterpriseLibrary.Data.DatabaseConfigurationView.GetConnectionStringSettings(String name) +18
Microsoft.Practices.EnterpriseLibrary.Data.DatabaseCustomFactory.CreateObject(IBuilderContext context, String name, IConfigurationSource configurationSource, ConfigurationReflectionCache reflectionCache) +44
Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.ConfiguredObjectStrategy.PreBuildUp(IBuilderContext context) +107
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) +97

[BuildFailedException: The current build operation (build key Build Key[Microsoft.Practices.EnterpriseLibrary.Data.Database, null]) failed: The value can not be null or an empty string. (Strategy type ConfiguredObjectStrategy, index 2)]
Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) +273
Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing) +59
Microsoft.Practices.ObjectBuilder2.Builder.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetime, IPolicyList policies, IStrategyChain strategies, Object buildKey, Object existing) +45
Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp(IReadWriteLocator locator, ILifetimeContainer lifetimeContainer, IConfigurationSource configurationSource) +234
Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.EnterpriseLibraryFactory.BuildUp(IConfigurationSource configurationSource) +41
Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ObjectBuilder.NameTypeFactoryBase`1.CreateDefault() +48
Microsoft.Practices.EnterpriseLibrary.Data.DatabaseFactory.CreateDatabase() +63
basicDB.BaseDB..ctor() in E:\Projects\U_MVCProject\basic\baseDB.cs:14
udb.unitalendb..ctor() +29
Framework.oa.crm.show_inquire.Page_Load(Object sender, EventArgs e) in G:\U_WebFromProject\Framework\oa\crm\show_inquire.aspx.cs:22
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
System.Web.UI.Control.OnLoad(EventArgs e) +99
System.Web.UI.Control.LoadRecursive() +50
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

--------------------------------------------------------------------------------
版本信息: Microsoft .NET Framework 版本:2.0.50727.4927; ASP.NET 版本:2.0.50727.4927

请大家帮忙看看上面的问题怎么解决,谢谢!!
...全文
605 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
fong_yh 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 sql77 的回复:]
引用 15 楼 fong_yh 的回复:
图传不上来:(,大概显示如下:

名称            值
this          {ASP.oa_crm_show_inquire_aspx}
sender        {ASP.oa_crm_show_inquire_aspx}
e              {System.EventArgs}
inquireStr    null
cxString      null

这是不是表示没有值呢?可是在测试的时候可以传过来的啊?
直接Response.Write(inquireStr);是可以得到正确的字符串的

应该是没获取到
[/Quote]

但是用Response.Write(inquireStr);可以得到传过来的正确的字符串啊
SQL77 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 fong_yh 的回复:]
图传不上来:(,大概显示如下:

名称            值
this          {ASP.oa_crm_show_inquire_aspx}
sender        {ASP.oa_crm_show_inquire_aspx}
e              {System.EventArgs}
inquireStr    null
cxString      null

这是不是表示没有值呢?可是在测试的时候可以传过来的啊?
直接Response.Write(inquireStr);是可以得到正确的字符串的
[/Quote]
应该是没获取到
SQL77 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 fong_yh 的回复:]
图传不上来:(,大概显示如下:

名称            值
this          {ASP.oa_crm_show_inquire_aspx}
sender        {ASP.oa_crm_show_inquire_aspx}
e              {System.EventArgs}
inquireStr    null
cxString      null

这是不是表示没有值呢?可是在测试的时候可以传过来的啊?
直接Response.Write(inquireStr);是可以得到正确的字符串的
[/Quote]
两个都为NULL没值呢,
fong_yh 2009-10-08
  • 打赏
  • 举报
回复
图传不上来:(,大概显示如下:

名称 值
this {ASP.oa_crm_show_inquire_aspx}
sender {ASP.oa_crm_show_inquire_aspx}
e {System.EventArgs}
inquireStr null
cxString null

这是不是表示没有值呢?可是在测试的时候可以传过来的啊?
直接Response.Write(inquireStr);是可以得到正确的字符串的
fong_yh 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 huming_h 的回复:]
光标放在inquireStr = Request["JsInquireStr"];
这行上,按F9键,即插入断点,然后按F5进入调试状态。单行调试F10
想进入EQStr方法按F11进入
[/Quote]
谢谢!!进入调试后得到下面的结果:
JackChin7 2009-10-08
  • 打赏
  • 举报
回复
进入调试模式,查找哪个字没有值,或者是传值要实例化下!
fong_yh 2009-10-08
  • 打赏
  • 举报
回复
unitalendb里只有下面的代码,没有其它了

public class unitalendb : BaseDB
{
/// <summary>
/// 分割字符串
/// </summary>
/// <param name="cols"> </param>
/// <returns> </returns>
public string EQStr(string cols)
{
string[] list = cols.Split(','); //以,为间隔分割字符串并将值写入数组
string ps = string.Empty;
for (int i = 0; i < list.Length; i++)
{
ps += list[i] + "=@" + list[i].Trim().TrimStart('[').TrimEnd(']') + ","; //删除字符串中的空格、头部的"["和尾部的"]"
}

return ps.TrimEnd(','); //返回处理完的字符串ps
}
}
wuyi8808 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyi8808 的回复:]
unitalendb 的无参构造函数贴出来看看。
[/Quote]

public class unitalendb : BaseDB 
{
public unitalendb()
{
// 这里是什么内容,贴出来看看。
}
}
huming_h 2009-10-08
  • 打赏
  • 举报
回复
光标放在inquireStr = Request["JsInquireStr"];
这行上,按F9键,即插入断点,然后按F5进入调试状态。单行调试F10
想进入EQStr方法按F11进入
fong_yh 2009-10-08
  • 打赏
  • 举报
回复
回4楼,我试过,确定字符串可以传过来。
回5楼,我是用javascript传的,不是地址栏。
fong_yh 2009-10-08
  • 打赏
  • 举报
回复
回1楼:我试过你的方法,结果一样
回2楼:我是新手,还不知道怎么设置断点,请说明完整的方法,谢谢!!
回3楼:代码如下:
public class unitalendb : BaseDB
{
/// <summary>
/// 分割字符串
/// </summary>
/// <param name="cols"></param>
/// <returns></returns>
public string EQStr(string cols)
{
string[] list = cols.Split(','); //以,为间隔分割字符串并将值写入数组
string ps = string.Empty;
for (int i = 0; i < list.Length; i++)
{
ps += list[i] + "=@" + list[i].Trim().TrimStart('[').TrimEnd(']') + ","; //删除字符串中的空格、头部的"["和尾部的"]"
}

return ps.TrimEnd(','); //返回处理完的字符串ps
}
}
xray2005 2009-10-08
  • 打赏
  • 举报
回复
inquireStr = Request["JsInquireStr"]; //这句
如果是地址栏传的话
应该是这样吧  inquireStr = Request.Form["JsInquireStr"].ToString();

Debug_Today 2009-10-08
  • 打赏
  • 举报
回复
同意2楼,一般出现异常的时候,多使用单步调试或者断点来调试,很容易发现问题所在。
fclff 2009-10-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fclff 的回复:]
inquireStr = Request["JsInquireStr"]; //这句
如果是地址栏传的话
应该是这样吧  inquireStr = Request.Form["JsInquireStr"].ToString();

[/Quote]
不好意思搞错了,,是这样。 inquireStr =Request.QueryString["JsInquireStr"].ToString();
wuyi8808 2009-10-08
  • 打赏
  • 举报
回复
cxString.EQStr(inquireStr); 

// 改为:

if (!string.IsNullOrEmpty(inquireStr))
cxString.EQStr(inquireStr);
wuyi8808 2009-10-08
  • 打赏
  • 举报
回复
unitalendb 的无参构造函数贴出来看看。
huming_h 2009-10-08
  • 打赏
  • 举报
回复
inquireStr = Request["JsInquireStr"];
放个断点,查看是否有值。
fclff 2009-10-08
  • 打赏
  • 举报
回复
inquireStr = Request["JsInquireStr"]; //这句
如果是地址栏传的话
应该是这样吧 inquireStr = Request.Form["JsInquireStr"].ToString();

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧