我只是学习如何连接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();
}
}
所以请帮我解释一下代码。
答案 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 Framework的Castle Active Record或NHibernate。这些库允许您在数据库中查询,更新,创建和删除数据,而无需编写所涉及的实际SQL语句。这是一个很好的入门方式,而且只需要你的代码!