当我尝试提取其中存储了表情符号的 nvarchar 列值时,VB.net 中的数据显示为“??”

When I try to pull nvarchar column value that has an emojis stored in it, the data in VB.net it displays as '??'

当我尝试使用 VB.net 从数据库中提取表情符号值时,表情符号显示为“??”

我需要在我的存储过程中进行某种类型的转换吗?

Private Function DisplayEmoji(input As String) As String
    Dim output As New StringBuilder()
    Dim enumerator = StringInfo.GetTextElementEnumerator(input)
    While enumerator.MoveNext()
        Dim chunk As String = enumerator.GetTextElement()
        If Char.IsSurrogatePair(chunk, 0) Then
            output.Append("<img src=""" + "https://abs.twimg.com/emoji/v1/72x72/" + Char.ConvertToUtf32(chunk, 0).ToString("x") + ".png"" style=""height:1.5em; width:1.5em;"">")
        Else
            output.Append(chunk)
        End If
    End While
    Return output.ToString()
End Function

或者插入您的图像 Blob 类型并读取 sql。

Dim filePath As String = Server.MapPath("APP_DATA/test.png")
Dim filename As String = Path.GetFileName(filePath)

Dim fs As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)
Dim br As BinaryReader = New BinaryReader(fs)
Dim bytes As Byte() = br.ReadBytes(Convert.ToInt32(fs.Length))
br.Close()
fs.Close()

将图像插入数据库

Dim strQuery As String = "insert into tblFiles(Name, ContentType, Data) values (@Name, @ContentType, @Data)"
Dim cmd As SqlCommand = New SqlCommand(strQuery)
cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename
cmd.Parameters.Add("@ContentType", SqlDbType.VarChar).Value = "image/png"
cmd.Parameters.Add("@Data", SqlDbType.Binary).Value = bytes
InsertUpdateData(cmd)

插入更新数据

Public Function InsertUpdateData(ByVal cmd As SqlCommand) As Boolean
    Dim strConnString As String = System.Configuration.
    ConfigurationManager.ConnectionStrings("conString").ConnectionString
    Dim con As New SqlConnection(strConnString)
    cmd.CommandType = CommandType.Text
    cmd.Connection = con
    Try
      con.Open()
      cmd.ExecuteNonQuery()
      Return True
    Catch ex As Exception
      Response.Write(ex.Message)
      Return False
    Finally
      con.Close()
      con.Dispose()
    End Try
End Function