VS2015环境中,Vb.Net进行sql数据库操作时遇到的中文问号的问题

VS2015环境中,Vb.Net进行sql数据库操作时遇到的中文问号的问题

【背景介绍】

最近在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




猜你喜欢

转载自blog.csdn.net/qq_34039018/article/details/79808848