在插入查询中为 Postgresql 使用 ADO-NET 连接时找不到列 <<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 查询时,连接成功执行了它。查询return变量随心所欲
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>>;
}
}
当我调试这一行时,我得到这个错误:
ERROR[42703] ERROR: column <> not found, error while executing the query
是的,经过多次研究,我得到了答案。由于我使用 PostgreSQL ODBC,查询参数在查询中没有使用 @<name>
,而是使用 ?
,因此您需要将查询公式化为
INSERT INTO <TABLE_NAME> (<COLUMNS>) VALUE ?
并调用参数
cmd.AddWithValue("@<name>",<value>)
我在为 PostgreSQL 使用 ADO.NET 连接时遇到问题。我已经尝试使用 PSQLODBC 驱动程序 12.000.000(ANSI 和 Unicode)进行此查询。我使用 PostgreSQL v.9.5。我注意到列名称中有“_”。
当我使用 Select 查询时,连接成功执行了它。查询return变量随心所欲
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>>;
}
}
当我调试这一行时,我得到这个错误:
ERROR[42703] ERROR: column <> not found, error while executing the query
是的,经过多次研究,我得到了答案。由于我使用 PostgreSQL ODBC,查询参数在查询中没有使用 @<name>
,而是使用 ?
,因此您需要将查询公式化为
INSERT INTO <TABLE_NAME> (<COLUMNS>) VALUE ?
并调用参数
cmd.AddWithValue("@<name>",<value>)