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