尊敬的专业人士请帮助我解决以下问题。 在我的.NET C#应用程序中,有一个代码:
SqlConnection connection = new SqlConnection( SQLCONNECTION_STRING );
它在我的开发计算机上运行得非常好,但在Windows 2003服务器上引发了异常。该应用程序通过CGI运行并具有“完全信任”级别。 我已经尝试了几个连接字符串,我认为字符串不会导致问题,因为即使这个代码也会出现异常:
SqlConnection connection = new SqlConnection();
感谢。
我发现了两个奇怪的事实:
所以我猜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()
即使是无参数构造函数也会产生异常。所以我不认为问题出在连接字符串中。我可以看到堆栈跟踪讲述了“路径中的非法字符”。所以我会尝试深入了解并找出答案。但也许有人已经知道解决方案。
答案 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)
检查内部异常会告诉您配置文件的确切问题,您可能需要深入了解。