2

我有一个类似的 postgresql 表

CREATE TABLE "T"
(
  "D" timestamp without time zone NOT NULL,
  "C" character(2) NOT NULL,
  CONSTRAINT "PK" PRIMARY KEY ("D", "C")
)
WITH (
  OIDS=FALSE
);

并使用存储桶 nanodbc 请求插入其中。喜欢

int rowCount = 3;
m_apStatement.reset(new nanodbc::statement(m_connection));
prepare(*m_apStatement, “insert into T (D, C) values (?, ?)”);
char n[1000][2];
for (int i = 0; i < rowCount; i++)
{
    n[i][0] = 'a' + i;
    n[i][1] = 0;
}
std::vector<nanodbc::timestamp> dtBuf; …
statement.bind(0, &(dtBuf[0]), rowCount);
statement.bind_strings(1, reinterpret_cast<const char *>(n), 2, rowCount);
execute(*m_apStatement, rowCount);

我得到“ОШИБКА: значение не умещается в тип character(2);” (“错误:值不适合类型字符(2)”)

在数据库中增加到 character(9) 没有帮助。我看到了读取长度为 255 的 ODBCGetFieldDescription 之类的逻辑,我在 statement.impl->bind_len_or_null_[0] 中看到了 255。

有人知道修复或解决方法吗?我填写了一个问题https://github.com/nanodbc/nanodbc/issues/173,也许一位支持者写道,我使用的是旧版本 2.1,并且有一些关于字符串的修复。在主分支中。我使用 Visual Studio 2013 并且不再支持它......

Postgresql 9.3.3,最新的 ODBC 驱动程序,Win 7 x64

4

0 回答 0