4

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

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 字符串是否正确写入?可以保护数据库免受远程访问吗?

我该如何解决这个问题?

提前致谢!

4

2 回答 2

6

您永远不会将您分配给您NpgsqlConnectionNpgsqlCommand并且您不提供要为您执行的查询NpgsqlDataReader,修复应该可以解决直接问题。

此外,至少将您NpgsqlConnectionusing()-statement 包装起来是一个好主意,以确保连接始终关闭,即使出现异常也是如此。

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();
            }
        }
    }
}
于 2012-08-07T10:31:46.187 回答
1

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

Database=Test1"

可能需要;

Database=Test1;"

此外 - 可能值得将您的 conn.open() 包装在 try catch 语句中,以方便用户使用并易于捕获错误。

编辑1:

只是做了一点阅读。NpgsqlCommand 是否需要将参数传递给它?只是在伪代码中,例如;

NpgsqlCommand cmd = new NpgsqlCommand(query, conn);
于 2012-08-07T10:14:32.740 回答