Search code examples
vb.netsql-server-2008utf-8nvarchar

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


When I try to pull the emoji value from the database using VB.net the emoji is displayed as '??'

Is there some sort of conversion I need to do in my stored procedure?


Solution

  • 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
    

    Or insert your image Blob type and read 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()
    

    Insert to Database yor image

    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)
    

    InsertUpdateData

    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