2

我需要在 C# 5.0 的 VisualStudio 2012 中使用 OLEDB 建立一个 ConnectionString,所以下面是编码的:

 SQLConn = new SqlConnection("Data Source=STX;Persist Security Info=False;
  UserID=JG0149;Password=MYPASS;Initial Catalog=LIBJG");

凭证在 STX iSeries 系统上运行良好

有许多使用 VS 2010 和 C# 4.0 的示例,但它不适用于 C# 5.0,类似于 www.connectionstring,com/as-400/ 中的示例

SQLConn = new SqlConnection("Provider=IBMDA400;Data Source=STX;User Id=JG0149; Password=MYPASS;
Default Collection=LIBJG")

但是VS2012不接受Provider参数并请求其他参数

可能有人有一个在 VS2012 中工作的 ConnectionString 以连接到 iSeries 以共享,好吗?

4

2 回答 2

3

SqlConnection专门用于 SQL Server。

为其他提供者使用OleDbConnection和相关类。

using (var connection = new OleDbConnection(
        "Provider=IBMDA400;Data Source=STX;User Id=JG0149; Password=MYPASS;Default Collection=LIBJG"))
{
    var command = new OleDbCommand("SELECT NOW() FROM SYSIBM.SYSDUMMY1", connection);
    connection.Open();
    var reader = command.ExecuteReader();
    if (reader.HasRows)
    {
        while (reader.Read())
        {
            Console.WriteLine(reader.GetString(0));
        }
        reader.Close();
    }
    connection.Close();
}

我在 Visual Studio 2012 / .NET 4.5 中验证了上述内容。


微软似乎在推动回归 ODBC 并逐步淘汰 OLE DB。

SQL Server 博客:Microsoft 与 ODBC 保持一致

市场正在从 OLE DB 转向 ODBC,着眼于支持 PHP 和多平台解决方案。

Microsoft SQLNCli 团队博客:Microsoft 正在与 ODBC 保持一致以进行本机关系数据访问

我们鼓励您在开发应用程序的新版本和未来版本时采用 ODBC。

于 2013-08-06T21:38:55.953 回答
1

我可以给你三个有效的连接字符串。我在 VS2012 中使用这些连接到 iSeries V6R1M0。

使用 IBM DB2 for i .NET 提供程序

DataSource=*ServerIP*;UserID=*user*;SchemaSearchList="*list of libraries separated by commas*";Database=*database_name*;PersistSecurityInfo=True

为 OLE DB 使用 .NET Framework 数据提供程序

Provider=IBMDA400.DataSource.1;Data Source=*ServerIP*;Persist Security Info=True;OLE DB Services=-1;User ID=*user*;Initial Catalog=*database_name*;Catalog Library List="l*ist of libraries separated by commas*"

WebService 中使用的连接

DataSource=*ServerIP*; Default Collection='';User ID=*user*; Password=*password*;Data Compression=True; Connection Timeout = 180;

在最后一个中,我既不使用SchemaSearchList也不使用Catalog Library List,因为当我们建立与 iSeries 的连接时,始终存在一个特定的库。在那个库中,我们放置了一个存储过程,我们总是在每个新连接中运行它,定义库列表。

我知道这个问题有一年的时间,但对于需要的人来说,这又是一种帮助。

更新

还有一件事,IBM Data Provider 允许您在 iSeries 上建立与 DB2 的连接而没有任何问题,但是当我们谈论 Visual Studio 集成时,它会很痛苦。

例如,直到上周我还在使用 IBM Client Access(iSeries 的客户端软件)附带的 IBM Data Provider。我可以在我的所有应用程序中建立 sql 连接,而无需 OLEDB,在 Visual Studio 2010 中但不能在 2012 年或 2013 年。

这是因为我的客户端访问是在 VS2012 之前发布的。上周我安装了客户端访问的更新,现在我已经在 VS2012 和 VS2013 上与 DB2 iSeries 建立了 sql 连接。因此,始终拥有与您的 iSeries 版本兼容的最新版本的 Client Access 很方便。

此外,当您安装 Client Access 时,请检查这些文件夹中的 machine.config 文件

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config

检查其中的DbProviderFactories标签和所有标签。Client Access 通常在安装时会保留这些格式错误。

如果可能,为了获得最佳性能,当您有一个具有托管代码的数据提供者并由制造数据库服务器的同一家公司进行优化时,不要使用 ODBC 或 OLE DB。在这种情况下,IBM 也不例外。

于 2014-09-30T15:58:20.963 回答