如何从 .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.0
或 2.1
,则此选项不可行。
有一段时间我尝试使用这个包,但在从过程调用中检索返回值时遇到了问题。此外,缺乏对命名参数的支持也很烦人。
在 nuget 上使用 AdoNetCore.AseClient
命名空间/包。
我开始写这篇文章是因为我对使用 ODBC 感到沮丧,并且没有其他选择
这旨在支持.net core 1.0
、1.1
、2.0
(以及发布时的2.1
)和framework 4.6
。支持4.6
的原因是它可以直接替代。
如果您想阅读资源/文档并确定它是否适合您,请联系 available on github。
归根结底,这两个包都实现了各自的 ADO.NET 接口(@987654336@、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