C#连接到postgres数据库

这是我第一次连接数据库,但我遇到了一些问题

using Npgsql; namespace DBPrj { class Program { static void Main(string[] args) { bool boolfound=false; NpgsqlConnection conn = new NpgsqlConnection("Server=; Port=5432; User Id=Admin; Password=postgres.1; Database=Test1"); // is an actual ip address conn.Open(); NpgsqlCommand cmd = new NpgsqlCommand(); NpgsqlDataReader dr= cmd.ExecuteReader(); //I get InvalidOperationException : The connection is not open. if (dr.Read()) { boolfound=true; Console.WriteLine("connection established"); } if(boolfound==false) { Console.WriteLine("Data does not exist"); } dr.Close(); conn.Close(); } } 

}

可能是什么问题呢? NpgsqlConnection字符串是否正确写入? 是否可以保护数据库免受远程访问?

我怎么能解决这个问题?

提前致谢!

您永远不会将NpgsqlConnection分配给您的NpgsqlConnection ,并且您不提供执行NpgsqlDataReader的查询,修复它应解决当前的问题。

此外,至少将您的NpgsqlConnection包装在using() statement中是一个好主意,以确保连接始终关闭,即使存在exception。

 using Npgsql; namespace DBPrj { class Program { static void Main(string[] args) { bool boolfound=false; using(NpgsqlConnection conn = new NpgsqlConnection("Server=; Port=5432; User Id=Admin; Password=postgres.1; Database=Test1")) { conn.Open(); NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM Table1", conn); NpgsqlDataReader dr= cmd.ExecuteReader(); if (dr.Read()) { boolfound=true; Console.WriteLine("connection established"); } if(boolfound==false) { Console.WriteLine("Data does not exist"); } dr.Close(); } } } } 

在您的连接字符串中,您可能在数据库末尾缺少分号。

 Database=Test1" 

可能需要;

 Database=Test1;" 

另外 – 将tryn.open()包装在try catch语句中可能值得用户友好且易于捕获错误。

编辑1:

刚做了一点阅读。 NpgsqlCommand是否需要传递给它的参数? 只是在伪代码中,类似于;

 NpgsqlCommand cmd = new NpgsqlCommand(query, conn);