如何使用 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 数据库的 CatalogCollation 为 1252LATIN1,CharSet 为 windows-1252,Collation 为 1252LATIN1,NcharCharSet 为 UTF-8,NcharCollation 为 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'"
我正在尝试通过 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 数据库的 CatalogCollation 为 1252LATIN1,CharSet 为 windows-1252,Collation 为 1252LATIN1,NcharCharSet 为 UTF-8,NcharCollation 为 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'"