◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
异常的消息:内部连接致命错误。
引发当前异常的方法:System.Data.SqlClient.SqlDataReader ExecuteReader(System.Data.CommandBehavior, System.Data.SqlClient.RunBehavior, Boolean)
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
异常的消息:未将对象引用设置到对象的实例。
引发当前异常的方法:Void InternalClose(Boolean)
baidu google csdn 相关文章一篇都没有.孟子都没有办法哦
==========================================
各位大仙啊?神啊救人拉

解决方案 »

  1.   

    汗!
    跟数据库有关系的,检查数据库设置,连接未将对象引用设置到对象的实例:
    你使用对象时对象为null,
      

  2.   

    这是数据层
    using System;
    using System.Data;
    using System.Data.SqlClient;
    using System.Data.OleDb ;
    using System.Configuration;
    using NUnit.Framework;
    using log4net.Repository.Hierarchy;
    using log4net;
    using log4net.Config;namespace LinkThink.Data
    {
    [TestFixture]
    public sealed class DbObject : System.IDisposable 
    {
    private string StrTableName;
    private SqlConnection conn;
    private string errMsg;
    private string StrSql;
    private DataSet ds;
    private SqlCommand MyCommand;
    private SqlTransaction myTrans;
    private static string strDSN=ConfigurationSettings.AppSettings.Get("strConnection");
    private static readonly ILog log = LogManager.GetLogger(typeof(DbObject));
    //private static string strDSN="server=127.0.0.1,uid=sa,pwd=s,DataBase=linkThinkGR";

    public void Dispose()
    {
    //GC.SuppressFinalize(this);
    } [SetUp]
    private void TestSetUp()
    {
    conn = new SqlConnection() ;
    conn.ConnectionString = "server=127.0.0.1,uid=sa,pwd=s,DataBase=linkThinkGR";
    }
    [TearDown]
    private void TestDown()
    {
    conn.Dispose() ;
    } //数据库连接
    public  DbObject()
    {
    ConnectDB();
    }
    //关闭数据库
    public void Close()
    {
    if(MyCommand!=null)
    {
    MyCommand.Dispose();
    }
    if(conn!=null)
    {
    conn.Close();
    conn.Dispose();
    conn=null;
    }
    }
    //无返回数据执行方法
    public bool ExecuteSql(String StrSql)
    {
    this.StrSql=StrSql;
    try
    {
    if(conn.State.ToString().ToUpper()  != "Open".ToUpper())conn.Open() ;
    MyCommand=new SqlCommand(StrSql,conn);
    if(myTrans!=null)
    {
    MyCommand.Transaction=myTrans;
    }
    MyCommand.ExecuteNonQuery(); 
    MyCommand.Dispose();
    log.Info(MyCommand.CommandText);
    return true; }
    catch(SqlException eErr)
    {
    conn.Close();
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    log.Info(MyCommand.CommandText);
    log.Info(eErr.Message);
    log.Info(eErr.StackTrace);
    log.Info(eErr.TargetSite);
    SqlErrorHandler(eErr);
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    return false;
    }
    }
    //开始事务
    public void BeginTrans()
    {
    if(myTrans==null)
    {
    myTrans=conn.BeginTransaction();
    }
    }
    //回滚事务
    public void RollbackTrans()
    {
    myTrans.Rollback();
    }
    //执行事务
    public void CommitTrans()
    {
    myTrans.Commit();
    myTrans.Dispose();
    }
    //返回第一行第一列;

    public string GetData(string StrSql,int flag)
    {
    this.StrSql=StrSql;
    string StrResult="";
    try
    {
    if(conn.State.ToString().ToUpper()  != "Open".ToUpper())conn.Open() ;
    MyCommand=new SqlCommand(StrSql,conn);
    if(myTrans!=null)
    {
    MyCommand.Transaction=myTrans;
    }
    object o=MyCommand.ExecuteScalar();
    if(o==null)
    {
    StrResult="";
    }
    else
    {
    StrResult=o.ToString();
    }
    }
    catch(SqlException eErr)
    {
    conn.Close();
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    log.Info(eErr.Message);
    log.Info(eErr.StackTrace);
    log.Info(eErr.TargetSite);
    SqlErrorHandler(eErr);
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    }
    return StrResult;
    }

    public DataSet GetData(String StrTableName,String StrSql)
    {
    this.StrTableName=StrTableName;
    this.StrSql=StrSql;
    try
    {
    if(conn.State.ToString().ToUpper()  != "Open".ToUpper())conn.Open() ;
    SqlDataAdapter cmd=new SqlDataAdapter(StrSql,conn);
    ds=new DataSet();
    if(myTrans!=null)
    {
    cmd.SelectCommand.Transaction=myTrans;
    }
    cmd.Fill(ds,StrTableName);
    log.Info(StrSql);
    }
    catch(SqlException eErr)
    {
    conn.Close();
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    log.Info(eErr.Message);
    log.Info(eErr.StackTrace);
    log.Info(eErr.TargetSite);
    SqlErrorHandler(eErr);
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    }
    return ds;
    }

    public  void ConnectDB()
    {
    try
    {
    if(conn!=null)
    {
    conn.Close();
    }
    conn =new SqlConnection(strDSN);
    conn.Open();

    }
    catch(SqlException eErr)
    {
    conn.Close();
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    log.Info(eErr.Message);
    log.Info(eErr.StackTrace);
    log.Info(eErr.TargetSite);
    errMsg="Connection Error"+eErr.Message.ToString();
    log.Info("◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆");
    }
    } private  void SqlErrorHandler(SqlException E)
    {
    try
    {
    switch(E.Number)
    {
    case 170:
    errMsg = "请您检查输入是否规范!"; //
    errMsg = "[" +E.Number.ToString()+"]"+ E.ToString()+"---"+StrSql;
    break;
    case 128:
    errMsg = "输入的数据格式有问题!"; //譬如整型被输入了字母
    errMsg = "[" +E.Number.ToString()+"]"+ E.ToString()+"---"+StrSql;
    break;
    case 241:
    errMsg = "日期输入格式有问题!正确格式举例:2002-03-09";
    break;
    case 2627:
    errMsg = "输入的数据重复";
    errMsg = "[" +E.Number.ToString()+"]"+ E.ToString()+"---"+StrSql;
    break;
    case 8152:
    errMsg = "输入的数据太长,请你最好缩写所要填写的数据";
    errMsg = "[" +E.Number.ToString()+"]"+ E.ToString()+"---"+StrSql;
    break;
    case 547:
    errMsg = "您要操作的数据已经被其它数据使用!";
    errMsg = "[" +E.Number.ToString()+"]"+ E.ToString()+"---"+StrSql;
    break;
    case 515:
    errMsg = "请将重要信息填写完整";
    errMsg = "[" +E.Number.ToString()+"]"+ E.ToString()+"---"+StrSql;
    break;
    default:
    errMsg="意外错误,请与开发商联系";
    errMsg = "[" +E.Number.ToString()+"]"+ E.ToString()+"---"+StrSql;
    break;
    }
    }
    catch (System.Exception e)
    {
    errMsg=e.ToString();
    return ;
    }
    }
    //向数据库中插入时候,需要调用此发放转化
    public string ToHtml(string str)
    {
    str=str.Replace("'","''");
    str=str.Replace("&", "&");
    str=str.Replace("<", "&lt;");
    str=str.Replace(">", "&gt;");
    str=str.Replace("\r\n", "<br>");
    str=str.Replace("\n", "<br>");
    str=str.Replace("\t", "    ");
    str=str.Replace(" ", "&nbsp;");
    return(str);
    }
    //从数据库中读取数据到文本框进行编辑的时候调用此方法
    public string ToTxt(string str)
    {
    str=str.Replace("''","'");
    str=str.Replace( "&amp;","&");
    str=str.Replace("&lt;","<");
    str=str.Replace("&gt;",">");
    str=str.Replace("<br>","\r\n");
    str=str.Replace("<br>","\n");
    str=str.Replace("    ","\t");
    str=str.Replace("&nbsp;"," ");
    return(str);
    }
      

  3.   

    //以下是更新的存储过程
    public int ExecuteProc(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
    {
    int result;
    try
    {
    SqlCommand command = BuildIntCommand( storedProcName, parameters );
    rowsAffected = command.ExecuteNonQuery();
    result = (int)command.Parameters["ReturnValue"].Value;
    return result;
    }
    catch(SqlException e)
    {
    this.SqlErrorHandler(e);
    rowsAffected=0;
    return 0;
    }


    }
    //组装存储过程的参数
    private SqlCommand BuildIntCommand(string storedProcName, IDataParameter[] parameters)
    {
    SqlCommand command = BuildQueryCommand( storedProcName, parameters ); command.Parameters.Add( new SqlParameter ( "ReturnValue",
    SqlDbType.Int,
    4,
    ParameterDirection.ReturnValue,
    false,
    0,
    0,
    string.Empty,
    DataRowVersion.Default,
    null )); return command;
    }
    private SqlCommand BuildQueryCommand(string storedProcName, IDataParameter[] parameters)
    {
    SqlCommand command = new SqlCommand( storedProcName, conn );
    command.CommandType = CommandType.StoredProcedure; foreach (SqlParameter parameter in parameters)
    {
    command.Parameters.Add( parameter );
    }
    return command;
    } public string ErrorMessage
    {
    get 
    {
    return errMsg;
    }
    set
    {
    errMsg=value;
    }
    }
    public static string StrDSN
    {
    get 
    {
    return strDSN;
    }
    set
    {
    strDSN=value;
    }
    }

    }
      

  4.   

    这是出错的Business曾函数
    /// <summary>
    /// 根据新闻ID得到新闻的详细信息
    /// </summary>
    /// <returns></returns>
    public static DataSet GetNewsDetailsByNewsID(int n_ID)
    {
    try
    {
    StringBuilder stringBuilder = new StringBuilder() ;

    stringBuilder.Append("SELECT " );
    stringBuilder.Append("TOP 1 * " );
    stringBuilder.Append("FROM " );
    stringBuilder.Append(" LinkThinkGR001 " );
    stringBuilder.Append("WHERE " );
    stringBuilder.Append("  ID = "+n_ID );
    //这里根据ID 查询就不需要AGenre="+LinkThink.Util.CNewsTableGenre.NEWS.ID了

    dbObject.ConnectDB();
    DataSet ds = dbObject.GetData("LinkThinkGR001",Util.ToSafeString(stringBuilder));
    dbObject.Close();
    return ds;
    }
    catch(Exception err)
    {
    dbObject.Close();
    LinkThink.Util.ErrorMessageLog.SetErrorMessage(err) ;
    throw err;
    }
    }
      

  5.   

    在finally内检测datareader和connection是否关闭 否 则关闭它!!
      

  6.   

    我特地加了if(conn.State.ToString().ToUpper()  != "Open".ToUpper())conn.Open() ;
    来打开数据库啊
      

  7.   

    reader和connection的close方法调用前还要看看他们是不是null
      

  8.   

    Void InternalClose(Boolean) where is this method ?这个函数不是我的是。net的
      

  9.   

    try catch一下,然后断点调试跟踪一下,就知道了
      

  10.   

    我特地加了if(conn.State.ToString().ToUpper()  != "Open".ToUpper())conn.Open() ;
    来打开数据库啊这句话不对,应该是:
    if(conn.State = ConnectionState.Closed )conn.Open() ;
    下面finally中还要添加类似的检查
      

  11.   

    realsnow(真雪无香/抵制日货(菜C++鸟)) if(conn.State = ConnectionState.Closed )conn.Open() ;不能写Closed 还有其他状态如正在查询
      

  12.   

    日志里就记着
    ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
    ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
    异常的消息:内部连接致命错误。
    引发当前异常的方法:System.Data.SqlClient.SqlDataReader ExecuteReader(System.Data.CommandBehavior, System.Data.SqlClient.RunBehavior, Boolean)
    ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
    异常的消息:未将对象引用设置到对象的实例。
    引发当前异常的方法:Void InternalClose(Boolean)
      

  13.   

    关闭之前先试试
    SqlCommand.Cancel()方法
      

  14.   

    试试将Connect Timeout时间设置长点
      

  15.   

    try catch,在finally内关闭datareader和connection!
      

  16.   

    你的工程我看了,发现其中使用了static的字段,在使用这种字段的时候需要考虑是否有并发的问题,如果有并发的问题请将该变量lock或者将该变量改成非static的。