Sql Server参数化查询 插入,中文乱码

Yanjiez
  • 25

使用参数化查询插入数据时,偶尔会插入中文为乱码(概率1%)的数据,代码如下:

...
cmd.CommandText = "insert into tablename (colnumn1,colnumn2) values(@param1,@param2)";
cmd.Parameters.Add("@param1", SqlDbType.NVarChar).Value = "some chinese words";
cmd.Parameters.Add("@param1", SqlDbType.NVarChar).Value = "some chinese words";
...

百度如何消除中文乱码时,查到一种解决方法,就是加N,如:

... values(N'some chinese word') 

但是,如果我结合参数化查询,这样的写的话:

... values(N@param1) 

会报错:Invalid column name 'N@brand'.
请问应该如何解决?

回复
阅读 6k
2 个回答
墨墨墨墨小宇
  • 67

cmd.Parameters.Add("@param1", "some chinese words");
可以直接这样写啊。我这样写没有遇到过中文乱码哎

Unique
  • 811
Function UrlDecode_GBToUtf8(ByVal str)
    Dim B,ub    ''中文字的Unicode码(2字节)
    Dim UtfB    ''Utf-8单个字节
    Dim UtfB1, UtfB2, UtfB3 ''Utf-8码的三个字节
    Dim i, n, s
    n=0
    ub=0
    For i = 1 To Len(str)
        B=Mid(str, i, 1)
        Select Case B
            Case "+"
                s=s & " "
            Case "%"
                ub=Mid(str, i + 1, 2)
                UtfB = CInt("&H" & ub)
                If UtfB<128 Then
                    i=i+2
                    s=s & ChrW(UtfB)
                Else
                    UtfB1=(UtfB And &H0F) * &H1000    ''取第1个Utf-8字节的二进制后4位
                    UtfB2=(CInt("&H" & Mid(str, i + 4, 2)) And &H3F) * &H40        ''取第2个Utf-8字节的二进制后6位
                    UtfB3=CInt("&H" & Mid(str, i + 7, 2)) And &H3F        ''取第3个Utf-8字节的二进制后6位
                    s=s & ChrW(UtfB1 Or UtfB2 Or UtfB3)
                    i=i+8
                End If
            Case Else    ''Ascii码
                s=s & B
        End Select
    Next
    UrlDecode_GBToUtf8 = s
End Function
 
response.write UrlDecode_GBToUtf8("%E6%96%B0%E5%85%B4%E7%BD%91%E7%BB%9C")

--给这个函数给你.看能不能用得到.转编码.
宣传栏