SqlConnection() 无参数异常
Posted
技术标签:
【中文标题】SqlConnection() 无参数异常【英文标题】:SqlConnection() parameterless exception 【发布时间】:2019-02-08 07:52:52 【问题描述】:我在尝试初始化 SqlConnection 实例时遇到此错误。
首先我尝试使用 ConnectionString 参数,现在我看到它即使在构造函数中没有它也会发生。该代码曾经可以工作,但在我更换PC后失败,所以我想它与Windows设置(Windows 7)或用户权限有关 我的代码:
using (SqlConnection conn = new SqlConnection())
SqlConnectionStringBuilder builder =
new SqlConnectionStringBuilder("Server=server1;Integrated Security=SSPI;Initial Catalog=db1");
conn.ConnectionString = builder.ConnectionString;
我已经尝试过按照一些人的建议来回切换目标框架但没有结果(目前使用 4.5.2)
更新
使用行抛出的异常:
System.TypeInitializationException 发生 HResult=0x80131534 Message='System.Data.SqlClient.SqlConnection' 的类型初始化器 抛出异常。来源= StackTrace:在 System.Data.SqlClient.SqlConnection..ctor() 处 Reg_CB_Report.Program.GetSql(String ExecText) 在 H:\MY\code\c#\Reg_CB_Report\Reg_CB_Report\Program.cs:第 228 行 Reg_CB_Report.Program.Main(String[] args) 在 H:\MY\code\c#\Reg_CB_Report\Reg_CB_Report\Program.cs:第 83 行
内部异常1:ArgumentException:参数不正确。 (来自 HRESULT 的异常:0x80070057 (E_INVALIDARG))
更新2
App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2"/>
</startup>
</configuration>
尝试重新创建它 - 没有结果
堆栈跟踪:
StackTrace " 在 System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone& zone, StringHandleOnStack retUrl)\r\n 在 System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence()\r\n 在 System.Security。 Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType)\r\n at System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType)\r\n at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type)\r\n at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed)\r\n 在 System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType)\r\n 在 System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type类型)\r\n 在 System.Security.Policy.Evidence.RawEvidenceEnumerator.MoveNext()\r\n 在 System.Security.Policy.Evidence.EvidenceEnumerator.MoveNext()\r\n 在 System.Configuration.ClientConfigPaths.GetEvidenceInfo (AppDomain appDoma in, String exePath, String& typeName)\r\n at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath)\r\n at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig)\r\ n 在 System.Configuration.ClientConfigPaths.GetPaths(String exePath, Boolean includeUserConfig)\r\n 在 System.Configuration.ClientConfigurationHost.RequireCompleteInit(IInternalConfigRecord 记录)\r\n 在 System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg , Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)\r\n 在 System.Configuration.BaseConfigurationRecord.GetSection(String configKey)\r\n 在 System.Data.SqlClient.SqlConnection..cctor()"字符串
【问题讨论】:
异常的信息是什么? 它的类型初始化器doesn't really do much,但它确实尝试访问配置。你会认为足够损坏的配置会完全停止你的程序,但也许值得查看你的配置,看看那里是否有任何可疑之处。 @Damien_The_Unbeliever 我根本没有使用它,所以它只有一个带有框架版本的标签,已经尝试删除它并重新创建 内部异常是否有堆栈跟踪以及消息? 为什么要在连接字符串之前创建连接对象?其实在不修改初始连接字符串的情况下,为什么还要使用SqlConnectionStringBuilder
呢?
【参考方案1】:
您似乎正在尝试在最旧的受支持运行时上使用最新版本的 SqlClient NuGet 包 (4.6)。也可能涉及缺少的安全更新。
异常中提到的类型初始化器是static constructor,它试图加载SqlColumnEncryptionEnclaveProviders
配置部分。我也从未遇到过该部分。
一种选择是返回到早期可用的 SqlClient 包。另一种选择是目标 .NET 4.7.2 及更高版本。最后,您可以自己添加缺少的部分,如指向 SharePoint 错误的链接所示:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configSections>
<section name="SqlColumnEncryptionEnclaveProviders"
type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
</configuration>
这不是 SqlClient 4.6 引入的唯一错误。还有一个,同样涉及无参数构造函数。
【讨论】:
它工作了,但不是直接,错误转移到 conn.Open(),我安装了最旧的 nuget,实际上尝试了所有方法,但重启后它开始工作以上是关于SqlConnection() 无参数异常的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SqlConnection.GetSchema 获取同义词信息?
处理SqlConnection、SqlDataReader、SqlCommand 时要捕获哪些异常?