连接已添加到连接池中.所以我关闭它,但它仍然保持身体开放.使用ConnectionString参数"Pooling = false"或静态方法MySqlConnection.ClearPool(连接)和MySqlConnection.ClearAllPools可以避免问题.请注意,问题是,当我关闭应用程序时,连接仍然存在.即使我关闭它.所以我要么根本不使用连接池,要么在关闭连接之前清除特定池,问题就解决了.我会花时间弄清楚在我的情况下什么是最好的解决方案.
感谢所有回答的人!它帮助我更好地理解了C#的概念,并从有用的输入中学到了很多东西.:)
===
我已经搜索了一段时间,并没有找到我的问题的解决方案:我是C#的新手并尝试编写一个类来使MySql Connections更容易.我的问题是,在我打开连接并关闭它之后.它仍然在数据库中打开并被中止.
我当然使用'using'语句,但是在退出程序后连接仍然是打开的并且被中止.
这是我的代码的样子:
using (DatabaseManager db = new DatabaseManager())
{
using (MySqlDataReader result = db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
{
foreach (MySqlDataReader result in db.DataReader("SELECT * FROM module WHERE Active=1 ORDER BY Sequence ASC"))
{
//Do stuff here
}
}
}
Run Code Online (Sandbox Code Playgroud)
类数据库管理器打开连接并在处理时关闭它:
public DatabaseManager()
{
this.connectionString = new MySqlConnectionStringBuilder("Server=localhost;Database=businessplan;Uid=root;");
connect();
}
private bool connect()
{
bool returnValue = true;
connection = new MySqlConnection(connectionString.GetConnectionString(false));
connection.Open();
}
public void …Run Code Online (Sandbox Code Playgroud) 再一次,我遇到了问题,这可能很容易解决.
我想扩展一个使用WiX创建的设置,以便对已安装程序的配置文件进行更改.为了做到这一点,我创建了一个CustomAction.为了能够更改配置文件,我需要知道它在CustomAction中的(install-)位置.因此,我尝试将INSTALLLOCATION和Filename 传递给我的CustomAction.这就出现了问题:CustomActionData -Attribute始终为空,安装程序抛出异常.
我的CustomAction是一个C#DLL文件:DemoDatumErzeugen.CA.dll.它包含一个DatumEintragen修改配置文件的方法.我试图以这种方式访问数据:
string path = session.CustomActionData["LOCATION"];
Run Code Online (Sandbox Code Playgroud)
这是引发异常的地方.我只得到了德国的错误信息,但它说,沿着线的东西:The supplied key was not found in the dictionary(Der angegebene Schlüssel war nicht im Wörterbuch angegeben.).
这是我尝试将属性从我的setup-script传递到自定义操作的方法:
<Binary Id="DemoDatumEinrichtenCA" SourceFile="DemoDatumErzeugen.CA.dll"/>
<CustomAction Id="DemoDatum.SetProperty" Return="check" Property="DatumEintragen" Value="LOCATION=[INSTALLLOCATION];NAME=StrategieplanConfig.xml;"/>
<CustomAction Id="DemoDatum" BinaryKey="DemoDatumEinrichtenCA" DllEntry="DatumEintragen" Execute="deferred" Return="check" HideTarget="no"/>
<InstallExecuteSequence>
<Custom Action="DemoDatum.SetProperty" After="InstallFiles"/>
<Custom Action="DemoDatum" After="DemoDatum.SetProperty"/>
</InstallExecuteSequence>
Run Code Online (Sandbox Code Playgroud)
我已经看过很多例子,它们以相同的方式完成,或者至少非常相似.我尝试了很多东西,但似乎没有什么比改变价值更有帮助<Custom Action="DemoDatum.SetProperty" After="InstallFiles"/>.CustomActionData始终为零.
我检查一下:session.CustomActionData.Count
我再次感谢任何帮助或暗示我做错了什么.
我正在尝试将两个程序集合并为一个程序集,它可以很好地工作.然而,当我尝试合并*.pdb文件时,我收到一个错误:
访问路径"F:\ Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.pdb"被拒绝.
如果我使用/ ndebug选项以跳过合并*.pdb文件,它可以正常工作.但是当然在调试时无法加载符号.起初我想在postbuild事件中调用ILMerge时,Planrechung.pdb正在使用并被锁定.我也尝试关闭VS2010并从命令行调用ILMerge,但结果保持不变.我检查过ProcessExplorer,文件上没有句柄.
这就是我称之为ILMerge的方式:
E:\ XP\Tools\ILMerge\ilmerge /targetplatform:v4,"D:\WINDOWS\Microsoft.NET\Framework\v4.0.30319"/ lib:"F:\ Fentec\Businessplan\trunk\Ausgabe\Debug\bin" /out:Planrechnung.dll"F:\ Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Planrechnung\Planrechnung.dll""F:\ Fentec\Businessplan\trunk\Ausgabe\Debug\modules\Mandantenverwaltung\Mandantenverwaltung.dll"
我错过了什么吗?如果您需要任何其他信息,请询问.
问候,
Skalli
我在.NET 4.0中开始使用WCF时遇到了麻烦.这是我的情况:
我用PHP创建了一个小型SOAP服务器.我有一个C#项目,我想在其中连接到此服务器并启动SOAP通信.
我的问题是,我不知道如何在C#中做到这一点.我找不到对WCF的正确介绍.有办法做到这一点.但我找不到合适的类和引用来添加到我的C#项目中.是否有任何教程如何在C#中实现这一目标?我搜索了很多,发现什么都没有帮助我.
我想在运行时从我的SOAP服务器加载WSDL,发出SOAP请求,检索答案并完成.但是我在哪里可以开始?关于WCF的MSDN网站只会让我更加困惑.
编辑:可能没有必要在运行时获取WSDL文件.所以不再需要了.
我使用svcutil来创建类并将其嵌入到我的项目中.我还没能测试它,因为我在MySQL数据库上遇到了一些问题(它正在运行并可以从mysql命令行工具或mysqladmin访问,但是我无法使用任何其他程序连接到它...) .一旦我知道它是否有效,我会立即报告.
编辑2:我遵循了Kevs的方法,最终结果非常好.我最后的问题是,我在DLL中使用了服务类.我需要在程序中使用DLL的app.config.在我这样做之后,效果很好.