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

解决方案 »

  1.   


    --去C#版块问一下
    c#
    go
      

  2.   

    C#也问了,考虑是不是可能SQL SERVER的BUG?
      

  3.   

    把 SQLSERVER 也 Interop 了?
      

  4.   

    SQLSERVER没有Interop ,用的是System.Data.SqlClient,
      

  5.   

    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()
      

  6.   

    如果取消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()
      

  7.   

    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();
      }