这是postgresql运行查询与pg admin iii。 (下面的查询与pg admin工作正常,它返回结果集没有任何问题)
select * from pg_sp_getmainrates_11(9,10,array[[5,10,10,10],[30,20,15,16]]);
这是pg函数的参数声明。
CREATE OR REPLACE FUNCTION pg_sp_getmainrates_11(
IN fromcountryid integer,
IN tocountryid integer,
IN alldimensions_we_le_he_wi double precision[]
)
-- My logic is going here
但是当使用C#代码传递数组时,它在执行查询时返回错误。
执行属性
Basemessage:语法错误在或附近","
ErrorSql:SELECT * FROM pg_sp_getmainrates_11(9,10,System.Double [,])
这是我的C#代码。
double[,] codes = new double[,]
{
{ 5,10,10,10},{ 30,20,15,16}
};
string quy = "pg_sp_getmainrates_11(" + FromCountryId +
"," + ToCountryId +
"," + codes + ")";
NpgsqlCommand command = new NpgsqlCommand(quy, conn);
command.CommandType = CommandType.StoredProcedure;
NpgsqlDataReader dr = command.ExecuteReader();
我需要一个小方向将数组(如上所述)传递给我的postgresql函数。
答案 0 :(得分:1)
到目前为止,我找到了解决方案。 (不知道这是否是最佳解决方案) 将参数作为字符串发送的简单方法。 使用我的C#代码,我会在下面创建一些字符串。
String arr = "array[[5,10,10,10],[30,20,15,16]]";
此arr将作为查询参数传递。
string quy = "pg_sp_getmainrates_11(" + FromCountryId +
"," + ToCountryId +
"," + arr+ ")";
以上解决方案正常。
答案 1 :(得分:0)
您可以使用using Newtonsoft.Json;
并按以下方式插入数组:
string[][] arr = {{5, 10, 10, 10},{30, 20, 15, 16}};
var arrayOutput = JsonConvert.SerializeObject(arr);
try
{
string sql1 = "INSERT INTO tbt(img, fcth, dev) VALUES (ARRAY'" + arrayOutput + "')";
dbcmd.CommandText = sql1;
cmd.ExecuteNonQuery();
}
catch (NpgsqlException ex)
{
if (ex.Data == null)
{
throw;
}
else
{
}
}
此示例仅适用于数组列。