Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 905|回复: 0

解决用C#写的窗体应用程序向数据库SQL Server表格中写入中文乱码显示???的方法

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-7-1 09:52:56 | 显示全部楼层 |阅读模式

    在应用程序中尽量使用 nchar、nvarchar 和 nvarchar(max) 替换使用的所有 char、varchar 和 text 数据类型。还有要保证接受数据的数据库的默认字符集是COLLATE Chinese_PRC_CI_AS 

    如下例子中是:

     //添加一个InitAdapter方法,用此方法功能是初始化adapter变量
    1
    private void InitAdapter() 2 { 3 SqlConnection connection =this.getConnection(); 4 adapter = new SqlDataAdapter("select * from Users",connection); 5 adapter.FillLoadOption = LoadOption.OverwriteChanges; 6 //新增 7 SqlCommand InsertCommand = new SqlCommand(); 8 InsertCommand.Connection = connection; 9 InsertCommand.CommandText = "insert into users(ID,Code,Name) values(@ID,@Code,@Name)"; 10 InsertCommand.Parameters.Add("@ID", SqlDbType.Int, 4, "ID"); 11 InsertCommand.Parameters.Add("@Code", SqlDbType.NVarChar, 20, "Code");  //原来使用的SqlDbType.VarChar, 20, "Code"结果出现写入数据库表中的汉字都变成??? 12 InsertCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name"); 13 adapter.InsertCommand = InsertCommand; 14 //修改 15 SqlCommand UpdateCommand = new SqlCommand(); 16 UpdateCommand.Connection = connection; 17 UpdateCommand.CommandText = "update users set Code =@Code,Name =@Name where ID =@ID"; 18 UpdateCommand.Parameters.Add("@ID", SqlDbType.Int, 4, "ID"); 19 UpdateCommand.Parameters.Add("@Code", SqlDbType.NVarChar, 20, "Code"); 20 UpdateCommand.Parameters.Add("@Name", SqlDbType.NVarChar, 50, "Name"); 21 adapter.UpdateCommand = UpdateCommand; 22 //删除 23 SqlCommand DeleteCommand = new SqlCommand(); 24 DeleteCommand.Connection = connection; 25 DeleteCommand.CommandText = "delete users where ID =@ID"; 26 DeleteCommand.Parameters.Add("@ID", SqlDbType.Int, 4, "ID"); 27 adapter.DeleteCommand = DeleteCommand; 28 //添加表映射 29 DataTableMapping TableMapping = new DataTableMapping(); 30 TableMapping = adapter.TableMappings.Add("Users", "Users"); 31 TableMapping.ColumnMappings.Add("Code", "编号"); 32 TableMapping.ColumnMappings.Add("Name", "名称"); 33 TableMapping.DataSetTable = "Users"; 34 }

    语句插入中文数据时数据库显示全是问号???

    SELECT '车速平均值'as   CARSPEED,查询出的结果是????

    解决方法:

    第一种办法:先选中出错的数据库→选中以后右键点击属性会弹出数据库属性 对话框→选中数据库属性对话框中的选项→把选项中的排序规则设置成:Chinese_PRC_90_CI_AS→最后点击确定即可。(注意:在选择数据库属性的时候必须确保你所修改的数据库未被使用才可以修改否则会失败的)

    第二种办法:首先打开你的sql查询分析器(新建查询),然后输入以下代码执行即可:

     

    ALTER DATABASE 数据库名COLLATE Chinese_PRC_90_CI_AS

    解析原因:出现以上情况主要是因为数据库属性的排序规则设置不正确,在Microsoft SQL Server 2005 中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。

    排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。如:

      Chinese_PRC_90_CI_AS

    前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。

    排序规则的后半部份即后缀 含义:

      _BIN 二进制排序

      _CI(CS) 是否区分大小写,CI不区分,CS区分

      _AI(AS) 是否区分重音,AI不区分,AS区分   

      _KI(KS) 是否区分假名类型KI不区分,KS区分 

      _WI(WS) 是否区分宽度WI不区分,WS区分 

    区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。

    区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。

    区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。

    区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项

    附:如果数据库正在被使用会提示错误:

       消息 5030,级别 16,状态 2,第 1 行
       无法用排他锁锁定该数据库,以执行该操作。
       消息 5072,级别 16,状态 1,第 1 行
       ALTER DATABASE 失败。无法将数据库 *** 的默认排序规则设置为 Chinese_PRC_90_CI_AS。

    解决方法:

    确保没有任何用户正在使用数据库,然后将数据库设置为单用户模式。

    在数据库“属性”->"选项"->“限制访问”->“Single”

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-12-22 21:51 , Processed in 0.059059 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表