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

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();
            }
        }
    }
}
于 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 に答える