【背景介绍】
最近在VS2015环境下进行Vb.net编程,使用到了数据库操作,由于sql server这个软件过大,所以选择了VS2015自带的数据库进行操作。但是在进行数据库交互过程中,遇到了insert汉字结果在读取数据时显示为???的问题,在网上解决的方案比较少,不过后来尝试出了一种解决方案,亲测有效。
这是table1的定义如下:
【问题描述】
向表Table1中插入一条(5,'谷永普','A1234','20167',25)的数据,语句代码如下:
Dim cmd As New SqlCommand
Dim aaa As String = New String("insert into Table1 values (5,'谷永普','A1234','20167',25);")
Try
cmd = New SqlCommand(aaa, connection)
cmd.ExecuteNonQuery()
MessageBox.Show("操作成功")
Catch ex As Exception
MessageBox.Show("操作失败")
End Try
运行后,显示操作结果如下图:
可以看出,name部分应该显示为“谷永普”,结果显示为???,如下图:
而直接在脚本中运行sql插入语句,如下图:
结果也一样显示为??,如下如:
这个问题有两种解决方案,分别如下:
在Table1表中直接输入初始化数据,然后刷新表,可以解决问题,如下:
在读取数据时,预输入的数据也是可以正常显示的,如下图:
虽然方案一可以暂时解决中文的问题,但是绝对不是我们想要的,因为无法灵活插入数据。回想问题出现的原因,实际上还是编码的问题,VS2015环境下是以UTF-8形式存储的,可能对中文存在显示异常的情况,当然最深层的原因在这里不进行讨论,着重说一下解决方案。
在进行插入语句时,在汉字前面加上“N”,表示以Unicode编码方式进行存储,Unicode是全球通用编码,可以解决乱码的问题。
如下图:
Dim cmd As New SqlCommand
Dim aaa As String = New String("insert into Table1 values (10,N'谷永普','A1234','20167',25);")
Try
cmd = New SqlCommand(aaa, connection)
cmd.ExecuteNonQuery()
MessageBox.Show("操作成功")
Catch ex As Exception
MessageBox.Show("操作失败")
End Try
运行结果如下:
使用查询语句也一样,要加N,如下图:
Dim ds As DataSet = New DataSet()
Dim adp2 As SqlDataAdapter = New SqlDataAdapter("select * from Table1 where name=N'谷永普';", connection)
adp2.Fill(ds)
Dim adp As SqlDataAdapter = New SqlDataAdapter("select * from Table1", connection)
DataGridView1.DataSource = ds.Tables(0)
运行结果正确,如下图:
转载请注明出处 https://blog.csdn.net/qq_34039018/article/details/79808848