我正在使用Npgsql ADO点网连接器从C#代码与Postgresql通信。
该函数在postgresql数据库中可用,我也可以通过pgadmin工具执行该函数,但无法从c#代码中调用它。
获取错误
42883:功能 public.insert_json_array_to_test_method_temp(p_input_test_name => 文本,p_input_test_type_xref =>文本,p_input_unit_Attribute =>文本) 不存在“}
错误提示-没有函数匹配给定的名称和参数类型。 您可能需要添加显式类型转换。
下面是C#代码
NpgsqlConnection conn = new NpgsqlConnection(_connStr);
conn.Open();
NpgsqlCommand cmd = new NpgsqlCommand("public.insert_json_array_to_test_method_temp", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new NpgsqlParameter("p_input_test_name", NpgsqlDbType.Text) { Value = testmethod });
cmd.Parameters.Add(new NpgsqlParameter("p_input_test_type_xref", NpgsqlDbType.Text) { Value = testtypexref });
cmd.Parameters.Add(new NpgsqlParameter("p_input_unit_Attribute", NpgsqlDbType.Text) { Value = unitattributes });
NpgsqlDataReader dr = cmd.ExecuteReader();
while (dr.Read())
{
} conn.Close();
下面是函数头部分
CREATE OR REPLACE FUNCTION
public.insert_json_array_to_test_method_temp(p_input_test_name
text,p_input_test_type_xref text,p_input_unit_attribute text)
RETURNS text
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE res Text;
BEGIN
--some logic with parameters
res:= public."InsertTestNames"();
Return 'done';
END;
$BODY$;
任何人都可以帮助解决这里的问题吗?
答案 0 :(得分:0)
我更改了创建参数并强制转换的方式
var parameter1 = cmd.CreateParameter();
parameter1.ParameterName = "parameter_name";
parameter1.NpgsqlDbType = NpgsqlDbType.Text;
parameter1.Value = parameter_value;
cmd.Parameters.Add(parameter1);
现在正在工作。