出现错误没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换。”

时间:2019-01-25 13:22:51

标签: c# postgresql npgsql

我正在使用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$;

任何人都可以帮助解决这里的问题吗?

1 个答案:

答案 0 :(得分:0)

我更改了创建参数并强制转换的方式

            var parameter1 = cmd.CreateParameter();
            parameter1.ParameterName = "parameter_name";
            parameter1.NpgsqlDbType = NpgsqlDbType.Text;
            parameter1.Value = parameter_value;
            cmd.Parameters.Add(parameter1);

现在正在工作。