int ArticleID = Convert.ToInt32(Request.QueryString["ArticleID"]);
            string sqlArticle = "select Article.ClassID,Article.Title,ArticleClass.ClassName,ArticleClass.ParentPath,ArticleClass.Depth,Article.SpecialID from Article inner join ArticleClass on Article.ClassID=ArticleClass.ClassID where Article.ArticleID=" + ArticleID;
            DataRow dr_Article = db.GetDataRow(sqlArticle);
            if (dr_Article != null)
            {
                ClassName.Text = dr_Article[2].ToString();
            }
Session["mydr"] = dr_Article;  //写入Session//---------------------------------------------------------------------------------------DataRow my_dr = (DataRow)Session["mydr"];  //读取Session                Response.Write(my_dr[2].ToString());  //错误提示:未将对象引用设置到对象的实例。哪里出错?

解决方案 »

  1.   

    ClassName.Text = dr_Article[2].ToString();
    这个没题
      

  2.   

    ClassName.Text = dr_Article[2].ToString(); 
    这个没问题
      

  3.   

    Response.Write(my_dr[2].ToString());  
    ==
    if(my_dr[2] != null && my_dr[2] != System.DBNull.Value)
    {
      Response.Write(my_dr[2].ToString()); 
    }
      

  4.   

    难道 DataRow 不可以存入Session
      

  5.   

    int ArticleID = Convert.ToInt32(Request.QueryString["ArticleID"]);
                string sqlArticle = "select Article.ClassID,Article.Title,ArticleClass.ClassName,ArticleClass.ParentPath,ArticleClass.Depth,Article.SpecialID from Article inner join ArticleClass on Article.ClassID=ArticleClass.ClassID where Article.ArticleID=" + ArticleID;
                DataRow dr_Article = db.GetDataRow(sqlArticle);
                if (dr_Article != null)
                {
                    ClassName.Text = dr_Article[2].ToString();
    Session["mydr"] = dr_Article;  //写入Session
                }
    //---------------------------------------------------------------------------------------if(Session["mydr"]!=null)
    {
    DataRow my_dr = (DataRow)Session["mydr"];  //读取Session                Response.Write(my_dr[2].ToString());  //错误提示:未将对象引用设置到对象的实例。
    }
      

  6.   

    我想问一下楼主,你的GetDataRow方法从哪里来的?你使用的是什么数据库操作类?
      

  7.   

    上面这么多人,包括四个红星的。session可以存储DataRow吗??
      

  8.   

    int ArticleID = Convert.ToInt32(Request.QueryString["ArticleID"]);
                string sqlArticle = "select Article.ClassID,Article.Title,ArticleClass.ClassName,ArticleClass.ParentPath,ArticleClass.Depth,Article.SpecialID from Article inner join ArticleClass on Article.ClassID=ArticleClass.ClassID where Article.ArticleID=" + ArticleID;
                DataRow dr_Article = db.GetDataRow(sqlArticle);
                if (dr_Article != null)
                {
                    ClassName.Text = dr_Article[2].ToString();
                 //把写入session 放在dr_Article != null 里面
                   如果放在外面 如果dr_Article  为空了!当然会报 未将对象引用设置到对象的实例。                      Session["mydr"] = dr_Article;  //写入Session
                }
    //---------------------------------------------------------------------------------------DataRow my_dr = (DataRow)Session["mydr"];  //读取Session                Response.Write(my_dr[2].ToString());  //错误提示:未将对象引用设置到对象的实例。
      

  9.   

    int ArticleID = Convert.ToInt32(Request.QueryString["ArticleID"]);
                string sqlArticle = "select Article.ClassID,Article.Title,ArticleClass.ClassName,ArticleClass.ParentPath,ArticleClass.Depth,Article.SpecialID from Article inner join ArticleClass on Article.ClassID=ArticleClass.ClassID where Article.ArticleID=" + ArticleID;
                DataRow dr_Article = db.GetDataRow(sqlArticle);
                if (dr_Article != null)
                {
                    ClassName.Text = dr_Article[2].ToString();
                }
    //这一部份绝对没问题哦
    难道真的不可以吗
      

  10.   

    可以的啊....  但是有个问题.... if (dr_Article != null)
                {
                    ClassName.Text = dr_Article[2].ToString();
                }
     Session["mydr"] = dr_Article;  //写入Session 
    你这里写的有问题啊......    在这里你做判断  如果dr_Article  不等于空的话   ClassName.Text = dr_Article[2].ToString();
       但是你写入session里的时候没有做判断啊... 如果 为空了照样他会写入session
        下面你在调用的时候当然回提示 未将对象引用设置到对象的实例。 
      

  11.   

    if (my_dr[2] != null) Response.Write(my_dr[2].ToString());
      

  12.   

    判断一下啊
    if (my_dr[2] != null) Response.Write(my_dr[2].ToString());
      

  13.   


            public class Database : IDisposable
        {
            /// <summary>
            /// 保护变量,数据库连接。
            /// </summary>
            protected SqlConnection Connection;        /// <summary>
            /// 保护变量,数据库连接串。
            /// </summary>
            protected String ConnectionString;        /// <summary>
            /// 构造函数。
            /// </summary>
            /// <param name="DatabaseConnectionString">数据库连接串</param>
            public Database()
            {
                ConnectionString = ConfigurationManager.ConnectionStrings["DBConnectionString"].ToString();
            }        /// <summary>
            /// 析构函数,释放非托管资源
            /// </summary>
            ~Database()
            {
                try
                {
                    if (Connection != null)
                        Connection.Close();
                }
                catch (Exception ex)
                {
                    Logger.Log.Error("数据库链接错误:", ex);
                }
                try
                {
                    Dispose();
                }
                catch { }
            }        /// <summary>
            /// 保护方法,打开数据库连接。
            /// </summary>
            protected void Open()
            {
                if (Connection == null)
                {
                    Connection = new SqlConnection(ConnectionString);
                }
                if (Connection.State.Equals(ConnectionState.Closed))
                {
                    Connection.Open();
                }
            }        /// <summary>
            /// 公有方法,关闭数据库连接。
            /// </summary>
            public void Close()
            {
                if (Connection != null)
                    Connection.Close();
            }        /// <summary>
            /// 公有方法,释放资源。
            /// </summary>
            public void Dispose()
            {
                // 确保连接被关闭
                if (Connection != null)
                {
                    Connection.Dispose();
                    Connection = null;
                }
            }        /// <summary>
            /// 公有方法,获取数据,返回一个SqlDataReader (调用后主意调用SqlDataReader.Close())。
            /// </summary>
            /// <param name="SqlString">Sql语句</param>
            /// <returns>SqlDataReader</returns>
            public SqlDataReader GetDataReader(String SqlString)
            {
                Open();
                SqlCommand cmd = new SqlCommand(SqlString, Connection);
                SqlDataReader dataReader = null;
                try
                {
                    dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
                }
                catch (Exception ex)
                {
                    Logger.Log.Error("GetDataReader错误:", ex);
                }
                return dataReader;
            }        /// <summary>
            /// 公有方法,获取数据,返回一个DataSet。
            /// </summary>
            /// <param name="SqlString">Sql语句</param>
            /// <returns>DataSet</returns>
            public DataSet GetDataSet(String SqlString)
            {
                Open();
                DataSet dataset = new DataSet();
                try
                {
                    SqlDataAdapter adapter = new SqlDataAdapter(SqlString, Connection);
                    adapter.Fill(dataset);
                    Close();
                }
                catch (Exception ex)
                {
                    Logger.Log.Error("GetDataSet错误:", ex);
                }
                return dataset;
            }        /// <summary>
            /// 公有方法,获取数据,返回一个DataTable。
            /// </summary>
            /// <param name="SqlString">Sql语句</param>
            /// <returns>DataTable</returns>
            public DataTable GetDataTable(String SqlString)
            {
                DataSet dataset = GetDataSet(SqlString);
                DataTable datatable = new DataTable();
                if (dataset.Tables.Count > 0)
                    datatable = dataset.Tables[0];
                return datatable;
            }        /// <summary>
            /// 公有方法,获取数据,返回一个DataRow。
            /// </summary>
            /// <param name="SqlString">Sql语句</param>
            /// <returns>DataRow</returns>
            public DataRow GetDataRow(String SqlString)
            {
                DataTable dt = GetDataTable(SqlString);
                if (dt.Rows.Count > 0)
                    return dt.Rows[0];
                return null;
            }        /// <summary>
            /// 公有方法,执行Sql语句。
            /// </summary>
            /// <param name="SqlString">Sql语句</param>
            /// <returns>对Update、Insert、Delete为影响到的行数,其他情况为-1</returns>
            public int ExecuteSQL(String SqlString)
            {
                int count = -1;
                Open();
                try
                {
                    SqlCommand cmd = new SqlCommand(SqlString, Connection);
                    count = cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Logger.Log.Error("ExecuteSQL错误:", ex);
                    count = -1;
                }
                finally
                {
                    Close();
                }
                return count;
            }