C# Sql连接异常:不支持关键字'Port'



我看过很多关于同一主题的帖子。但都没帮我。我想将Postgresql与跨平台应用程序结合使用。稍后我将使用云中的服务器,但为了尝试,我认为使用本地数据库更容易。因此,我安装了数据库本身和带有"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");
}
}
}

CCD_ 1总是以和CCD_ 2告知CCD_。原因很清楚。Net Framework尝试使用SQL Server,而不是将我的String传递给npgsql驱动程序。因此,从字符串中剪切"port"是没有意义的。

我的问题是如何将字符串解析更改为Progresql提供程序积极地说,我没有为错误的选择做任何事情,这显然是的默认行为的一部分。Net Framework,这要么是一个错误,要么是只支持MS产品的意图。

我尝试了一些方法来改变这种行为。更新以澄清:因为我不接受使用"NpgsqlConnection"。我的代码应该独立于提供者。

正如我在Postgresql-Docu到npgsql和另一个有同样问题的问题中发现的那样,我在控制台应用程序的App.Config文件中添加了以下几行。

<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>

这也于事无补。另一件事是,如果它能帮助应用程序。配置如何将其传输到我的跨平台应用程序。没有应用程序。配置。

我的问题是环境,而不是编程本身。在其他工作多年后,我又开始编程了。所以所有的环境对我来说都是全新的。在那之前,Visual Studio会自动处理任何事情。所以我不需要了解很多细节。我试图查找有关的一些信息。Net内部,用于DbProviderFactory和应用程序配置。但我没有找到有用的信息,主要是因为我不知道如何搜索。所以任何帮助对我都有用。提前谢谢。

SqlConnection特定于SQL Server。您需要使用NpgsqlConnection来使用Postgres连接,这意味着您需要对Postgres程序集的引用。

但您打算在将来转移到另一个提供程序,因此为了最大限度地减少这种转移的影响,请尝试在代码中使用泛型基类。例如:

var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
using (DbConnection conn = new NpgsqlConnection(connString))
{
conn.Open()
using (DbCommand command = conn.CreateCommand())
{
// etc
}
}

这样,当您切换时,您所需要做的就是用SqlConnection替换整个解决方案中的NpgsqlConnection。如果你想使用DbProviderFactory(这里有一个很好的例子(,那么你可以,但基本上你只是保存了这个单一的搜索/替换,删除了引用,并发布了新版本的代码。

我建议将连接字符串放在配置文件中,而不是代码中(如问题所示(,以避免将其放在多个位置,并使更改更容易而无需重新生成。

当然,您可能需要修复SQL本身中任何特定于实现的细节。

以下是入门的基本代码。但对于初学者来说,最好的方法是通过教程进行参观http://www.npgsql.org/doc/index.html

var connString = "Host=myserver;Username=mylogin;Password=mypass;Database=mydatabase";
using (var conn = new NpgsqlConnection(connString))
{
conn.Open();
}

最新更新