1

私には2つのフォームがあり、最初の1つにはユーザー名、パスワードボックス、ログインボタンがあります。ログインボタンをクリックすると、PostgresSQLのユーザー名のパスワードが比較されます。しかし、私はこの行でエラーが発生しました

NpgsqlDataReader dr = cmd.ExecuteReader(); [エラー:42P01:リレーション"login"が存在しません]

これは私のコードです:

private void button1_Click(object sender, EventArgs e)
    {
        bool blnfound = false;
        NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=admin123;Database=Login");
        conn.Open();
        NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM login WHERE name='" + tb1.Text + "' and password = '" + tb2.Text + "'",conn);
        NpgsqlDataReader dr = cmd.ExecuteReader();

        if (dr.Read())
        {
            blnfound = true;
            Form2 f5 = new Form2();
            f5.Show();
            this.Hide();
        }

        if (blnfound == false)
        {
            MessageBox.Show("Name or password is incorrect", "Message Box", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            dr.Close();
            conn.Close();
        }
4

2 に答える 2

2

テーブル名ログインが正しい場合は、DB を確認してください。ところで、コードは SQL インジェクション攻撃に対して脆弱であるため、入力値をフィルタリングする必要があります。

また、テーブル名またはデータベース名のいずれかを変更してみてください。どちらもログインと呼ばれ、問題が発生する可能性があります。

于 2012-06-27T10:58:28.547 に答える
1
Server=127.0.0.1;Port=5432;User Id=postgres;Password=admin123;**Database=Login**

ログインはデータベース名です

"SELECT * FROM **login** WHERE name='" + tb1.Text + "' and password = '" + tb2.Text + "'",conn

ログインはテーブル名です

これが正しい場合は、テーブルloginがデータベースLOGINに存在するかどうかを確認します。

ERROR: 42P01: relation "login" does not exist

関係テーブルを意味します

また、Postgres では大文字で始まるテーブル名は使用できません。大文字で始まるテーブル名がある場合は、二重引用符で囲む必要があります。

于 2012-06-27T10:59:45.490 に答える