.Net Framework 4.0是否具有连接DB2的功能

时间:2009-06-11 05:31:00

标签: .net .net-4.0

我需要知道在.Net framework 4.0中是否存在从.net连接到DB2数据库的任何功能

编辑: - 我想知道是否有任何DB2提供程序

5 个答案:

答案 0 :(得分:17)

是的,IBM.Data.DB2驱动程序系列(我相信在IBM.Data.DB2.dll中共同发现)应该可以正常使用.NET,只需在开发机器上安装驱动程序即可。

此外,我能够使用VS2010Beta和EF4Beta2成功运行,尽管缺少VS2010的Visual Studio加载项(截至此日期)。如果已经在您的计算机上安装了驱动程序,您只需要在.NET 4.0的clr。

的machine.config文件中为它添加一个条目

编辑:示例machine.config标记如下。最初,配置文件只有单个SQL Server DB Provider Factory条目。假设您的计算机上安装了IBM.Data.DB2,您可以执行我所做的操作,只需打开2.0的machine.config文件并复制/粘贴DB2的条目。完全披露,老实说我不知道​​是否所有4都是必需的,但是在我的2.0 machine.config中插入所有四个条目的9.7fp1的干净安装,所以我继续将它们全部复制到4.0 machine.config。复制/粘贴,保存文件,然后重新启动visual studio 2010,您应该能够使用存储模型定义中的信息引用EDMX中的提供程序:

<edmx:StorageModels>
  <Schema xmlns="http://schemas.microsoft.com/ado/2009/02/edm/ssdl" Namespace="BlahModel.Store" Alias="Self" Provider="IBM.Data.DB2" ProviderManifestToken="IDS/UNIX64, 11.50.0000">

请注意,我有兴趣连接到informix数据库,因此需要ProviderManifestToken值。但是,我认为不需要逐字逐句。

我的4.0 machine.config:

中的代码段
<system.data>
    <DbProviderFactories>
        <add name="Microsoft SQL Server Compact Data Provider" invariant="System.Data.SqlServerCe.3.5" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
        <add name="IBM DB2 .NET Data Provider" invariant="IBM.Data.DB2" description="IBM DB2 Data Provider for .NET Framework 2.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2, Version=9.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
        <add name="IBM Informix .NET Data Provider" invariant="IBM.Data.Informix" description="IBM Informix Data Provider for .NET Framework 2.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix, Version=9.0.0.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
        <add name="IBM DB2 .NET Data Provider 9.7.1" invariant="IBM.Data.DB2.9.7.1" description="IBM DB2 Data Provider 9.7.1 for .NET Framework 2.0" type="IBM.Data.DB2.DB2Factory, IBM.Data.DB2.9.7.1, Version=9.7.1.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />
        <add name="IBM Informix .NET Data Provider 9.7.1" invariant="IBM.Data.Informix.9.7.1" description="IBM Informix Data Provider 9.7.1 for .NET Framework 2.0" type="IBM.Data.Informix.IfxFactory, IBM.Data.Informix.9.7.1, Version=9.7.1.2, Culture=neutral, PublicKeyToken=7c307b91aa13d208" />          
    </DbProviderFactories>
</system.data>

编辑2: IBM最新的DB2驱动程序--v9.7fp4 - 极大地改进了.NET 4.0和VS2010加载项支持。它的安装将自动处理4.0 machine.config DbProviderFactories条目。如果您之前手动编辑了条目,如上所述,您将要在v9.7fp3(及更早版本)的卸载中注释掉/删除它们。

答案 1 :(得分:3)

你是什​​么意思?您需要特定于.NET 4.0的内容,或者您​​想知道我们是否可以使用.NET Framework与DB2连接。

如果是以后的情况,是的,你可以。 OleDBConnection类(在.NET 2.0和.NET 3.5中也可用)具有属性ConnectionString,您可以在其中设置提供程序的详细信息。您只需为DB2提供程序提供提供程序的连接字符串,您应该没问题。

答案 2 :(得分:3)

我也在尝试使用Visual Studio 2010通过Entity Framework与DB2连接。我尝试了kdawg做了什么: 我安装了IBM数据服务器驱动程序包 我安装了IBM Visual Studio 2008插件

然后我尝试在我的2008项目中创建一个ADO.NET实体数据模型,然后将其转换为2010,但是与数据库的连接不起作用。我收到以下错误: 错误[42968] [IBM] SQL1598N由于许可问题,尝试连接到数据库服务器失败。 SQLSTATE = 42968

显然,根据这个forum,IBM不提供免费的驱动程序。您必须安装DB2 Connect并获得许可。这大约是12,000美元。

我决定尝试别的东西。

答案 3 :(得分:1)

您也可以使用ildasm.exe将lib反编译为il.il

然后使用SDK 7进行编译 ilasm.exe /RESOURCE=...\IL.res ... \ il.il /OUTPUT=...\Ibm.Data.Db2.Net4.dll / DLL

答案 4 :(得分:0)

I was also searching to download the drivers for connecting DB2. Here is list of all client drivers of DB2 with their versions.

Information for connecting to DB2 is available here. In case the link might be dead in future, So I am posting the sample code here.

using System;
using IBM.Data.DB2;

namespace dotNetSSLTest
{
    class Program
    {
        static void Main(string[] args)
        {
            DB2Command MyDB2Command = null;
            // Use the dsn alias that you defined in db2dsdriver.cfg with the db2cli writecfg command in step 1.
            String MyDb2ConnectionString = "database=alias;uid=userid;pwd=password;"; 
            DB2Connection MyDb2Connection = new DB2Connection(MyDb2ConnectionString);
            MyDb2Connection.Open();
            MyDB2Command = MyDb2Connection.CreateCommand();
            MyDB2Command.CommandText = "SELECT branch_code, city from GOSALES.BRANCH";
            Console.WriteLine(MyDB2Command.CommandText);

            DB2DataReader MyDb2DataReader = null;
            MyDb2DataReader = MyDB2Command.ExecuteReader();
            Console.WriteLine("BRANCH\tCITY");
            Console.WriteLine("============================");
            while (MyDb2DataReader.Read())
            {
                for (int i = 0; i <= 1; i++)
                {
                    try
                    {
                        if (MyDb2DataReader.IsDBNull(i))
                        {
                            Console.Write("NULL");
                        }
                        else
                        {
                            Console.Write(MyDb2DataReader.GetString(i));
                        }
                    }
                    catch (Exception e)
                    {
                        Console.Write(e.ToString());
                    }
                    Console.Write("\t"); 

                }
                Console.WriteLine("");
            }
            MyDb2DataReader.Close();
            MyDB2Command.Dispose();
            MyDb2Connection.Close();
        }
    }
}

In case anyone is not able to find the DB2 database server for trial then here is list of free trials. Also the Developer Community Edition is free for unlimited use.