SqlConnection抛出异常

时间:2009-10-13 10:53:10

标签: c# .net sql-server

尊敬的专业人士请帮助我解决以下问题。 在我的.NET C#应用程序中,有一个代码:

SqlConnection connection = new SqlConnection( SQLCONNECTION_STRING );

它在我的开发计算机上运行得非常好,但在Windows 2003服务器上引发了异常。该应用程序通过CGI运行并具有“完全信任”级别。 我已经尝试了几个连接字符串,我认为字符串不会导致问题,因为即使这个代码也会出现异常:

SqlConnection connection = new SqlConnection();

感谢。


我发现了两个奇怪的事实:

  1. 如果我将调试器连接到进程并简单跟踪代码,它就可以工作。
  2. 如果我从命令行运行应用程序(不是根据需要通过CGI),它可以工作。
  3. 所以我猜CGI和SqlConnection交互有问题。有人知道吗?

    感谢大家的回复。


    编辑添加:

    这是我的连接字符串: “Provider = SQLOLEDB; Data Source =(local); Initial Catalog = Users; User Id = user; Password = password;”

    我还尝试了几种可能的变体,如:http://www.connectionstrings.com/sql-server

    请在下面找到有关例外情况的信息:

    The type initializer for 'System.Data.SqlClient.SqlConnection' threw an exception.
       at System.Data.SqlClient.SqlConnection..ctor()
       at Test.Database.UpdateSQLServerDatabase(IDictionary`2 fields, String regName, StringBuilder regCode)
       at Test.Program.Run()
    
    Type: System.TypeInitializationException
    
    InnerException: System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SqlConnectionFactory' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.Data.SqlClient.SqlPerformanceCounters' threw an exception. ---> System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> System.ArgumentException: Illegal characters in path.
       at System.Security.Permissions.FileIOPermission.HasIllegalCharacters(String[] str)
       at System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess access, AccessControlActions control, String[] pathListOrig, Boolean checkForDuplicates, Boolean needFullPath, Boolean copyPathList)
       at System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess access, String path)
       at System.AppDomainSetup.VerifyDir(String dir, Boolean normalize)
       at System.AppDomainSetup.get_ConfigurationFile()
       at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)
       at System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)
       at System.Configuration.ClientConfigurationHost.get_ConfigPaths()
       at System.Configuration.ClientConfigurationHost.GetStreamName(String configPath)
       at System.Configuration.ClientConfigurationSystem..ctor()
       at System.Configuration.ConfigurationManager.EnsureConfigurationSystem()
       --- End of inner exception stack trace ---
       at System.Configuration.ConfigurationManager.EnsureConfigurationSystem()
       at System.Configuration.ConfigurationManager.GetSection(String sectionName)
       at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
       at System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()
       at System.Diagnostics.DiagnosticsConfiguration.Initialize()
       at System.Diagnostics.Switch.InitializeConfigSettings()
       at System.Diagnostics.Switch.InitializeWithStatus()
       at System.Diagnostics.Switch.get_SwitchSetting()
       at System.Diagnostics.TraceSwitch.get_Level()
       at System.Data.ProviderBase.DbConnectionPoolCounters..ctor(String categoryName, String categoryHelp)
       at System.Data.SqlClient.SqlPerformanceCounters..ctor()
       at System.Data.SqlClient.SqlPerformanceCounters..cctor()
       --- End of inner exception stack trace ---
       at System.Data.SqlClient.SqlConnectionFactory..ctor()
       at System.Data.SqlClient.SqlConnectionFactory..cctor()
       --- End of inner exception stack trace ---
       at System.Data.SqlClient.SqlConnection..cctor()
    

    即使是无参数构造函数也会产生异常。所以我不认为问题出在连接字符串中。我可以看到堆栈跟踪讲述了“路径中的非法字符”。所以我会尝试深入了解并找出答案。但也许有人已经知道解决方案。

7 个答案:

答案 0 :(得分:7)

此问题通常与配置文件中的问题有关。您可能想要重新创建它。

谢谢, Jivtesh

答案 1 :(得分:2)

当我的app.config包含空连接字符串部分时,我遇到了这个问题,就像这样;

<configuration>
    <configSections>
    </configSections>
    <connectionStrings>
    </connectionStrings>
</configuration>

从它的声音来看,你有一个同时作为控制台应用程序和Web应用程序运行的版本。这意味着您将为控制台应用程序提供app.config,为asp.net网站提供web.config

由于您有一个工作控制台应用,请尝试发现等效部分之间的差异,并更新web.config以匹配您的app.config

此外,您可能会考虑系统中固有的不同权限 - 网站可能没有连接数据库的权限,因为它以IUSR_<machinename>运行,但控制台应用程序在您自己的用户下运行凭证,您可能是机器管理员。

答案 2 :(得分:0)

尝试以下方法:

string str="Data Source=[YourServer];Initial Catalog=yourdb;User ID=sa;Password=sa;";
SqlConnection connection = new SqlConnection(str);

答案 3 :(得分:0)

对我来说,这是web.config跟踪错误配置,我有一个拼写错误的

  

System.Diagnostincs.TextWriterTraceListener

而不是

  

System.Diagnostics.TextWriterTraceListener

还有两个微量元素......修复这两个问题解决了我的问题。

答案 4 :(得分:0)

如果可以从浏览器访问该服务,请将客户端端点行为配置检查为:

<endpointBehaviors>
        <behavior name="clientEndpoint">
          <dataContractSerializer maxItemsInObjectGraph="2147483647" />
          <clientCredentials>
            <windows allowedImpersonationLevel="Delegation"/>
          </clientCredentials>
        </behavior>
</endpointBehaviors>

答案 5 :(得分:0)

SqlConnection connection = new SqlConnection();引发的错误是正确的,但是由于App.Config中的错误导致错误消息误导。

答案 6 :(得分:0)

检查内部异常会告诉您配置文件的确切问题,您可能需要深入了解。