C# 如何从c调用plpgsql函数#
我在plpgsql中创建了一个函数,并试图从.net核心api调用存储过程 但我在c中遇到了以下异常# 42883:函数过程插入测试(brndcode=>integer,brndname=>character variabling,brndsname=>character variabling,prdtype=>character,contracte=>character,crddate=>date,status=>integer,recstat=>integer,brndgrpseqno=>integer,wefrom=>date)不存在 没有与给定名称和参数类型匹配的函数。您可能需要添加显式类型转换 程序:C# 如何从c调用plpgsql函数#,c#,postgresql,plpgsql,C#,Postgresql,Plpgsql,我在plpgsql中创建了一个函数,并试图从.net核心api调用存储过程 但我在c中遇到了以下异常# 42883:函数过程插入测试(brndcode=>integer,brndname=>character variabling,brndsname=>character variabling,prdtype=>character,contracte=>character,crddate=>date,status=>integer,recstat=>integer,brndgrpseqno=>i
CREATE OR REPLACE FUNCTION public.proc_insert_test(p_brndcode integer,
p_brndname varchar(100),
p_brndsname varchar(100),
p_prdtype char(1),
p_discontinue char(1),
p_crddate date,
p_status integer,
p_recstat integer,
p_brndgrpseqno integer,
p_wefrom date)
RETURNS char
LANGUAGE plpgsql
AS $body$
BEGIN
Insert into arc_mmstbrndgroup(brndcode, brndname, brndsname, prdtype, discontinue, crddate, status, recstat, brndgrpseqno, wefrom)
values(p_brndcode, p_brndname, p_brndsname, p_prdtype, p_discontinue, p_crddate, p_status, p_recstat, p_brndgrpseqno, p_wefrom);
return 'saved';
END;
$body$
;
从c#调用过程:
有什么问题吗?我也面临着这个问题。经过一些分析,发现日期数据类型转换不起作用。所以我们改变了我们的调用方法 无返回值: 有返回值
我也面临着这个问题。经过一些分析,发现日期数据类型转换不起作用。所以我们改变了我们的调用方法 无返回值: 有返回值 对我来说,它正在发挥作用
PGDbContext _context = new PGDbContext();
string d1 = "mm5";
string d2 = "mmTest6";
int d3 = 11;
string d4 = "1";
var DistributionChannelGUID = _context.Database.SqlQuery<List<string>>("call dbo.insupdelglclassmaster({0},{1},{2},{3})", d1, d2, d3, d4).ToList();
PGDbContext _context=new PGDbContext();
字符串d1=“mm5”;
字符串d2=“mmTest6”;
int d3=11;
字符串d4=“1”;
var DistributionChannelGUID=_context.Database.SqlQuery(“调用dbo.insupdelglclassmaster({0}、{1}、{2}、{3})”,d1、d2、d3、d4);
对我来说,它正在工作
PGDbContext _context = new PGDbContext();
string d1 = "mm5";
string d2 = "mmTest6";
int d3 = 11;
string d4 = "1";
var DistributionChannelGUID = _context.Database.SqlQuery<List<string>>("call dbo.insupdelglclassmaster({0},{1},{2},{3})", d1, d2, d3, d4).ToList();
PGDbContext _context=new PGDbContext();
字符串d1=“mm5”;
字符串d2=“mmTest6”;
int d3=11;
字符串d4=“1”;
var DistributionChannelGUID=_context.Database.SqlQuery(“调用dbo.insupdelglclassmaster({0}、{1}、{2}、{3})”,d1、d2、d3、d4);
谢谢,这很有效,但我需要像这样调用plpgsql过程??如何返回值/输出参数?感谢您的努力,我需要在过程的参数中添加输出参数吗?如何提及输出参数?我不能使用Parameters.AddWithValue或Dapper从c#调用过程?不需要提及参数名称,但参数顺序很重要。应该避免通过联系参数来生成SQL。它使系统暴露于SQL注入。谢谢,这是可行的,但我需要像这样调用plpgsql过程??我如何才能返回值/输出参数?谢谢你的努力,我需要在过程的参数中添加输出参数吗?如何提及输出参数?我不能使用Parameters.AddWithValue或Dapper从c#调用过程?不需要提及参数名称,但参数顺序很重要。应该避免通过联系参数来生成SQL。它使系统暴露于SQL注入。请尝试在.net中重命名参数以与SQL脚本中的名称相匹配,@brndcode
=>@p\u brndcode
,@brndname
@p\u brndname
等等。@ArjunVachhani OMG,非常感谢,我完全忘记了XD,现在它工作正常了。在.net中重命名参数以与sql脚本中的名称匹配,@brndcode
=>@p\u brndcode
,@brndname
@p\u brndname
等等。@ArjunVachhani天哪,非常感谢你,我完全忘记了XD现在它工作正常了
string strquery = "BEGIN; SELECT PROC_INSERT_TEST_WITH_RETURN(123,'Test3','Test3','T','T',";
strquery = strquery + "'" + DateTime.Now.ToString("MMM-dd-yyyy HH:mm:ss") + "',1,9,1234,";
strquery = strquery + "'" + DateTime.Now.ToString("MMM-dd-yyyy HH:mm:ss") + "')";
NpgsqlCommand cmd = new NpgsqlCommand(strquery, _connection);
_connection.Open();
object cursorVal = cmd.ExecuteScalar();
DataSet ds = FetchAll(_connection, cursorVal);
cmd.Dispose();
_connection.Close();
private DataSet FetchAll(NpgsqlConnection _connection, object cursorVal)
{
try
{
DataSet actualData = new DataSet();
string strSql = "fetch all from \"" + cursorVal + "\";";
NpgsqlCommand cmd = new NpgsqlCommand(strSql, _connection);
NpgsqlDataAdapter ada = new NpgsqlDataAdapter(cmd);
ada.Fill(actualData);
return actualData;
}
catch (Exception Exp)
{
throw new Exception(Exp.Message);
}
}
PGDbContext _context = new PGDbContext();
string d1 = "mm5";
string d2 = "mmTest6";
int d3 = 11;
string d4 = "1";
var DistributionChannelGUID = _context.Database.SqlQuery<List<string>>("call dbo.insupdelglclassmaster({0},{1},{2},{3})", d1, d2, d3, d4).ToList();