我試圖使用C#.NET將一些數據寫入PostgreSQL數據庫,通過ODBC驅動程序Driver={PostgreSQL ANSI(x64)}
。此驅動程序是否有任何已知的數據類型匹配問題?PostgreSQL - 錯誤:列「ID」類型爲uuid,但表達式類型爲整數
我想發送一個GUID和DateTime字段。數據庫列鍵入爲uuid
和timestamp without timezone
。當我嘗試發送任一個時,我收到錯誤。當我送GUID到uuid字段中,我回到這個錯誤: ERROR: column "id" is of type uuid but expression is of type integer
對於日期時間,我得到如下:ERROR: column "createdate" is of type timestamp without time zone but expression is of type integer;
下面是一些短代碼,說明了這個問題。這種失敗:
var p = new OdbcParameter
{
ParameterName = "@1",
DbType = DbType.Guid, // I also tried OdbcType = OdbcType.UniqueIdentifier
Value = Guid.NewGuid()
};
var sql = "INSERT INTO mytable (id) VALUES (@1)";
using(var conn = new OdbcConnection(_connectionString))
{
conn.Open();
using (var command = new OdbcCommand(sql))
{
command.CommandType = CommandType.Text;
command.Parameters.Add(p);
command.Connection = conn;
command.ExecuteNonQuery();
}
}
作爲一個全面的檢查,我與SQL注入嘗試過了,它的工作原理:
var sql = "INSERT INTO mytable (id) VALUES ('" + Guid.NewGuid().ToString("N") + "')";
using (var conn = new OdbcConnection(_connectionString))
{
conn.Open();
using (var command = new OdbcCommand(sql))
{
command.CommandType = CommandType.Text;
command.Connection = conn;
command.ExecuteNonQuery();
}
}
如果我涉及的日期時間字段,我得到了相同的結果,不同的錯誤信息。
ODBC驅動器不匹配的東西?
UPDATE
由於下面的評論,這似乎工作。我將參數命名爲「x」並用於? (問號)在INSERT語句中。看起來參數是位置的。
var p = new OdbcParameter
{
ParameterName = "x",
DbType = DbType.Guid,
Value = Guid.NewGuid()
};
var sql = "INSERT INTO mytable (id) VALUES (?)";
using(var conn = new OdbcConnection(_connectionString))
{
conn.Open();
using (var command = new OdbcCommand(sql))
{
command.CommandType = CommandType.Text;
command.Parameters.Add(p);
command.Connection = conn;
command.ExecuteNonQuery();
}
}
上,我應該嘗試什麼有什麼建議?我剛剛嘗試過'@ x'和':myparam'。對於@x,它表示x不是列名,對於:myparam,它不喜歡冒號。 – 010110110101
你可以試試$ x或$ 1嗎?我只是在Google上搜索......似乎有點混亂:P – SamGhatak
確定問號?在INSERT語句中工作,像在x中的隨機單詞在Parameter對象中工作。然而,由於它無論如何似乎都是位置,名稱並不重要。 – 010110110101