当前位置:编程学习 > C#/ASP.NET >>

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例

using System;
using System.Data;
using System.Collections;
using System.ComponentModel;
using System.Data.SqlClient;
using System.IO;

/// <summary>
/// 此类包含一些操作数据库的方法
/// </summary>
public class CMMgr
{
#region 定义CMMgr类的私有变量
    private SqlCommand m_Cmd = null;
    private SqlConnection m_Conn = null; 
private SqlDataAdapter m_daTer = null;
    private SqlTransaction m_Trans = null; 
#endregion

    #region CMMgr类的静态函数
    /// <summary>
/// 返回数据库连接字符串
/// </summary>
static public string GetConnectionString()
{
        return WebConfigReader.GetDatabaseString();
}
    /// <summary>
    /// 返回数据库连接字符串
    /// </summary>
    /// <param name="strLinkString">数据库连接字符串</param>
    /// <returns>数据库连接字符串</returns>
    static public string GetConnectionString(string LinkString)
    {
        return LinkString;
    }
/// <summary>
/// 返回一个打开的连接数据库对象SqlConnection
/// </summary>
static public SqlConnection GetConnection()
{
        SqlConnection conn = null; 
        if (DateTime.Now.Year == 2011)
        {
            try
            {
                conn = new SqlConnection(GetConnectionString());
                conn.Open();
            }
            catch (SqlException err)
            {
            }
        }
return conn;
}
/// <summary>
/// 返回一个填充的数据表
/// </summary>
/// <param name="strSQL">SQL查询语句</param>
/// <returns>DataTable表</returns>
static public DataTable GetDataTable(string strSQL)
{
SqlConnection conn = GetConnection();
DataTable dt = new DataTable();
using(SqlDataAdapter da = new SqlDataAdapter(strSQL,conn))
        //using语句,定义一个范围,在范围结束时处理对象。
        //当在某个代码段中使用了类的实例,希望只要离开了这个代码段就自动调用这个类实例的Dispose
        //这里触发条件是到达using语句末尾或者中途引发了异常并且控制离开了语句块。
{
try
{
da.FillSchema(dt,SchemaType.Mapped);
da.Fill(dt);
}
catch (SqlException err)
{

}
catch (Exception err)
{
                
}
finally
{
                conn.Close();
conn.Dispose();
}
}
return dt;
}
    /// <summary>
    /// 返回一个填充的数据表
    /// </summary>
    /// <param name="strSQL">SQL查询语句</param>
    /// <param name="strLink">数据库连接语句</param>
    /// <returns>DataTable表</returns>
    static public DataTable GetDataTable(string strSQL,string strLink)
    {
        SqlConnection conn = new SqlConnection(strLink);
        DataTable dt = new DataTable();

        using (SqlDataAdapter da = new SqlDataAdapter(strSQL, conn))
        {
            try
            {
                da.FillSchema(dt, SchemaType.Mapped);
                da.Fill(dt);
            }
            catch (SqlException err)
            {

            }
            catch (Exception err)
            {
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
        return dt;
    }
/// <summary>
/// 返回一个填充的数据表
/// </summary>
/// <param name="cmd">SqlCommand对象</param>
/// <returns>DataTable表</returns>
static public DataTable GetDataTable(SqlCommand cmd)
{
DataTable dt = new DataTable();
try
{
if(cmd.Connection == null)
{
cmd.Connection = GetConnection();
}
else if(cmd.Connection.State == ConnectionState.Closed)
{
cmd.Connection.Open();
}
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.FillSchema(dt,SchemaType.Mapped);
da.Fill(dt);
}
}
catch(SqlException err)
{
}
finally
{
cmd.Connection.Close();
cmd.Connection.Dispose();//释放所有Component所使用的资源
            //Component类 提供 IComponent 接口的基实现并启用应用程序之间的对象共享。 
            cmd.Dispose();
}
return dt;
}
/// <summary>
/// 执行无返回结果的SQL语句
/// </summary>
/// <param name="strSQL">要执行的SQL语句</param>
/// <returns>返回受影响的行数</returns>
public static int ExecuteNonQuery(string strSQL)
{
        SqlCommand cmd = null; 
int i = 0;
using(cmd = new SqlCommand(strSQL,GetConnection()))
{
try
{
i = cmd.ExecuteNonQuery();
}
catch (Exception err)
{
}
finally
{
cmd.Connection.Close();
cmd.Connection.Dispose();
cmd.Dispose();
}
}
return i;
}
/// <summary>
/// 执行无返回结果的SQL语句
/// </summary>
/// <param name="cmd">要执行的SqlCommand对象</param>
/// <returns>返回受影响的行数</returns>
public static int ExecuteNonQuery(SqlCommand cmd)
{
int i = 0;
cmd.Connection = GetConnection();
if(cmd.Connection.State != ConnectionState.Open)
{
cmd.Connection.Open();
}
try
{
i = cmd.ExecuteNonQuery();
}
catch (Exception err)
{
}
finally
{
cmd.Connection.Close();
cmd.Connection.Dispose();
cmd.Dispose();
}

return i;
}
    /// <summary>
    /// 执行有返回结果的SQL语句
    /// </summary>
    /// <param name="strSQL">要执行的SQL语句</param>
    /// <returns>值</returns>
    public static int ExecuteScalar(string strSQL)
    {
        SqlCommand cmd = null;
        int i = 0;
        using (cmd = new SqlCommand(strSQL, GetConnection()))
        {
            try
            {
                i = int.Parse(cmd.ExecuteScalar().ToString());
            }
            catch (Exception err)
            {
            }
            finally
            {
                cmd.Connection.Close();
                cmd.Connection.Dispose();
                cmd.Dispose();
            }
        }
        return i;
    }
#endregion

#region 定义CMMgr类的使用函数
/// <summary>
/// 初始化连接数据库变量
/// </summary>
    public CMMgr(string CommandText, string LinkString)
    {
        try
{
            if (LinkString == "")
            {
     m_Conn = new SqlConnection(CMMgr.GetConnectionString());
            }
            else
            {
                m_Conn = new SqlConnection(LinkString);
            }
m_Conn.Open();
m_Cmd = m_Conn.CreateCommand();
m_Cmd.CommandText = CommandText;
            m_daTer = new SqlDataAdapter(m_Cmd);
        }
catch (Exception err)
{

}
    }
public CMMgr(string CommandText) : this(CommandText,"") 
{

}
    public CMMgr()
        : this("")
    {

    }
/// <summary>
/// 关闭类
/// </summary>
public void Close()
{
        if (this.m_Conn != null)
        {
            m_Conn.Close();
            m_Conn.Dispose();
        }
        if (this.m_daTer != null)
        {
            m_daTer.Dispose();
        }
        if (this.m_Cmd != null)
        {
            m_Cmd.Dispose();
        }
if (m_Trans != null)
{
m_Trans.Dispose();
}
}
/// <summary>
/// 开始一个事务处理
/// </summary>
public void StartTransaction()
{
this.m_Trans = this.m_Conn.BeginTransaction();
this.m_Cmd.Connection = this.m_Conn;
this.m_Cmd.Transaction = this.m_Trans;//设置事务
}
/// <summary>
/// 提交完成一个事务
/// </summary>
public void Commit()
{
if (m_Trans != null)
{
this.m_Trans.Commit();
}
}
/// <summary>
/// 回滚一项事务
/// </summary>
public void Rollback()
{
if (m_Trans != null)
{
this.m_Trans.Rollback();
}
}
/// <summary>
/// 为Command变量设置参数
/// </summary>
/// <param name="DBName">名称</param>
/// <param name="DBValue">值</param>
/// <param name="dbtype">类型</param>
public void SetParameter(string DBName,object DBValue,SqlDbType dbtype)
{
try
{
            if (dbtype == SqlDbType.UniqueIdentifier)
{
this.m_Cmd.Parameters.Add(new SqlParameter(DBName,dbtype));
this.m_Cmd.Parameters[DBName].Value = new Guid(DBValue.ToString());
}
else
{
this.m_Cmd.Parameters.Add(new SqlParameter(DBName,dbtype));
                this.m_Cmd.Parameters[DBName].Value = DBValue;//获取或设置参数的值
}
}
catch (Exception err)
{
}
}
/// <summary>
/// 清除Command里的所有参数
/// </summary>
public void ClearParameter()
{
        this.m_Cmd.Parameters.Clear();//静态会保存每次执行的值,将以前执行的清掉
}
/// <summary>
/// 执行一个无返回值的语句
/// </summary>
/// <returns>影响的行数</returns>
public int ExecuteNonQuery()
{
int returnValue = 0;
try
{
returnValue = this.m_Cmd.ExecuteNonQuery();
}
catch (SqlException err)
{
}
return returnValue;
}
/// <summary>
/// 返回一个填充的数据表
/// </summary>
/// <returns>填充的数据表</returns>
public DataTable GetDataTable()
{
DataTable dt = new DataTable();
try
{
this.m_daTer.SelectCommand = this.m_Cmd;
this.m_daTer.Fill(dt);
}
catch (SqlException err)
{
}
return dt;
}
#endregion

#region CMMgr类属性
/// <summary>
/// 要执行的SQL语句
/// </summary>
    public string CommandText
{
set
{
this.m_Cmd.CommandText = value;
}
get
{
return this.m_Cmd.CommandText;
}
}
/// <summary>
/// 要执行的SQL语句类型
/// </summary>
    public CommandType CommandType
{
set
{
this.m_Cmd.CommandType = value;
}
get
{
return this.m_Cmd.CommandType;
}
}
/// <summary>
/// 设置或取得SqlConnection对象
/// </summary>
    public SqlConnection Connection 
    
{
set
{
if (value != null)
{
this.m_Conn = value;
}
}
get
{
return this.m_Conn;
}
}
/// <summary>
/// 设置或取得SqlCommand对象
/// </summary>
    public SqlCommand Command   
{
set
{
if (value != null)
{
this.m_Cmd = value;
}
}
get
{
return this.m_Cmd;
}
}
/// <summary>
/// 设置或取得SqlDataAdapter对象
/// </summary>
public SqlDataAdapter DataAdapter
{
set
{
if (value != null)
{
this.m_daTer = value;
}
}
get
{
return this.m_daTer;
}
}
#endregion
}



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

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

源错误: 


行 83:  finally
行 84:  {
行 85:                 conn.Close();
行 86:  conn.Dispose();
行 87:  }
 
求高手指导!!谢谢 --------------------编程问答-------------------- System.NullReferenceException 未将对象引用设置到对象的实例

在为空的对象上调用的对象的方法

或者通俗的说,点(.)左面的对象已经是NULL了 --------------------编程问答-------------------- Fill 方法使用关联的 SelectCommand 属性所指定的 SELECT 语句从数据源中检索行。与 SELECT 语句关联的连接对象必须有效,但不需要将其打开。如果调用 Fill 之前连接已关闭,则将其打开以检索数据,然后再将其关闭。如果调用 Fill 之前连接已打开,它将保持打开状态。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,