繁体   English   中英

专栏 <<column_name> > 在插入查询中使用 ADO.NET 连接 Postgresql 时未找到</column_name>

[英]Column <<column_name>> not found when using ADO-NET connection for Postgresql in insert query

我在为 PostgreSQL 使用 ADO.NET 连接时遇到问题。我已经尝试使用 PSQLODBC 驱动程序 12.000.000 ANSI 和 Unicode 进行此查询。我使用 PostgreSQL v.9.5。 我注意到列名称中有“_”。

当我使用 Select 查询时,连接成功执行了它。 查询返回我想要的变量。

using (OdbcConnection conn = (OdbcConnection)Dts.Connections["XXX"].AcquireConnection(Dts.Transaction))
{
    try
    {
         if (conn.State != ConnectionState.Open)
         {
             conn.Open();
         }
    }
    catch (Exception e)
    {
        String err = e.Message.ToString();
        Console.WriteLine(err);
    }

    try
    {
        OdbcCommand cmd = new OdbcCommand();
        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = "SELECT XX FROM <<table>> where <<params>>";

        ...
        OdbcDataReader rdd = cmd.ExecuteReader();

        while (rdd.Read())
        {
            <<read operation here>>;
        }

        conn.Close();
    }
    catch (Exception ers)
    {
        <<catch operation here>>;
    }
}

但是当我使用 Insert 查询时,它无法检查列名,即使列存在于我的 PostgreSQL 表中:

 using (OdbcConnection conn2 = (OdbcConnection)Dts.Connections["OJK_REPORTING_DEV"].AcquireConnection(Dts.Transaction))
                {
                    try
                    {
                        if (conn2.State != ConnectionState.Open)
                        {
                            conn2.Open();
                        }
                    }
                    catch (Exception e)
                    {
                        string x = e.Message.ToString();
                    }

                    try
                    {
                        OdbcCommand cmd = new OdbcCommand();
                        cmd.Connection = conn2;
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = "INSERT INTO <<table>>(<<column>>)VALUES(<<params>>)";
                        <<cmd.Parameters.AddWithValue here>>;
                        cmd.ExecuteNonQuery();
                        conn2.Close();
                    }
                    catch (Exception e)
                    {
                        <<exception catch here>>;
                    }
                }

当我调试此行时,出现此错误:

错误 [42703] 错误:未找到列 <>,执行查询时出错

是的,经过多次研究,我得到了答案。 因为我使用 PostgreSQL ODBC,所以查询参数没有在查询中使用@<name> ,而是使用? ,所以你需要像这样制定查询

INSERT INTO <TABLE_NAME> (<COLUMNS>) VALUE ?

并调用参数

cmd.AddWithValue("@<name>",<value>)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM