将数据从Textbox INSERT到Postgresql

时间:2012-06-28 02:47:50

标签: c# .net postgresql npgsql

我只是学习如何连接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();
        }
    }

所以请帮我解释一下代码。

1 个答案:

答案 0 :(得分:11)

首先,您需要使用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语句中使用:name:pw来引用它,例如:

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

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