在 Visual Studio 中使用 dotConnect Postgresql 时出现 PgSqlParameter 错误
PgSqlParameter error using dotConnect Postgresql in Visual Studio
我有一个存储过程。输入为 'id',输出为 'n'。
但是当我尝试在 Visual Studio 中 运行 时,出现错误:命令执行结果中不存在输出参数 'n' 的值。
这是我的代码:
int id = Convert.ToInt32(this.textBox1.Text);
PgSqlConnection con = new PgSqlConnection();
con.ConnectionString = Properties.Settings.Default.DBConnectionString;
PgSqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "getcountmaterials";
PgSqlParameter param = new PgSqlParameter("n", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param);
cmd.Parameters.Add(new PgSqlParameter("@id", id));
con.Open();
cmd.ExecuteNonQuery();
string kolvo = cmd.Parameters["n"].Value.ToString();
con.Close();
this.result.Text = kolvo;
存储过程:
CREATE OR REPLACE FUNCTION public.getcountmaterials(id integer)
RETURNS integer AS
$BODY$
declare n integer;
begin n := (select sum(count) from materials_in_warehouses
where id_materials = id);
return n;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.getcountmaterials(integer)
OWNER TO postgres;
我从来没有为 Pg 使用过 dotConnect(但是,我是 Oracle 的超级粉丝),所以我无法验证我的语法是否正确。
也就是说,我想我明白了你的核心问题。函数和 "stored procedures" 之间的界限在 Postgresql 中有些模糊。
您真正想要做的就是对上面的函数 运行 一个 select
。因此,我相信以下内容会奏效。我知道这适用于 NpgSql,我希望它能正确转换为 dotConnect:
PgSqlCommand cmd = new PgSqlCommand("select getcountmaterials(:ID)", con);
cmd.Parameters.AddWithValue("ID", id);
string kolvo = cmd.ExecuteScalar().ToString();
我有一个存储过程。输入为 'id',输出为 'n'。 但是当我尝试在 Visual Studio 中 运行 时,出现错误:命令执行结果中不存在输出参数 'n' 的值。
这是我的代码:
int id = Convert.ToInt32(this.textBox1.Text);
PgSqlConnection con = new PgSqlConnection();
con.ConnectionString = Properties.Settings.Default.DBConnectionString;
PgSqlCommand cmd = con.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "getcountmaterials";
PgSqlParameter param = new PgSqlParameter("n", SqlDbType.Int);
param.Direction = ParameterDirection.Output;
cmd.Parameters.Add(param);
cmd.Parameters.Add(new PgSqlParameter("@id", id));
con.Open();
cmd.ExecuteNonQuery();
string kolvo = cmd.Parameters["n"].Value.ToString();
con.Close();
this.result.Text = kolvo;
存储过程:
CREATE OR REPLACE FUNCTION public.getcountmaterials(id integer)
RETURNS integer AS
$BODY$
declare n integer;
begin n := (select sum(count) from materials_in_warehouses
where id_materials = id);
return n;
end;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION public.getcountmaterials(integer)
OWNER TO postgres;
我从来没有为 Pg 使用过 dotConnect(但是,我是 Oracle 的超级粉丝),所以我无法验证我的语法是否正确。
也就是说,我想我明白了你的核心问题。函数和 "stored procedures" 之间的界限在 Postgresql 中有些模糊。
您真正想要做的就是对上面的函数 运行 一个 select
。因此,我相信以下内容会奏效。我知道这适用于 NpgSql,我希望它能正确转换为 dotConnect:
PgSqlCommand cmd = new PgSqlCommand("select getcountmaterials(:ID)", con);
cmd.Parameters.AddWithValue("ID", id);
string kolvo = cmd.ExecuteScalar().ToString();