我有一个在多个客户端站点上运行的应用程序。我必须在这些位置(SQL Server、DB2、Oracle)支持不同的 DBMS。我正在将应用程序从具有基于 ODBC 的数据层的 VC++ 6.0 转换为 Visual Studio 2012,并希望使用实体框架(数据库优先)。我在示例应用程序中在运行时更改数据库提供程序时遇到了麻烦。我将 app.config 中的连接字符串从 SQL Server 更改为 DB2 连接字符串,并更改了默认连接工厂。现在,当我运行程序时,我可以连接到数据库(至少没有错误),但是当我遍历 linq 结果时,我得到了异常:
无法将“IBM.Data.DB2.DB2Connection”类型的对象转换为“System.Data.SqlClient.SqlConnection”类型
这是程序代码:
private void btnList_Click(object sender, EventArgs e)
{
using (var ListBill = new LB402_TestEntities())
{
var queryGroups = from Groups in ListBill.LB_Group
select Groups.GroupName;
foreach (string name in queryGroups)
{
lbGroups.Items.Add(name);
}
}
}
app.config 的修改部分是:
<defaultConnectionFactory type="IBM.Data.DB2.Entity.DB2ConnectionFactory, EntityFramework" />
<add name="LB402_TestEntities" connectionString="metadata=res://*/LB402.csdl|res://*/LB402.ssdl|res://*/LB402.msl;provider=IBM.Data.DB2;provider connection string="Server=db210:50000;Database=LISTBILL;uid=uuuuu;pwd=ppppp;"" providerName="System.Data.EntityClient" />
从我的搜索和阅读来看,我似乎应该能够做到这一点,但我显然错过了一些东西。