5

我只是学习如何连接 C# 和 PostgresSQL。我想将数据从 tb1(文本框)和 tb2 插入数据库。但我不知道如何编码我以前的代码是从数据库中选择。这是我的代码

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

1 回答 1

12

首先,您需要使用该ExecuteNonQuery方法,而不是ExecuteReader因为您正在执行一个INSERT而不是一个SELECT语句。所以,像:

NpgsqlCommand cmd = new NpgsqlCommand("insert into table1 values(1, 1)", conn);
cmd.ExecuteNonQuery();

如果这对您很重要,该ExecuteNonQuery方法还将返回受影响的行数。

其次,您需要使用 SQL 参数而不是构建不安全的 SQL 字符串。

利用:

cmd.Parameters.Add(new NpgsqlParameter("name", tb1.Text));
cmd.Parameters.Add(new NpgsqlParameter("pw", tb2.Text));

向查询中添加参数。您现在可以在 INSERT 语句中使用:nameor来引用它:pw,例如:

NpgsqlCommand cmd = new NpgsqlCommand("insert into login (Name, Password) values(:name, :pw)", conn);
cmd.ExecuteNonQuery();

最后,您可能对使用ORM而不是执行原始 SQL 语句感兴趣。我会检查基于NHibernate构建的.NET Entity FrameworkCastle Active Record。这些库将允许您在数据库中查询、更新、创建和删除数据,而无需编写所涉及的实际 SQL 语句。这是一个很好的开始方式,并且会简单地编写你的代码!

于 2012-06-28T03:04:39.520 回答