【问题标题】:Error calling function postgresql .NET调用函数 postgresql .NET 时出错
【发布时间】:2013-01-31 09:28:18
【问题描述】:

错误:42883:函数 insertvideo(字符变化,字符变化,双精度,整数)不存在

但是那个存储过程是存在的!!!为什么继续这个错误???

这是我的连接字符串:

 <connectionStrings>
        <add name="myConnection" connectionString="Server=127.0.0.1; 
                   User Id=postgres; Password=myPass; Database=myDB; "/>
      </connectionStrings>

存储过程在public 架构中并且可以正常工作。

    using (NpgsqlConnection conn = new NpgsqlConnection(ConfigurationManager.ConnectionStrings["AxWaveConnection"].ToString()))
    {
        try
        {
            conn.Open();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

        NpgsqlCommand cmd = new NpgsqlCommand("insertvideo", conn);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;


        cmd.Parameters.Add(new NpgsqlParameter("out_scope_id", NpgsqlDbType.Bigint));
            cmd.Parameters["out_scope_id"].Direction = ParameterDirection.Output;

        cmd.Parameters.Add(new NpgsqlParameter("in_youtubeidvideo", NpgsqlDbType.Varchar, 15));
        cmd.Parameters["in_youtubeidvideo"].Value = VideoId;

        cmd.Parameters.Add(new NpgsqlParameter("in_title", NpgsqlDbType.Varchar, 200));
        cmd.Parameters["in_title"].Value = Title;

        cmd.Parameters.Add(new NpgsqlParameter("in_rating", NpgsqlDbType.Double));
        cmd.Parameters["in_rating"].Value = Rating;

        cmd.Parameters.Add(new NpgsqlParameter("in_viewcount", NpgsqlDbType.Integer));
        cmd.Parameters["in_viewcount"].Value = ViewCount;


        try
        {
            cmd.ExecuteNonQuery();

            scopeID = Convert.ToInt64(cmd.Parameters["out_scope_id"].Value);
        }
        catch (Exception e)
        {
            scopeID = -1;        //Duplicate Record
        }

        conn.Close();

【问题讨论】:

  • 你的意思是Stored Procedure
  • 要考虑的一点是,postgres 将参数类型作为函数名称的一部分。因此,如果您传递的参数类型与函数定义不同,即使名称相同,它也会将其报告为未找到。

标签: c# postgresql


【解决方案1】:

服务器=127.0.0.1; 添加名称="ConnectionStringName" connectionString="server=ServerNameOrIP;database=DataBasename;uid=UserID;pwd=Password; 正确检查这个再试一次。它会起作用的。未建立数据库连接。

【讨论】:

  • 连接正常,否则打开时会报异常..不是吗?
【解决方案2】:

您不能在NpgsqlCommand 命令对象中传递function。唯一允许的就是sql查询或者存储过程的名称。

最好的方法是创建一个STORED PROCEDURE,其中包含函数,然后在 ado.net 中调用该过程。

【讨论】:

  • 对不起,但我是 postgresql 的初学者...我可以创建表、视图、函数、查询、报告,但不能创建存储过程...在我从未见过的所有教程中:CREATE程序
  • 您可以从 ADO.Net 调用 PostGreSQL 函数。这与在 SQL Server 上调用存储过程非常相似。 PostGreSQL 没有存储过程,只有函数,它们对 PostGreSQL 执行与在 SQL Server 中使用存储过程相同的基本操作。
【解决方案3】:

请在下面添加连接字符串

<connectionStrings>
            <add name="myConnection" connectionString="Server=127.0.0.1; 
                       User Id=postgres; Password=myPass; Database=myDB; " providerName="postgre"/>
          </connectionStrings>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 2012-07-22
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多