我有一个简单的winforms实用程序,它使用以下代码检测可用的数据库提供程序:
var test = System.Data.Common.DbProviderFactories.GetFactoryClasses();
这适用于为64位或32位体系结构构建64位或32位提供程序,但有什么方法可以在构建时为64位和32位提供程序64位?由于这是一个用于测试连接的实用程序,因此需要两种体系结构。
答案 0 :(得分:0)
我使用以下代码来获取64位代码中的32位提供程序。使用相同的方法在32位代码中获得64位提供程序。我不确定这段代码究竟有多普遍,但它对我尝试的每台机器都有效。
_dtProviders = DBCore.GetAvailableProviders(); // Col 2 is Name, Col 1 is description
List<string> providers = new List<string>();
string version = System.Runtime.InteropServices.RuntimeEnvironment.GetSystemVersion();
if (Environment.Is64BitProcess)
{
foreach (DataRow item in _dtProviders.Rows)
{
providers.Add(item.ItemArray[2].ToString());
}
string fPath = "C:\\Windows\\Microsoft.NET\\Framework\\" + version + "\\Config\\machine.config";
if (File.Exists(fPath))
{
XmlDocument doc = new XmlDocument();
doc.Load(fPath);
XmlNode node = doc.SelectSingleNode("//configuration//system.data//DbProviderFactories");
foreach (XmlNode nod in node.ChildNodes)
{
var attr = nod.Attributes["invariant"].Value;
if (attr != null)
{
if (!providers.Contains(attr))
{
providers.Add(attr + " (32 Bit)");
}
}
}
}
else
{
textBox1.Text = "Warning: Could not locate machine config file load 32-Bit providers. No file located at '" + fPath + "'" + Environment.NewLine + Environment.NewLine;
}
}