Npgsql 传递参数数组
Npgsql passing an array of parameters
我是 Npgsql
的新手,我尝试在我的 asp.net 项目中创建一个助手,以便我可以在我的控制器方法中方便地调用它。
npgsqlqueryhelper
public DataSet ExecuteQueryWithParams(string commandText, params NpgsqlParameter[] parameters)
{
using (var connection = npgsqlcon.GetnpgsqlConnection())
using (NpgsqlCommand command = new NpgsqlCommand(commandText, connection))
{
DataSet ds = new DataSet();
command.Parameters.AddRange(parameters);
command.CommandTimeout = 5000;
NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
da.Fill(ds);
connection.Close();
return ds;
}
}
My Controller Method
List<rollingPAR> rollingparlist = new List<rollingPAR>();
npgsqlhelper = new npgsqlQueryHelper();
NpgsqlParameter[] parameterList = {
new NpgsqlParameter("@lid", r.lid),
new NpgsqlParameter("@posting_date", r.date_end)
};
var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status()", parameterList).Tables[0];
rollingparlist = table.AsEnumerable().Select(row => new rollingPAR
{
get_payment_status = row.Field<int>("get_payment_status")
}).ToList();
当我尝试 运行 我的程序时,我总是遇到一个错误 function ln.get_payment_status() does not exist
但是当我尝试直接在查询中提供参数时
(例如 var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status(1231,'06-18-2019')", parameterList).Tables[0];
)
它给了我需要的数据。我不知道我的错误是什么,从昨天开始我就被困在这里了。谁能帮我这个? TIA
参数占位符不会自动包含在函数调用中。尝试添加它们:
var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status(@lid,@posting_date)", parameterList).Tables[0];
在@JGH 先生的帮助下,我发现我的查询缺少参数占位符,但在我编辑它之后,我遇到了关于 asp.net datetime
和 datetime
之间数据类型的错误postgresql 日期所以我添加了这段代码来消除错误。
parameterList[1].NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Date;
现在是新代码:
List<rollingPAR> rollingparlist = new List<rollingPAR>();
npgsqlhelper = new npgsqlQueryHelper();
NpgsqlParameter[] parameterList = {
new NpgsqlParameter("@lid", r.lid),
new NpgsqlParameter("@posting_date", r.date_end)
};
parameterList[1].NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Date;
var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status(@lid,@posting_date)", parameterList).Tables[0];
rollingparlist = table.AsEnumerable().Select(row => new rollingPAR
{
get_payment_status = row.Field<int?>("get_payment_status")
}).ToList();
谢谢@JGH先生
我是 Npgsql
的新手,我尝试在我的 asp.net 项目中创建一个助手,以便我可以在我的控制器方法中方便地调用它。
npgsqlqueryhelper
public DataSet ExecuteQueryWithParams(string commandText, params NpgsqlParameter[] parameters)
{
using (var connection = npgsqlcon.GetnpgsqlConnection())
using (NpgsqlCommand command = new NpgsqlCommand(commandText, connection))
{
DataSet ds = new DataSet();
command.Parameters.AddRange(parameters);
command.CommandTimeout = 5000;
NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
da.Fill(ds);
connection.Close();
return ds;
}
}
My Controller Method
List<rollingPAR> rollingparlist = new List<rollingPAR>();
npgsqlhelper = new npgsqlQueryHelper();
NpgsqlParameter[] parameterList = {
new NpgsqlParameter("@lid", r.lid),
new NpgsqlParameter("@posting_date", r.date_end)
};
var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status()", parameterList).Tables[0];
rollingparlist = table.AsEnumerable().Select(row => new rollingPAR
{
get_payment_status = row.Field<int>("get_payment_status")
}).ToList();
当我尝试 运行 我的程序时,我总是遇到一个错误 function ln.get_payment_status() does not exist
但是当我尝试直接在查询中提供参数时
(例如 var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status(1231,'06-18-2019')", parameterList).Tables[0];
)
它给了我需要的数据。我不知道我的错误是什么,从昨天开始我就被困在这里了。谁能帮我这个? TIA
参数占位符不会自动包含在函数调用中。尝试添加它们:
var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status(@lid,@posting_date)", parameterList).Tables[0];
在@JGH 先生的帮助下,我发现我的查询缺少参数占位符,但在我编辑它之后,我遇到了关于 asp.net datetime
和 datetime
之间数据类型的错误postgresql 日期所以我添加了这段代码来消除错误。
parameterList[1].NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Date;
现在是新代码:
List<rollingPAR> rollingparlist = new List<rollingPAR>();
npgsqlhelper = new npgsqlQueryHelper();
NpgsqlParameter[] parameterList = {
new NpgsqlParameter("@lid", r.lid),
new NpgsqlParameter("@posting_date", r.date_end)
};
parameterList[1].NpgsqlDbType = NpgsqlTypes.NpgsqlDbType.Date;
var table = npgsqlhelper.ExecuteQueryWithParams("SELECT ln.get_payment_status(@lid,@posting_date)", parameterList).Tables[0];
rollingparlist = table.AsEnumerable().Select(row => new rollingPAR
{
get_payment_status = row.Field<int?>("get_payment_status")
}).ToList();
谢谢@JGH先生