如何从.NET Core连接到Sybase数据库

9

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


没有来自Sybase的消息。你可能需要检查第三方供应商。 - Lex Li
4个回答

9
您有几种选项可以在 .net core 中连接 ASE 数据库:
  1. 为您的 Sybase 数据库设置 ODBC 数据源,并在 nuget 上使用 System.Data.Odbc 命名空间/包。此包目前处于预发布状态,目标是 .net core 2.0+
    • 如果您无法升级到 2.02.1,则此选项不可行。
    • 我曾尝试使用此包,但在从过程调用中检索返回值时遇到问题。此外,缺乏对命名参数的支持也相当令人恼火。
  2. 在 nuget 上使用 AdoNetCore.AseClient 命名空间/包。
    • 由于使用 ODBC 的挫败感以及没有其他选择,我开始编写这个项目。
    • 此项目旨在支持 .net core 1.01.12.0(和发布后的 2.1)和 framework 4.6。支持 4.6 是为了使其成为可替换的组件。
    • 如果您想阅读源代码/文档并确定它是否适合您,可以在 github 上获取

归根结底,这两个包都实现了 ADO.NET 接口的各自特点(IDbConnectionIDbCommand 等),因此设置它们的 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
}

1
这应该是答案。 - Weihui Guo
1
@Nicholas Sizer 谢谢!我如何在 EF 中使用 AdoNetCore.AseClient - Felipe Augusto
1
通过实现兼容的EF数据提供程序,@FelipeAugusto可以参考MSDN上的说明(https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/ef/writing-an-ef-data-provider)。 - Nicholas Sizer
还需要添加 providerName="iAnywhere.Data.SQLAnywhere" 吗? - Jeric Cruz

6

我在我的测试.Net Core 2.0项目中使用了MSA.NetCore.ODBC和Dapper。

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。有什么想法吗? - Weihui Guo
4
使用MSA.NetCore.ODBC连接Sybase没有问题,但是使用Dapper返回的所有列都为空,而行数是正确的。最终我使用了Nicholas Sizer所回答的System.Data.Odbc。不应该给这个答案点赞。 - Weihui Guo

0

现在有一个适用于 .NET Core 的新的 SQL Anywhere 驱动程序,但支持 EF Core 仍然缺失。

以下是 SAP 的入口:

SQL Anywhere .NET Core 数据提供程序 SQL Anywhere 提供程序适用于 .NET Core 是一个 ADO.NET 驱动程序,可从 .NET Core 应用程序访问 SAP SQL Anywhere 数据库获取数据。

该驱动程序为 Sap.Data.SQLAnywhere.Core.v2.1.dll,适用于 Microsoft Windows。它已包含在 SAP SAP IQ Database Client 中。

ADO.NET 支持 该提供程序支持大多数 ADO.NET 功能。以下 ADO.NET 功能不适用于 .NET Core:

  • 使用事务协调器分布式事务登记
  • SACredential 类
  • SAConnection(string connectionString,SACredential credential)方法
  • SAPermission 类
  • SAFactory.CreatePermission 方法
  • Entity Framework

https://help.sap.com/viewer/a894a54d84f21015b142ffe773888f8c/16.1.5.0/en-US/81e7c7253f0b42a0b8fb0f6f8a30de2d.html


目前,该驱动程序仅可在Windows下使用。根据SAP的说法,与Linux的兼容性将很快推出。 - gutzi

-1
你可以使用Sybase客户端或Sybase SDK for Developers附带的ODBC驱动程序吗?

1
请您能否提供一些示例,我们该如何实现? - Mikayel Mikirtumov
我不了解 .net core。如果你知道 .Net core 可以使用 ODBC,你可以安装适用于 Windows 的 Sybase 客户端或 ASE 开发人员 SDK(可在 sap.com 上获取)。一旦在 Windows 机器上安装完成,你将打开 Windows 上的“ODBC 数据源管理员”来定义连接源到 Sybase ASE 数据库。 https://archive.sap.com/discussions/thread/3565945 - Vince
我们需要在Linux服务器上运行应用程序。你有关于Linux服务器上ODBC的任何想法吗? - Mikayel Mikirtumov
1
看起来在Linux上安装Sybase ODBC驱动程序是可能的:https://dba.stackexchange.com/questions/162029/native-sybase-odbc-driver - Vince
对于Sybase来说,这是正常的。你知道在.NET Core中有没有好用的ODBC库吗? - Mikayel Mikirtumov
1
我们曾尝试使用ODBC,但无法弄清楚如何从存储过程中获取返回值。ODBC认为这是语法错误。最后,我们为.NET Core编写了自己的ADO.NET驱动程序:https://github.com/DataAction/AdoNetCore.AseClient - sheikhjabootie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接