当前位置:首页 > 系统运维 > 正文内容

SQL Server unicode 支持的具体体现

a8116255316年前 (2010-07-12)系统运维11

以下的文章主要向大家讲述的是SQL Server unicode 支持,假如你对SQL Server unicode的实际应用有兴趣了解的话,你就可以通过以下的文章对其有更好的了解,以下就是具体方案的描述,希望在你今后的学习中会有所帮助。

所有的文档和网上的文章都说N可以解决问题。但假如使用wstring bind后select...,则会发现得到的 wstring 格式的column很大可能结果是乱码。

其实可以这样解释这个问题:键盘是没法输入uniocde编码的,除非用微软拼音的内码输入。因此数据库的客户端软件输入表的内容并非SQL Server unicode,即使在表设计的时候用了N。因此select出来的结果并不能用wsting来解析。

那么我们怎么在初始化数据库的时候使用SQL Server unicode字符串呢?

SQLRETURN SQLExecDirect(  SQLHSTMT StatementHandle,  SQLCHAR * StatementText,  SQLINTEGER Textlength);  

sql 在执行的时候,调用SQLExecDirect,其sql语句是SQLCHAR 类型,其实就是unsigned char 的一段空间,并不一定要求这是一个以''结尾的ascii 字符串。假如StatementText是一个ascii 字符串,TextLength可以设置为SQL_NTS。

StatementText是可以嵌入SQL Server unicode字符的,比如使用INSERT INTO T (c1,c2) VALUES(N'unicode string',data),这时候TextLength要填入整个串的长度而不是SQL_NTS。

拼写出这样一个串既不能用窄字符串的函数 *** ,也不能用宽字符串的函数 *** 。这里使用memcpy类的函数来构造这样的串,然后调用SQLExecDirect,取得了成功。比如,

USE [test]  go  SET ANSI_NULLS ON  GO  SET QUOTED_IDENTIFIER ON  GO  CREATE TABLE [dbo].[ *** 薄](  [姓名] [ntext] NULL,  [ *** ] [nchar](32) NULL  ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]  /*  * insert a unicode string into the table  *  */  struct buf_s{  void * buf;  int len;  };  /*  *just be same as memcpy ,except for the return.  */  int memapend(void * dst, void * src ,int len)  {  memcpy(dst,src,len);  return len;  }  void insert()  {  unsigned char sql_buf[256]={0};  int len_sql=0;  char str1[]="insert into  *** 薄 (姓名, *** ) values(N'";  int len1=strlen(str1);  wchar_t str2[]=L"张三";  int len2=wcslen(str2)*sizeof(wchar_t);  char str3[]="',N'";  int len3=strlen(str3);  wchar_t str4[]=L"010123456";  int len4=wcslen(str4)*sizeof(wchar_t);  char str5[]="')";  int len5=strlen(str5);  buf_s buf_s_a []={str1,len1,  str2,len2,  str3,len3,  str4,len4,  str5,len5};  for (int i=0;i<sizeof(buf_s_a)/sizeof(buf_s);i++)  {  len_sql+=memapend(sql_buf+len_sql, buf_s_a[i].buf,buf_s_a[i].len);  }  SQLExecDirect(h,sql_buf,len_sql);  }  btw:find a good site for ms_sqlserver:  

以上的相关内容就是对SQL Server unicode 支持的介绍,望你能有所收获。

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/21890.html

分享给朋友:

“SQL Server unicode 支持的具体体现” 的相关文章

windows 7鼠标停顿怎么办?windows 7 usb鼠标停顿的原因以及解决

windows 7鼠标停顿怎么办?windows 7 usb鼠标停顿的原因以及解决

很多使用Windows 7系统的朋友都想小编反应,假如暂停使用电脑,鼠标会出现停顿现象,这是怎么回事呢 该怎么解决呢 下面就和小编一起去看下Windows 7 usb鼠标停顿的解决方法吧。 由于Windows 7系统中有一项USB选择性暂停造成的。这项设置主要为了节电,当他检测到用户没有对系统进行...

如何设置Win 7通知栏重新显示电源按钮

如何设置Win 7通知栏重新显示电源按钮

有些使用本本的朋友可能会发现,右下角通知栏区域会无法显示电源按钮,导致在插上电源或者是使用电池的时候都无法进行区分。造成这种情况大部分都是因为使用了第三方修改过的系统版本或者对于系统优化过度,所以今天就来解决这个问题。 第一步:在开始菜单的搜索窗口输入“gpedit.msc”,进入组策略编辑器,依...

上帝不止一个 更多Windows7 快捷模式.

上帝不止一个 更多Windows7 快捷模式.

国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

Win 7系统中其他声音正常但酷狗音乐没声音怎么回事

故障现象: Windows 7酷狗软件无声音,系统声音正常。 原因分析: 1. 查看酷狗软件设置 2. 查看系统设置 解决方案: 1. Windows 7操作方法 如图:查看是否处于禁音状态   Windows 7系统声音正常酷狗音乐无声音 2. 查看设置音频输出是否...

windows 7系统怎么取消禁ping命令?

windows 7系统怎么取消禁ping命令?

当我在虚拟机的linux系统中ping本机的ip发现ping不通,而本机可以ping通虚拟机中的ip。应该是出于安全考虑吧,Windows 7默认在防火墙里禁止了。 1、查看主机ip 打开“开始”程序中的“附件”,找到“命令提示符”打开。输入命令:ipconfig,可以看到本机的ip是192.1...

windows 7旗舰版系统提示应用程序错误代码0xc0000409的故障原因

windows 7旗舰版系统提示应用程序错误代码0xc0000409的故障原因

问题现象,具体如下所示:  故障分析: 一般来说,出现这种情况是因为电脑误删系统文件或者是系统文件被顽固木马破坏。       解决方法: 1、下载360安全卫士,找到里面的急救箱开始急救,然后进行修复,完成后重新启动; 2、下载瑞...