Есть ли в .Net Framework 4.0 возможности для подключения к DB2? - PullRequest
6 голосов
/ 11 июня 2009

Мне нужно знать, есть ли какая-либо возможность подключения к базе данных DB2 из .net в .Net framework 4.0

РЕДАКТИРОВАТЬ: - Я хотел бы знать, есть ли какой-либо поставщик DB2

Ответы [ 5 ]

17 голосов
/ 06 января 2010

Да, семейство драйверов IBM.Data.DB2 (вместе взятых в IBM.Data.DB2.dll, я считаю) должно прекрасно работать с .NET, если вы устанавливаете драйверы на свой компьютер для разработки.

Кроме того, я смог заставить его успешно работать с VS2010Beta и EF4Beta2, несмотря на отсутствие надстроек Visual Studio для VS2010 (на данный момент.) Если драйверы уже установлены на вашем компьютере, вам просто нужно добавить запись для него в файл machine.config для cl .NET 4.0.

РЕДАКТИРОВАТЬ: Пример разметки machine.config следует. Первоначально в файле конфигурации была только одна запись фабрики провайдеров БД SQL-сервера. Предполагая, что на вашем компьютере установлен IBM.Data.DB2, вы можете сделать то, что я сделал, и просто открыть файл machine.config вашего 2.0 и скопировать / вставить записи для DB2. Полное раскрытие, я, честно говоря, не знаю, требуются ли все 4, но чистая установка 9.7fp1 вставила все четыре записи в мой 2.0 machine.config, поэтому я продолжил и скопировал их все в 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.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. При его установке автоматически обрабатываются записи DbProviderFactories 4.0 machine.config. Если вы ранее редактировали записи вручную, как описано выше, вы захотите закомментировать / удалить их как часть ваших деинсталляций v9.7fp3 (и более ранних версий).

3 голосов
/ 28 апреля 2011

Я также пытаюсь использовать Visual Studio 2010 для соединения с DB2 через Entity Framework. Я попробовал то, что сделал kdawg: Я установил пакет драйверов IBM Data Server Я установил надстройки IBM Visual Studio 2008

Затем я попытался создать модель данных объекта ADO.NET в своем проекте 2008 года, а затем преобразовать ее в 2010, но соединение с базой данных не будет работать. Я получаю следующую ошибку: ОШИБКА [42968] [IBM] SQL1598N Попытка подключения к серверу базы данных не удалась из-за проблемы с лицензированием. SQLSTATE = 42968

По-видимому, согласно этому форуму , IBM не предоставляет драйвер бесплатно. У вас должна быть установлена ​​и лицензирована DB2 Connect. Это около 12 000 долларов.

Я решил попробовать что-то еще.

3 голосов
/ 11 июня 2009

Что ты имеешь в виду? Вам нужно что-то конкретное для .NET 4.0 или вы хотите знать, можем ли мы соединиться с DB2 с помощью .NET Framework или нет.

Если позже, да, вы можете. Класс OleDBConnection (который также доступен в .NET 2.0 и .NET 3.5) имеет свойство ConnectionString, в котором вы задаете данные поставщика. Вам просто нужно указать строку подключения провайдера для вашего провайдера DB2, и вы должны быть в порядке.

1 голос
/ 30 августа 2011

Также вы можете декомпилировать lib с помощью ildasm.exe в il.il

Затем скомпилируйте с использованием SDK 7 ilasm.exe /RESOURCE=...\IL.res ... \ il.il /OUTPUT=...\Ibm.Data.Db2.Net4.dll / DLL

0 голосов
/ 18 июня 2018

Я также искал, чтобы загрузить драйверы для подключения DB2. Здесь - список всех клиентских драйверов DB2 с их версиями.

Информация для подключения к DB2 доступна здесь . На случай, если в будущем ссылка может быть неактивной, поэтому я публикую пример кода здесь.

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();
        }
    }
}

Если кто-либо не может найти сервер баз данных DB2 для ознакомления, здесь - это список бесплатных пробных версий. Также Developer Community Edition бесплатно для неограниченного использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...