none
System.Data.SqlTypes.SqlNullValueException: 数据为空。不能对空值调用此方法或属性 RRS feed

  • 问题



  • net 1.1 访问mysql 存储过程出现如下错误;

     

    就在下面那句出了错误

    using(IDataReader reader = MySqlHelper.ExecuteReader(CommandType.StoredProcedure,"存储过程名称",parms))
    {
     }

    “/”应用程序中的服务器错误。


    数据为空。不能对空值调用此方法或属性。

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

    异常详细信息: System.Data.SqlTypes.SqlNullValueException: 数据为空。不能对空值调用此方法或属性。

    源错误:

    执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

    堆栈跟踪:

    [SqlNullValueException: 数据为空。不能对空值调用此方法或属性。]
      MySql.Data.MySqlClient.MySqlDataReader.GetFieldValue(Int32 index, Boolean checkNull)
      MySql.Data.MySqlClient.MySqlDataReader.GetString(Int32 index)
      MySql.Data.MySqlClient.StoredProcedure.GetProcedureBody(String spName, String& sql_mode, Boolean& isFunc)
      MySql.Data.MySqlClient.StoredProcedure.DiscoverParameters(String spName)
      MySql.Data.MySqlClient.ProcedureCache.GetProcData(MySqlConnection connection, String spName)
      MySql.Data.MySqlClient.ProcedureCache.AddNew(MySqlConnection connection, String spName)
      MySql.Data.MySqlClient.ProcedureCache.GetProcedure(MySqlConnection conn, String spName)
      MySql.Data.MySqlClient.StoredProcedure.Prepare(MySqlCommand cmd)
    
    [MySqlException: Exception during execution of 'Proc_Member_InfoSearch': 数据为空。不能对空值调用此方法或属性。]
      MySql.Data.MySqlClient.StoredProcedure.Prepare(MySqlCommand cmd)
      MySql.Data.MySqlClient.MySqlCommand.PrepareSqlBuffers(String sql)
      MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
      MySql.Data.MySqlClient.MySqlHelper.ExecuteReader(CommandType commandType, String commandText, MySqlParameter[] Parameters)
      Smartsite.Member.SQLServerDAL.Member.GetAllByParam(Int32& RecordCount, Int32 PageSize, Int32 PageIndex, String strKey, Boolean bCompanyName, Int32 level, String strStartTime, String strEndTime, Int32 intState)
      Smartsite.Member.BLL.Member.GetAllByParam(Int32& RecordCount, Int32 PageSize, Int32 PageIndex, String strKey, Boolean bCompanyName, Int32 level, String strStartTime, String strEndTime, Int32 intState)
      Smartsite.Member.Web.Admin.Member.Module.MemberListModule.BindList()
      Smartsite.Member.Web.Admin.Member.Module.MemberListModule.Page_Load(Object sender, EventArgs e)
      System.Web.UI.Control.OnLoad(EventArgs e) +67
      System.Web.UI.Control.LoadRecursive() +35
      System.Web.UI.Control.LoadRecursive() +98
      System.Web.UI.Page.ProcessRequestMain() +750
    
    2010年7月7日 11:27

全部回复

  • 应该是你的数据库中某一列的字段值为null,你应该在存储过程中进行判断,如果字段改列为NULL,就转化为空字符串""
    .net/asp.net开发群118343907
    2010年7月7日 11:45
  • 所有的返回列都做了ifnull(a.BeginDate,"1900-1-1") 类似的处理 问题依旧,而且在数据库上执行存储过程没有问题,能返回数据
    2010年7月7日 11:53
  • 你好

    或者可以試試

     

    if (a.BeginDate == DBNull.Value )
                    {
    //do something like

                    }


    Chi
    2010年7月7日 12:17
  • 我把存储过程该成最简单的,只执行最简单的查询,而且我确保返回的数据没有dbnull,还是一样的报错
    2010年7月8日 3:50