使用DB2 CodePage 1252 -EURO(€)符号读取odbc ado.net读取数据
-
02-10-2019 - |
题
在VS 2005 C#中,在将欧元(€)符号插入DB2表中,它是正确存储值的。 disableNicode = 1参数有助于正确存储它。
但是,当我们尝试从桌子上阅读时,它会像下面一样给出垃圾char。
“规格GS 1”
相同的代码在VB 6.0 ADO中工作
请你帮助我好吗。
代码:
OdbcConnection con = new OdbcConnection();
OdbcDataAdapter dataAdapter = new OdbcDataAdapter("SELECT * FROM XXXX.XXXX" , con);
OdbcCommand odbcCommand =
new OdbcCommand(
"INSERT INTO XXXX.XXXX( BREACH_TYPE,JURISDICTION,ACTIVE ,VERIFIED , UPDATED_TS , UPDATED_BY ,VERIFIED_TS ,VERIFIED_BY)VALUES ('Spec GS € 1','IRE','Y','Y',CURRENT TIMESTAMP,'XECCRT3',CURRENT TIMESTAMP,'XECCRT8')");
con.ConnectionString = "DSN=DSNT;UID=xxxxxx;PWD=xxxxxx;MODE=SHARE;DBALIAS=DSNT;DISABLEUNICODE=1;PATCH1=1024;LONGDATACOMPAT=1;LOBMAXCOLUMNSIZE=1048575;PATCH2=6;";
con.Open();
odbcCommand.Connection = con;
odbcCommand.ExecuteNonQuery();
dataAdapter.SelectCommand.CommandTimeout = 0;
DataSet dataSet = new DataSet();
dataAdapter.Fill(dataSet);
DataTable result = dataSet.Tables[0];
string Text = result.Rows[0][0].ToString();
MessageBox.Show(Text = result.Rows[0][0].ToString());
con.Close();
解决方案
从数据集读取文本后,使用以下编码函数显示正确的数据。
private static string ConvertToAsciiString(string str)
{
Encoding source = Encoding.Default ;
Encoding dest = Encoding.Unicode ;
// Convert the string into a byte[].
byte[] sourceBytes = dest.GetBytes(str);
// Perform the conversion from one encoding to the other.
byte[] destBytes = Encoding.Convert(source, dest, sourceBytes);
string asciiString = dest.GetString(destBytes);
asciiString = asciiString.Replace("\0", string.Empty);
return asciiString;
}
不隶属于 StackOverflow