【发布时间】:2018-07-29 00:23:05
【问题描述】:
我看过很多相同主题的帖子。 但都没有帮助我。 我想将 Postgresql 与 CrossPlatform-App 一起使用。稍后我将使用云中的服务器,但为了尝试,我认为使用本地数据库更容易。 因此,我已经安装了数据库本身和带有“NuGet”的“npgsql”包,就像 Postgres 人推荐的那样。在连接时总是遇到同样的错误后,我将代码简化为一个控制台应用程序,实际上只有十行代码。
namespace SqlTester_ConsolApp
{
class Program
{
static void Main(string[] args)
{
string MyConnection = "Server=127.0.0.1;Port=5432;Database=sample;UserId=Postgresql;Password=zzzzzzzzz;";
try
{
SqlConnection Connection = new SqlConnection(MyConnection);
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine("---------------------------------------------------------------------");
System.Diagnostics.Debug.WriteLine(ex.ToString());
}
System.Diagnostics.Debug.WriteLine("Ready");
}
}
}
new SqlConnection 总是以 System.ArgumentException 告诉 Keyword not supported 'port' 结束。
原因很清楚,.Net 框架尝试使用 SQL Server 而不是将我的字符串传递给 npgsql 驱动程序。因此,从字符串中删除“端口”是没有意义的。
我的问题是我怎样才能将字符串解析更改为 Progresql 提供程序?我没有为错误的选择做任何事情,这显然是 .Net 框架的默认行为的一部分,它要么是错误或仅支持 MS 产品的意图。
我尝试了一些方法来改变这种行为。 澄清更新:因为“NpgsqlConnection”的使用对我来说是不可接受的。我的代码应该独立于提供者。
正如我在 Postgresql-Docu 到 npgsql 和另一个 question 中发现的同样问题,我将以下行添加到 Console-App 的 App.Configfile 中。
<system.data>
<DbProviderFactories>
<add name="Npgsql Data Provider" invariant="Npgsql" description=".Net Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"/>
</DbProviderFactories>
<defaultConnectionFactory type="Npgsql.NpgsqlFactory, Npgsql, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"></defaultConnectionFactory>
</system.data>
它没有帮助。另一件事是,如果它对 App.Config 有帮助,我该如何将它转移到我的跨平台应用程序。没有 App.Config。
我的问题是环境而不是编程本身。在从事其他工作多年后,我再次开始编程。所以所有的环境对我来说都是全新的。在那之前,Visual Studio 会自动处理任何事情。所以我不必学习很多细节。我试图找到有关 DbProviderFactories 的 .Net-internals 和应用程序配置的一些信息。但是我没有找到有用的信息,主要是因为不知道如何搜索。所以任何帮助对我都有用。提前致谢。
【问题讨论】:
-
如果您使用
SqlConnection,那么它将尝试连接到 SQL Server。请改用NpgsqlConnection。 -
“我的问题是环境而不是编程本身。” - 不,使用 SqlConnection 与 Postgres 对话显然是错误的
-
您想使用基类
DbConnection而不是 SQL Server 特定的SqlConnection
标签: c# sql postgresql sqlconnection