列<&书信电报;列名称>&燃气轮机;在插入查询中使用Postgresql的ADO-NET连接时未找到
我在为PostgreSQL使用ADO.NET连接时遇到问题。我使用PSQLDBC驱动程序12.000.000(ANSI和Unicode)尝试了此查询。我使用PostgreSQL v.9.5。我注意到列名的名称中有“\” 当我使用Select查询时,连接成功地执行了它。查询返回我想要的变量列<&书信电报;列名称>&燃气轮机;在插入查询中使用Postgresql的ADO-NET连接时未找到,postgresql,ssis,ado.net,Postgresql,Ssis,Ado.net,我在为PostgreSQL使用ADO.NET连接时遇到问题。我使用PSQLDBC驱动程序12.000.000(ANSI和Unicode)尝试了此查询。我使用PostgreSQL v.9.5。我注意到列名的名称中有“\” 当我使用Select查询时,连接成功地执行了它。查询返回我想要的变量 using (OdbcConnection conn = (OdbcConnection)Dts.Connections["XXX"].AcquireConnection(Dts.Trans
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>>;
}
}
使用(OdbcConnection conn=(OdbcConnection)Dts.Connections[“XXX”].AcquireConnection(Dts.Transaction))
{
尝试
{
如果(连接状态!=连接状态打开)
{
conn.Open();
}
}
捕获(例外e)
{
字符串err=e.Message.ToString();
控制台写入线(错误);
}
尝试
{
OdbcCommand cmd=新的OdbcCommand();
cmd.Connection=conn;
cmd.CommandType=CommandType.Text;
cmd.CommandText=“从何处选择XX”;
...
OdbcDataReader rdd=cmd.ExecuteReader();
while(rdd.Read())
{
;
}
康涅狄格州关闭();
}
捕获(异常捕获器)
{
;
}
}
但是当我使用Insert query时,它无法检查列名,即使该列存在于我的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>>;
}
}
使用(OdbcConnection conn2=(OdbcConnection)Dts.Connections[“OJK_REPORTING_DEV”]。获取连接(Dts.Transaction))
{
尝试
{
if(conn2.State!=ConnectionState.Open)
{
conn2.Open();
}
}
捕获(例外e)
{
字符串x=e.Message.ToString();
}
尝试
{
OdbcCommand cmd=新的OdbcCommand();
cmd.Connection=conn2;
cmd.CommandType=CommandType.Text;
cmd.CommandText=“插入()值()”;
;
cmd.ExecuteNonQuery();
conn2.Close();
}
捕获(例外e)
{
;
}
}
调试此行时,出现以下错误:
错误[42703]错误:未找到列,执行查询时出错
对,经过几次研究,我得到了答案。由于我使用PostgreSQL ODBC,因此查询参数在查询中没有使用
@
,而是使用?
,因此您需要像下面这样对查询进行公式化
INSERT INTO <TABLE_NAME> (<COLUMNS>) VALUE ?
插入()值?
并调用参数
cmd.AddWithValue("@<name>",<value>)
cmd.AddWithValue(“@”,)