将2D数组从C#传递给Postgresql函数

时间:2016-03-13 09:32:49

标签: c# arrays postgresql sqlcommand

这是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函数。

2 个答案:

答案 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
    {
    }

}

此示例仅适用于数组列。