2016-04-29 117 views
3

我试图插入像µ为varchar字符,但它不工作,我得到它说如何将特殊字符插入到Advantage SQL数据库中?

不能Unicode字符转换为代码页字符

,因为它是医疗文件的错误消息,我不允许更改任何数据。该计划是写在vb.net,它插入CSV数据转化为优势SQL所以我尝试这个功能

Public Shared Function Convert(ByVal input As String) As String 
     Dim OriginalCodierung As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8") 
     Dim iso8859 As System.Text.Encoding = System.Text.Encoding.GetEncoding("iso-8859-1") 
     Dim enc As System.Text.Encoding = System.Text.Encoding.Default 

     Dim OriginalBytes As Byte() = OriginalCodierung.GetBytes(input) 
     Dim result As Byte() = System.Text.Encoding.Convert(OriginalCodierung, iso8859, OriginalBytes) 
     Dim s As String = enc.GetString(result) 
     Return s 

    End Function 

这在ISO8859 UTF8编码,但它并没有真正的帮助。

如何在不更改数据的情况下使用这些字符插入数据?

+0

我不熟悉那个数据库,但在我用过的其他数据库中,'varchar'只存储单字节字符。例如在SQL Server中,您需要将'nvarchar'用于双字节字符。你的数据库是否有相应的数据类型?如果没有,那么我认为你必须将数据存储为字节而不是字符。 – jmcilhinney

+0

优势数据库服务器只有字符https://devzone.advantagedatabase.com/dz/webhelp/Advantage8.1/server1/adt_field_types_and_specifications.htm – Sparkm4n

回答

2

我不知道这是否会回答你的问题:

使用参数化查询:

using (SqlCommand com = new SqlCommand("INSERT INTO your_Table (column) " + 
             "VALUES (@INPUTVALUE)", con)) 
    { 
    com.Parameters.AddWithValue("@INPUTVALUE", @"""%$#@?,.;"); 
    com.ExecuteNonQuery(); 
    } 

要你一个转义字符前缀他们LIKE表达式转义特殊字符。您可以选择使用ESCAPE关键字使用哪个转义字符。 (如MSDN参考文献)

例如,这逸出%符号,使用\作为转义字符:

SELECT * FROM your_table其中yourcolumnfield LIKE '%15 \折%' ESCAPE '\'

如果你不知道会是什么角色在你的字符串,你不想把他们当作通配符,您可以前缀的所有通配符的使用转义字符,如:

set @msearchString = replace(
       replace(
       replace(
       replace(@myString,'\','\\'), 
         '%','\%'), 
         '_','\_'), 
         '[','\[') 

(请注意,你也必须逃脱你的逃生字符)。那么你可以使用这样的事情:

select * from table where yourcolumnfield like '%' + @msearchString + '%' ESCAPE '\' 
+1

好吧,实际上它并没有真正转换这些字符,但我幸运地找到解决方案,我刚刚将编码更改为1252,如下所示:Dim iso8859 As System.Text.Encoding = System.Text.Encoding.GetEncoding(1252)thanks anyway – Sparkm4n

相关问题