这是我第一次连接数据库,但我遇到了一些问题
using Npgsql;
namespace DBPrj
{
class Program
{
static void Main(string[] args)
{
bool boolfound=false;
NpgsqlConnection conn = new NpgsqlConnection("Server=<ip>; Port=5432; User Id=Admin; Password=postgres.1; Database=Test1"); //<ip> 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字符串是否正确写入?是否可以保护数据库免受远程访问?
我该如何解决这个问题?
提前致谢!
答案 0 :(得分:5)
您永远不会将NpgsqlConnection
分配给NpgsqlCommand
,并且您不会为NpgsqlDataReader
提供执行查询,而是应该解决当前问题。
此外,至少将NpgsqlConnection
包装在using()
语句中是个好主意,以确保连接始终处于关闭状态,即使存在异常。
using Npgsql;
namespace DBPrj
{
class Program
{
static void Main(string[] args)
{
bool boolfound=false;
using(NpgsqlConnection conn = new NpgsqlConnection("Server=<ip>; 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();
}
}
}
}
答案 1 :(得分:1)
在您的连接字符串中,您可能在数据库末尾缺少分号。
Database=Test1"
可能需要;
Database=Test1;"
同样 - 可能值得将你的conn.open()包装在try catch语句中,以方便用户使用并轻松捕获错误。
编辑1:
刚做了一点阅读。 NpgsqlCommand是否需要传递给它的参数?只是在伪代码中,类似于;
NpgsqlCommand cmd = new NpgsqlCommand(query, conn);