导航
  • 主页
  • C#综合技术
  • C#互联网桌面应用
  • AppLauncher
  • WinForm
  • WPF
  • 问答

“System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常。

呦呦 2011-05-09 04:10:18
System.TypeInitializationException: “System.Data.SqlClient.SqlConnection”的类型初始值设定项引发异常。 ---> System.TypeInitializationException: “System.Data.SqlClient.SqlConnectionFactory”的类型初始值设定项引发异常。 ---> System.TypeInitializationException: “System.Data.SqlClient.SqlPerformanceCounters”的类型初始值设定项引发异常。 ---> System.Configuration.ConfigurationErrorsException: 配置系统未能初始化 ---> System.Configuration.ConfigurationErrorsException: 无法识别的配置节 EncryptedData。 (D:\Item\C#操作XML\EncryptConfig\EncryptConfig\bin\Debug\EncryptConfig.vshost.exe.Config line 2)
在 System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
在 System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
在 System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
在 System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
--- 内部异常堆栈跟踪的结尾 ---
在 System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
在 System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName)
在 System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
在 System.Configuration.ConfigurationManager.GetSection(String sectionName)
在 System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
在 System.Diagnostics.DiagnosticsConfiguration.GetConfigSection()
在 System.Diagnostics.DiagnosticsConfiguration.Initialize()
在 System.Diagnostics.DiagnosticsConfiguration.get_SwitchSettings()
在 System.Diagnostics.Switch.InitializeConfigSettings()
在 System.Diagnostics.Switch.InitializeWithStatus()
在 System.Diagnostics.Switch.get_SwitchSetting()
在 System.Diagnostics.TraceSwitch.get_Level()
在 System.Data.ProviderBase.DbConnectionPoolCounters..ctor(String categoryName, String categoryHelp)
在 System.Data.SqlClient.SqlPerformanceCounters..ctor()
在 System.Data.SqlClient.SqlPerformanceCounters..cctor()
--- 内部异常堆栈跟踪的结尾 ---
在 System.Data.SqlClient.SqlConnectionFactory..cctor()
--- 内部异常堆栈跟踪的结尾 ---
在 System.Data.SqlClient.SqlConnection..cctor()
--- 内部异常堆栈跟踪的结尾 ---
在 System.Data.SqlClient.SqlConnection..ctor()
在 System.Data.SqlClient.SqlConnection..ctor(String connectionString)
在 BLL.BLLOrder.GetBookingSet(EntityLOrder obj, Int32 GoodsID) 位置 D:\Item\C#操作XML\EncryptConfig\BLL\BLLOrder.cs:行号 21


我是把这个项目.exe.config给加密后,在运行程序时解密连接数据库(注:只是程序解密,并没用覆盖原文件),如果覆盖原配置文件,程序是没有问题的,但是如果不覆盖则出现这种问题,请高手说说这个问题是怎么回事,应该怎么改?
...全文
1866 点赞 收藏 23
写回复
23 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
呦呦 2011-05-14
引用MSDN版主:肖小勇
“我看到你的程序,这并非是你加密或解密有问题,也不是数据连接不正确的问题。而是你加密后系统初始配置文件时系统并不认识你的加密节点 EncryptionMethod

建议你将这部分内容写了非 app.config 的单独文件中。”

感谢这位老大!!
回复
蝶恋花雨 2011-05-12
。。。要不就一直加密。然后到连接数据库的类里面给解密了。到时候发布项目都是DLL。客户肯定看不到。
要不就别加密。
回复
呦呦 2011-05-12
可是如果把配置文件给解密了,客户不就看到了吗?那这个加密解密就没意义了吧?
回复
蝶恋花雨 2011-05-12
也就是初始化运行窗体则配置文件字符串时加密的。运行起来的话则解密。就是config xml add节点的connectionString 内容 改成解密的。
回复
蝶恋花雨 2011-05-12
我解密了,但是只是从程序上解密取出连接串,但是没有覆盖原配置文件

你没覆盖原配置文件。这是你运行的依旧是加密的链接字符串。但是你解密成 <add name="connectionStr" connectionString="server=.;user id=sa;password=;database=webFormDemo;" providerName="System.Data.SqlClient" />
这样的了。肯定会报异常。解密应该把config里面的链接改成解密后的。就是改config xml add节点的connectionString 内容
回复
呦呦 2011-05-11
http://download.csdn.net/source/3269135

这是我写的小程序,请大家帮忙改改错!!
回复
呦呦 2011-05-11
[Quote=引用 13 楼 woyaowenzi 的回复:]
你无非就是想解密后,拿到相关数据,然后再去连SQL对吧。
你解密后,拿到的应该是存放在内存中的XML,这时候把需要的数据全取出来,然后执行SQL不行吗?
[/Quote]
对呀,我就是取出连接串,再new SqlConnection,结果就在这个new 的时候报这个错,我下了断点确实连接串已经取出来了!
回复
悠然清风 2011-05-10
能不能自己做一个密钥 然后给客户公钥 让他们来进行运行呢。一般收费类软件的都是采用这样的机制,就你们自己知道密钥,相对是很安全的。
回复
哥本哈根 2011-05-09

//手工敲的 有误见谅
public static string connectionStr=ConfigrationManager.ConnectString["connectionStr"].ConnectStrings;
SqlConnection conn = new SqlConnection(connectionStr);

是不是应该先把上面的这句写上呢 就是解密以后的
回复
哥本哈根 2011-05-09

//手工敲的 有误见谅
public static string connectionStr=ConfigrationManager.ConnectString["connectionStr"].ConnectStrings;
SqlConnection conn = new SqlConnection(connectionStr);

是不是应该先把上面的这句写上呢 就是解密以后的
回复
woyaowenzi 2011-05-09
你无非就是想解密后,拿到相关数据,然后再去连SQL对吧。
你解密后,拿到的应该是存放在内存中的XML,这时候把需要的数据全取出来,然后执行SQL不行吗?
回复
呦呦 2011-05-09
[Quote=引用 11 楼 hklinfeng 的回复:]
这个问题我遇到过, 就是没有获取到连接字符串,或者连接字符串错误.LZ仔细调试下,应该很快能解决
[/Quote]
你也是加密后,再解密连接串吗?
回复
hklinfeng 2011-05-09
这个问题我遇到过, 就是没有获取到连接字符串,或者连接字符串错误.LZ仔细调试下,应该很快能解决
回复
呦呦 2011-05-09
[Quote=引用 9 楼 tsapi 的回复:]
你能把sql连接语句看一下拿出来吗?或者你看看你的服务名是不是.号,有的可能要加.\\sqlexpress。具体的到运行里输入services.MSC下看看你的sql服务名称。这个不应该啊!!!
[/Quote]

如果是因为连接串的问题,那么如果我的程序是解密后覆盖配置文件了,这样运行就不会出错,可是如果不覆盖就会出错,出错位置:SqlConnection conn = new SqlConnection(connectionStr)
回复
Daqing 2011-05-09
你能把sql连接语句看一下拿出来吗?或者你看看你的服务名是不是.号,有的可能要加.\\sqlexpress。具体的到运行里输入services.MSC下看看你的sql服务名称。这个不应该啊!!!
回复
呦呦 2011-05-09
[Quote=引用 7 楼 tsapi 的回复:]
server=.;uid=sa;pwd=;database=webFormDemo;"
[/Quote]

改过了,还是报这个错
回复
Daqing 2011-05-09
server=.;user id=sa;password=;database=webFormDemo;"

server=.;uid=sa;pwd=;database=webFormDemo;" 
回复
呦呦 2011-05-09
解密后的配置文件

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections/>
<!--数据库联接字符串-->
<connectionStrings>
<add name="connectionStr" connectionString="server=.;user id=sa;password=;database=webFormDemo;" providerName="System.Data.SqlClient" />
</connectionStrings>
<!--应用程序设置-->
<appSettings>
<add key="providerName" value="System.Data.SqlClient"/>
</appSettings>
</configuration>
回复
ronaltn 2011-05-09
连接字符串给的不对
回复
呦呦 2011-05-09
如果把配置文件解密了,那客户不就能看到程序配置了?所以我们就是想,即使程序运行了,也要配置文件加密,只是在用到配置时,在不覆盖的情况下取出解密后的数据
回复
发动态
发帖子
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
社区公告

全世界最好的语言,没有之一.