异常详细信息: 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#