PostgreSQL Function doesn't Exist in C# (Error: 42883)
PostgreSQL Function doesn't Exist in C# (Error: 42883)
我正在创建一个 winforms 界面,我在其中连接我的 PostgreSQL 数据库,以便 select、更新和删除我的数据。到目前为止,我已经创建了“插入”和“Select”函数,并且我正在处理“更新”函数。我在 PostgreSQL 上创建了以下函数,
PostgreSQL 更新函数
create function ka_update
(
_cus_name varchar,
_cus_phone varchar,
_cus_vat varchar,
_cus_street varchar,
_cus_street_num varchar,
_cus_city varchar,
_cus_zip varchar,
_cus_email varchar,
_cus_id integer
)returns int as
$$
begin
update customer
set
cus_name = _cus_name,
cus_phone = _cus_phone,
cus_vat = _cus_vat,
cus_street = _cus_street,
cus_street_num = _cus_street_num,
cus_city = _cus_city,
cus_zip = _cus_zip,
cus_email = _cus_email
where cus_id=_cus_id;
if found then
return 1;
else
return 0;
end if;
end
$$
language plpgsql
然后我继续我的 C# 代码,
使用 PostgreSQL 更新功能的 C# 脚本
private NpgsqlConnection conn;
private DataTable dt;
private NpgsqlCommand cmd;
private string sql = null;
private DataGridViewRow r;
private void button2_Click(object sender, EventArgs e)
{
if (r == null)
{
MessageBox.Show("Please choose a customer to update information", "Oops", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
try
{
conn.Open();
sql = @"select * from ka_update(:_cus_name,:_cus_phone,:_cus_vat,:_cus_street,:_cus_street_num,:_cus_city,:_cus_zip,:_cus_email,:_cus_id)";
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("_cus_name", textBox1.Text);
cmd.Parameters.AddWithValue("_cus_phone", textBox2.Text);
cmd.Parameters.AddWithValue("_cus_vat", textBox3.Text);
cmd.Parameters.AddWithValue("_cus_street", textBox4.Text);
cmd.Parameters.AddWithValue("_cus_street_num", textBox5.Text);
cmd.Parameters.AddWithValue("_cus_city", textBox6.Text);
cmd.Parameters.AddWithValue("_cus_zip", textBox7.Text);
cmd.Parameters.AddWithValue("_cus_email", textBox8.Text);
cmd.Parameters.AddWithValue("_cus_id", r.Cells["_cus_id"].Value.ToString());
if ((int)cmd.ExecuteScalar() == 1)
{
conn.Close();
MessageBox.Show("Updated a new customer successfully", "Well Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
button4.PerformClick(); //If updated successfully then load all customers again
//reset textbox components
textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = textBox5.Text = textBox6.Text = textBox7.Text = textBox8.Text = null;
}
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message, "UPDATE FAIL!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
conn.Close();
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
r = dataGridView1.Rows[e.RowIndex];
textBox1.Text = r.Cells["_cus_name"].Value.ToString();
textBox2.Text = r.Cells["_cus_phone"].Value.ToString();
textBox3.Text = r.Cells["_cus_vat"].Value.ToString();
textBox4.Text = r.Cells["_cus_street"].Value.ToString();
textBox5.Text = r.Cells["_cus_street_num"].Value.ToString();
textBox6.Text = r.Cells["_cus_city"].Value.ToString();
textBox7.Text = r.Cells["_cus_zip"].Value.ToString();
textBox8.Text = r.Cells["_cus_email"].Value.ToString();
}
}
我收到以下错误
我想弄清楚,我在编写函数时做错了什么,但到目前为止我的线索为零。有什么想法吗???
错误提示参数类型不匹配。 jjanes 还指出最后一个参数是 int
如果你的_cus_id列是int类型,你可以使用Convert.ToInt32方法直接将其转换为int类型。
cmd.Parameters.AddWithValue("_cus_id", Convert.ToInt32(r.Cells["_cus_id"].Value));
我正在创建一个 winforms 界面,我在其中连接我的 PostgreSQL 数据库,以便 select、更新和删除我的数据。到目前为止,我已经创建了“插入”和“Select”函数,并且我正在处理“更新”函数。我在 PostgreSQL 上创建了以下函数,
PostgreSQL 更新函数
create function ka_update
(
_cus_name varchar,
_cus_phone varchar,
_cus_vat varchar,
_cus_street varchar,
_cus_street_num varchar,
_cus_city varchar,
_cus_zip varchar,
_cus_email varchar,
_cus_id integer
)returns int as
$$
begin
update customer
set
cus_name = _cus_name,
cus_phone = _cus_phone,
cus_vat = _cus_vat,
cus_street = _cus_street,
cus_street_num = _cus_street_num,
cus_city = _cus_city,
cus_zip = _cus_zip,
cus_email = _cus_email
where cus_id=_cus_id;
if found then
return 1;
else
return 0;
end if;
end
$$
language plpgsql
然后我继续我的 C# 代码,
使用 PostgreSQL 更新功能的 C# 脚本
private NpgsqlConnection conn;
private DataTable dt;
private NpgsqlCommand cmd;
private string sql = null;
private DataGridViewRow r;
private void button2_Click(object sender, EventArgs e)
{
if (r == null)
{
MessageBox.Show("Please choose a customer to update information", "Oops", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
try
{
conn.Open();
sql = @"select * from ka_update(:_cus_name,:_cus_phone,:_cus_vat,:_cus_street,:_cus_street_num,:_cus_city,:_cus_zip,:_cus_email,:_cus_id)";
cmd = new NpgsqlCommand(sql, conn);
cmd.Parameters.AddWithValue("_cus_name", textBox1.Text);
cmd.Parameters.AddWithValue("_cus_phone", textBox2.Text);
cmd.Parameters.AddWithValue("_cus_vat", textBox3.Text);
cmd.Parameters.AddWithValue("_cus_street", textBox4.Text);
cmd.Parameters.AddWithValue("_cus_street_num", textBox5.Text);
cmd.Parameters.AddWithValue("_cus_city", textBox6.Text);
cmd.Parameters.AddWithValue("_cus_zip", textBox7.Text);
cmd.Parameters.AddWithValue("_cus_email", textBox8.Text);
cmd.Parameters.AddWithValue("_cus_id", r.Cells["_cus_id"].Value.ToString());
if ((int)cmd.ExecuteScalar() == 1)
{
conn.Close();
MessageBox.Show("Updated a new customer successfully", "Well Done", MessageBoxButtons.OK, MessageBoxIcon.Information);
button4.PerformClick(); //If updated successfully then load all customers again
//reset textbox components
textBox1.Text = textBox2.Text = textBox3.Text = textBox4.Text = textBox5.Text = textBox6.Text = textBox7.Text = textBox8.Text = null;
}
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message, "UPDATE FAIL!!!", MessageBoxButtons.OK, MessageBoxIcon.Error);
conn.Close();
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex >= 0)
{
r = dataGridView1.Rows[e.RowIndex];
textBox1.Text = r.Cells["_cus_name"].Value.ToString();
textBox2.Text = r.Cells["_cus_phone"].Value.ToString();
textBox3.Text = r.Cells["_cus_vat"].Value.ToString();
textBox4.Text = r.Cells["_cus_street"].Value.ToString();
textBox5.Text = r.Cells["_cus_street_num"].Value.ToString();
textBox6.Text = r.Cells["_cus_city"].Value.ToString();
textBox7.Text = r.Cells["_cus_zip"].Value.ToString();
textBox8.Text = r.Cells["_cus_email"].Value.ToString();
}
}
我收到以下错误
我想弄清楚,我在编写函数时做错了什么,但到目前为止我的线索为零。有什么想法吗???
错误提示参数类型不匹配。 jjanes 还指出最后一个参数是 int
如果你的_cus_id列是int类型,你可以使用Convert.ToInt32方法直接将其转换为int类型。
cmd.Parameters.AddWithValue("_cus_id", Convert.ToInt32(r.Cells["_cus_id"].Value));