调用函数postgresql .NET时出错

时间:2013-01-31 09:28:18

标签: c# postgresql

错误: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();

3 个答案:

答案 0 :(得分:1)

服务器= 127.0.0.1;  add name =“ConnectionStringName”connectionString =“server = ServerNameOrIP; database = DataBasename; uid = UserID; pwd = Password; 正确检查一下再试一次。它会工作。数据库连接未建立。

答案 1 :(得分:0)

您无法在function命令对象中传递NpgsqlCommand。唯一允许有sql查询或存储过程的名称。

最好的方法是使用其中的函数创建STORED PROCEDURE并在ado.net中调用该过程。

答案 2 :(得分:0)

请添加以下连接字符串

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