如何使用 ODBC update\insert 将数据 API 放入 NVARCHAR 列

How to update\insert data into a NVARCHAR column using ODBC API

我正在尝试通过 Microsoft 的 ODBC API 更新 Sybase table。以下是我要执行的 C++ 的基础知识。在 table 中,TableNameXXX、ColumnNameXXX 的类型为 NVARCHAR( 200 )。

   SQLWCHAR updateStatement[ 1024 ] = L"UPDATE TableNameXXX SET ColumnNameXXX = N 'Executive Chair эюя' WHERE PKEYXXX = 'VALUE'";
   if( ret = SQLExecDirect( hstmt, ( SQLWCHAR* ) updateStatement, SQL_NTS ) != SQL_SUCCESS )
   {
       // Handle Error
   }

Sybase 数据库的 CatalogCollat​​ion 为 1252LATIN1,CharSet 为 windows-1252,Collat​​ion 为 1252LATIN1,NcharCharSet 为 UTF-8,NcharCollat​​ion 为 UCA。

一旦这适用于 Sybase ODBC 连接,我需要让它在其他数据库的各种其他 ODBC 驱动程序中工作。

我得到的错误是“[Sybase][ODBC Driver][SQL Anywhere]第 1 行 'Executive Chair ' 附近的语法错误”

如果我取出 Unicode 字符并删除 N,它将更新。

有谁知道如何让它工作?我错过了什么?

我使用 ODBCConnection 编写了一个 C# .net 项目到 SQL 服务器数据库,但我遇到了 "sort of" 相同的错误。我的意思是有点像这个错误在消息中包含 Unicode 文本,而 Sybase ODBC 错误有 "lost" unicode。

  static void Main(string[] args)
  {
     using (OdbcConnection odbc = new OdbcConnection("Dsn=UnicodeTest;UID=sa;PWD=password")) // ;stmt=SET NAMES 'utf8';CharSet=utf16"
     //using (OdbcConnection odbc = new OdbcConnection("Dsn=Conversion;CharSet=utf8")) // ;stmt=SET NAMES 'utf8';CharSet=utf8
     {
        try
        {
           odbc.Open();

           string queryString = "UPDATE TableNameXXX SET ColumnNameXXX = N 'Executive Chair эюя' WHERE PKEYXXX = 'AS000008'";
           System.Console.Out.WriteLine(queryString);
           OdbcCommand command = new OdbcCommand(queryString);
           command.Connection = odbc;
           int result = command.ExecuteNonQuery();
           if( result == 1)
           {
              System.Diagnostics.Debug.WriteLine("Success");
           }
        }
        catch(Exception ex)
        {
           System.Diagnostics.Debug.WriteLine(ex.StackTrace);
           System.Diagnostics.Debug.WriteLine(ex.Message);
        }
     }
  }

"ERROR [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near 'Executive Chair эюя'."

N 和 Unicode 封闭字符串之间不应有 space。

"UPDATE TableNameXXX SET ColumnNameXXX = N 'Executive Chair эюя' WHERE PKEYXXX = 'AS000008'"

应该是

"UPDATE TableNameXXX SET ColumnNameXXX = N'Executive Chair эюя' WHERE PKEYXXX = 'AS000008'"