如何从 .net core 连接到 Sybase 数据库

Posted

技术标签:

【中文标题】如何从 .net core 连接到 Sybase 数据库【英文标题】:How to connect to Sybase database from .net core 【发布时间】:2017-09-01 18:49:04 【问题描述】:

我正在尝试从 .net 核心连接到 Sybase 数据库,但我没有找到任何好的库。有人可以建议库连接到 Sybase 吗?

【问题讨论】:

没有来自 Sybase 本身的消息。您可能需要检查第三方供应商。 【参考方案1】:

能否使用 Sybase 客户端或 Sybase SDK for Developers 附带的 ODBC 驱动程序?

【讨论】:

能否提供一些示例,我们如何实施? 我不知道 .net 核心。如果您知道 .Net 核心可以使用 ODBC,您可以安装适用于 Windows 的 Sybase 客户端或适用于 ASE 开发人员的 SDK(可在 sap.com 上获得)。在您的 Windows 机器上安装后,您将在 Windows 上打开“ODBC 数据源管理器”以定义您与 Sybase ASE 数据库的连接源。 archive.sap.com/discussions/thread/3565945 我们需要在 Linux 服务器上运行应用程序。你对 Linux 服务器中的 ODBC 有什么想法吗? 看起来可以在 Linux 上安装 Sybase ODBC 驱动程序:dba.stackexchange.com/questions/162029/… 我们对 ODBC 进行了很好的破解,但不知道如何从我们的存储过程中获取返回值。 ODBC 认为这是一个语法错误。最后,我们为 .NET Core 编写了自己的 ADO.NET 驱动程序:github.com/DataAction/AdoNetCore.AseClient【参考方案2】:

我已将 MSA.NetCore.ODBC 与 Dapper 一起用于我的测试 .Net Core 2.0 项目。

using System.Collections.Generic;
using System.Data;
using System.Data.Odbc;
using Dapper;

...
public IEnumerable<Book> GetBooks()

    using (IDbConnection dbConnection = new OdbcConnection("your_db_connection"))
    
        IEnumerable<Book> books = dbConnection.Query<Book>("select * from books");

        return books;
    

【讨论】:

由于某种原因,行数是正确的(显然连接很好),但所有列都返回 null。有什么想法吗? 使用 MSA.NetCore.ODBC 连接到 sybase 没有问题,但不知何故,Dapper 返回的所有列都是空的,而行数是正确的。我最终使用了 Nicholas Sizer 在下面回答的 System.Data.Odbc。不应该对此答案投票。【参考方案3】:

您有几个连接到 .net core 中的 ASE 数据库的选项:

    为 Sybase 数据库设置 ODBC 数据源并在 nuget 上使用 System.Data.Odbc 命名空间/包。此软件包目前处于预发布阶段,目标为 .net core 2.0+。 如果您无法升级到 2.02.1,则此选项不可行。 有一段时间我尝试使用这个包,但在从过程调用中检索返回值时遇到了问题。此外,缺乏对命名参数的支持也很烦人。 在 nuget 上使用 AdoNetCore.AseClient 命名空间/包。 我开始写这篇文章是因为我对使用 ODBC 感到沮丧,并且没有其他选择 这旨在支持.net core 1.01.12.0(以及发布时的2.1)和framework 4.6。支持4.6 的原因是它可以直接替代。 如果您想阅读资源/文档并确定它是否适合您,请联系 available on github。

归根结底,这两个包都实现了各自的 ADO.NET 接口(@98​​7654336@、IDbCommand 等),因此设置它们的 C# 代码将非常相似:

//System.Data.Odbc style
using(var connection = new OdbcConnection(...))
using(var commmand = connection.CreateCommand())

    connection.Open();
    //command stuff, note: named parameters unsupported


//AdoNetCore.AseClient style
using(var connection = new AseConnection(...))
using(var commmand = connection.CreateCommand())

    connection.Open();
    //command stuff

【讨论】:

这应该是答案 @Nicholas Sizer 谢谢!我如何将AdoNetCore.AseClient 与 EF 一起使用? @FelipeAugusto 通过实现兼容的 EF 数据提供程序 Instructions on MSDN。 还需要加providerName="iAnywhere.Data.SQLAnywhere"吗?

以上是关于如何从 .net core 连接到 Sybase 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何从 AWS Lambda .Net Core 应用程序 API 连接到 AWS RDS SQL Server?

如何从 asp.net core webapi 获取数据到连接到数据库的 angular 11.0.0。我试图这样做,但它返回空记录

如何使用 Java 8 连接到 Sybase Advantage Local DB

从 VBScript 连接到 Sybase 时出错 - 内部客户端库错误

如何通过 PHP 连接到 Sybase

如何在java中连接到sybase的优势数据库