簡體   English   中英

PostgreSQL - 錯誤:列“id”是 uuid 類型,但表達式是整數類型

[英]PostgreSQL - ERROR: column “id” is of type uuid but expression is of type integer

我正在嘗試通過 ODBC 驅動Driver={PostgreSQL ANSI(x64)}使用 C# .NET 將一些數據寫入 PostgreSQL 數據庫。 此驅動程序是否有任何已知的數據類型匹配問題?

我正在嘗試發送 GUID 和 DateTime 字段。 數據庫列被輸入為一個uuid和一個timestamp without timezonetimestamp 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 驅動器是否不匹配?

更新

感謝下面的評論,這似乎有效。 我將參數命名為“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();
        }
    }

我不認為@1是 DB 參數的正確名稱。 改變它並嘗試。 我在sqlfiddle 中使用 PostgreSQL9.3 進行了嘗試……它無法將@1識別為參數,而是將其視為整數。

我在那里遇到了這個錯誤:

錯誤:“數據”列的類型為 uuid,但表達式的類型為整數 提示:您需要重寫或轉換表達式。 職位:36

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM