我该如何使用.NET Core连接并查询AWS RedShift?请提供代码示例。我已经阅读了AWS和.Net Core的文档,但没有成功。
我该如何使用.NET Core连接并查询AWS RedShift?请提供代码示例。我已经阅读了AWS和.Net Core的文档,但没有成功。
这个答案只适用于特定时间点,可能会随着时间变化而过时...
EntityFramework Core 项目是我最关注的项目之一。缺乏 ODBC 是众所周知的问题,特别是对于那些想要连接 Oracle 的人来说。目前,你可能需要在 .NET Core 上分叉一个 Oracle 客户端,并根据需要进行修改。
我在快速谷歌搜索后找到了以下几个项目,可以帮助你:
- https://github.com/LinqDan/oracleclientcore - https://github.com/LinqDan/Mono.Data.OdbcCore
长期来看,你需要关注这两个 GitHub 问题,它们正在跟踪 EntityFramework Core 和 .NETStandard API.. 的支持情况
更新于 2017 年 6 月 23 日:
现在可以通过 Npgsql.EntityFrameworkCore.PostgreSQL
NuGet 包和相关的 Entity Framework Core 包来实现。显然,PostgreSQL 团队对于等待 ODBC 的支持已经不耐烦了(即使在最新的 netstandard2.0
中仍然不可用),他们使用 netstandard 编写了自己的驱动程序 - 在去年 11 月份。 npgsql 网站上的入门指南介绍了其在旧的 JSON 项目格式中的用法 - 但所列出的依赖关系仍然有效。
下面是如何使用此包的方法...
using (var conn = new NpgsqlConnection("Host=myserver;Username=mylogin;Password=******;Database=music"))
{
conn.Open();
using (var cmd = new NpgsqlCommand())
{
cmd.Connection = conn;
cmd.CommandText = "SELECT name FROM artists";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
}
}
}
Dockerfile
进行设置。install-driver.sh
),该脚本从上面的链接中使用apt-get
获取所需的odbc驱动程序。#!/bin/bash
# Install the Redshift ODBC driver manager
apt-get update \
&& apt-get install -y --no-install-recommends unixodbc
if ! curl -s https://s3.amazonaws.com/redshift-downloads/drivers/odbc/[latestversion].deb -o driver.deb; then
echo 'Failed to download Redshift ODBC Driver!' 1>&2
exit 1
fi
# Install the Redshift ODBC driver
apt install ./driver.deb
amazon.redshiftodbc.ini
、odbc.ini
和odbcinst.ini
,具体请参见:.sh
文件中:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export ODBCINI=/etc/odbc.ini
export AMAZONREDSHIFTODBCINI=/etc/amazon.redshiftodbc.ini
export ODBCSYSINI=/usr/local/odbc
.sh
和.ini
文件,请将它们放入一个共同的目录中(例如,/odbc/
),并将其包含为Dockerfile
命令的一部分。类似这样:FROM microsoft/dotnet:2.1-sdk AS base
WORKDIR /app # or wherever your working directory resides
COPY ./odbc/odbc.ini /etc/odbc.ini
COPY ./odbc/odbcinst.ini /etc/odbcinst.ini
COPY ./odbc/amazon.redshiftodbc.ini /etc/amazon.redshiftodbc.ini
COPY ./odbc/install-driver.sh /tmp/install-driver.sh
RUN chmod +x /tmp/install-driver.sh
RUN /tmp/install-driver.sh
# dotnet restore, build, publish and ENTRYPOINT commands here...
docker build
和docker run
命令。这意味着您的应用程序代码可以像任何其他数据库驱动程序一样使用OdbcConnection
:using System;
using System.Data;
using System.Data.Odbc;
// field within class... value should be set from config
private string redshiftConnectionString = "Driver={Amazon Redshift (x64)}; Server=redshiftclusterhostname.region.redshift.amazonaws.com; Database=database; UID=user; PWD=password; Port=5439"
public DataSet ExecuteQuery(string query)
{
var dataSet = new DataSet();
using (var connection = new OdbcConnection(this.redshiftConnectionString))
{
var adapter = new OdbcDataAdapter(query, connection);
adapter.Fill(dataSet);
}
return dataSet;
}
Driver=
的值应该是你选择下载和安装的驱动程序的名称。只需通过JDBC或ODBC驱动程序连接到Amazon Redshift,并像普通的SQL数据库一样访问它。
您将使用AWS API启动/停止集群,但所有查询和请求都通过SQL连接进行。