各位高手,我碰到了一个奇怪的问题:
在WIN7环境下,在WINFORM界面上一旦使用EXCEL Interop 操作EXCEL后,在后台线程里就连接不上SQL SERVER 2005了。如果不操作EXCEL Interop,则一点问题也没有。
不知道各位有没有碰到过,谢谢!

解决方案 »

  1.   

    请说明一下你的Visual Studio 版本、Microsoft.Office.Interop.Excel 版本。
      

  2.   

    Visual Studio 2008
    .net 2.0
    Microsoft.Office.Interop.Excel 11
      

  3.   

    Error:2011/9/1 20:51:32--------------在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 应用程序没有调用 WSAStartup,或者 WSAStartup 失败。):   在 AlarmsViewer.Form1.SQLselect(String strSQL, SqlConnection connection, String tablename)
       在 AlarmsViewer.Form1.SelectData(SqlConnection connection_data)
       在 AlarmsViewer.Form1.GetDataFromDB()
       在 AlarmsViewer.Form1.Search_sqldata()
    Error:2011/9/1 20:52:08--------------在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接):   在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
       在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
       在 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
       在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
       在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
       在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
       在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
       在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
       在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
       在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
       在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
       在 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
       在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       在 System.Data.SqlClient.SqlConnection.Open()
       在 AlarmsViewer.Form1.GetDataFromDB()
       在 AlarmsViewer.Form1.Search_sqldata()
      

  4.   

    如果取消Pooling后,则报:Error:2011/9/1 21:07:09--------------在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接):   在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
       在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
       在 System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
       在 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
       在 System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
       在 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
       在 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
       在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
       在 System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
       在 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
       在 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
       在 System.Data.SqlClient.SqlConnection.Open()
       在 AlarmsViewer.Form1.GetDataFromDB()
       在 AlarmsViewer.Form1.Search_sqldata()
      

  5.   

    Error:2011/9/1 20:51:32--------------在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0
    这个错一般是数据库没有打开才会爆的错啊
      

  6.   

      public Form1()
            {
                InitializeComponent();            MyLog.Create(AppHelper.GetFullPath("alarmlogs.log"));            if (!init())
                    this.Close();
                inittimer();            thread1 = new Thread(new ThreadStart(Search_sqldata));            thread1.Start();            MyLog.Write(LogLevelType.Info, "线程启动");
            }
    public void Search_sqldata()
            {
                while (true)
                {
                    mut.WaitOne();
                    try
                    {                    GetDataFromDB();
                       
                        dberror = false;
                    }
                    catch (Exception e)
                    {
                        MyLog.Write(LogLevelType.Error, e.Message + ":" + e.StackTrace);
                        dberror = true;                }
                    mut.ReleaseMutex();
                    if (autoEvent.WaitOne(1000, true))
                    {
                        MyLog.Write(LogLevelType.Info, "event signaled");
                        autoEvent1.Set();
                        return;                }
                    else
                    {
                        //MyLog.Write(LogLevelType.Info, "event timeout");
                    }
                    Thread.Sleep(int.Parse(Config.GetTime()) * 1000);
                }
            }
    private void GetDataFromDB()
            {
                SqlConnection conn = null;
                conn = new SqlConnection(connstring);
                conn.Open();            SelectData(conn);            conn.Close();
            }
      

  7.   

    LZ那么大个错误都看到啊?
     SqlConnection conn = null;
      conn = new SqlConnection(connstring);
      conn.Open();  SelectData(conn);  conn.Close();
    你贴出来的代码我就没看见connstring赋值了;
    LZ你可以这样写
     SqlConnection conn =new  SqlConnection("连接数据库");
      

  8.   

    是另外一个COM DLL的问题,有冲突.结贴.