c#读取SQL表(带特殊字符)到数据集
本文关键字:特殊字符 数据集 读取 SQL | 更新日期: 2023-09-27 17:52:44
我有一个问题从SQL数据表中读取特殊字符并加载到c#中的数据表中。我目前使用SqlDataAdapter来填充我的表:
using (oSQLConnection = new SqlConnection(oDBConnection.ConnectionString))
{
oSQLConnection.Open();
using (oSQLDataAdapter = new SqlDataAdapter(sQuery, oSQLConnection))
{
oSQLDataAdapter.SelectCommand.CommandTimeout = 0;
oSQLDataAdapter.Fill(DataSource, sTableName);
}
}
但是对于特殊字符,如Sam’s
,这不能很好地工作,注意引号,这不是一个正常的引号。此外,像rest – now
这样的字符不是一个正常的连字符(-它是一个em连字符),对于这个例子,字符将在数据集中显示为rest ¿ now
。其中一个成员说尝试使用SqlDataReader,但是DataSet没有加载函数(只有DataTable) -你们有其他建议吗?
我发现这些结果是这样出来的,如果我在这个方法被调用后在代码中放置一个断点。在数据集中,它将显示为rest now
,如果我要将此数据集导出为csv文件,它将与rest ¿ now
一起脱落。我的猜测是该字符在数据集中不受支持,因此它转换为数据集支持的另一个字符。
SQL Column datattype = nvarchar
谢谢。
编辑:好了,伙计们,我知道为什么这些字符不匹配了。这是因为我们用em破折号或特殊引号将DATA加载到Oracle中。然而,Oracle不支持这些字符,所以他们将字符切换为支持颠倒问号的另一个字符。我相信这是因为Oracle是在UTF8和我们检索数据在SQL(即。在SQL中做字符串匹配)因为SQL有变量来作为颠倒的问号,它们不匹配。
我有一个问题要问你们。当我们在Oracle - EM中加载这些特殊字符时,破折号和特殊引号。有可能保持角色不变吗?所以在SQL中检索时,结果是
谢谢。
这是一个可能的解决方案,但它未经测试,所以记住这一点!
我遇到了一个类似的问题前一段时间在Oracle的特殊字符。我们的字符集是UTF-16。有一些奇怪的东西,比如在正常的32-127范围之外的变音符和其他ascii字符。
你可以尝试的一件事是首先做一个HTML编码到该范围之外的任何东西,加载到你的数据表在c#中,然后作为数据表填充(或之后它被填充…),执行一个HTML解码对这些字段。
我们有一个html编码函数为我们做这些,像这样:
FUNCTION HTML_Encode_Special_Characters
(p_string IN VARCHAR2,
p_do_encode IN VARCHAR2 DEFAULT 'Y')
RETURN VARCHAR2 IS
first_location number := REGEXP_INSTR(p_string, '([^' || CHR(1) || '-' || CHR(127) || '])');
v_string VARCHAR2(32000);
v_char VARCHAR2(1 char);
v_ascii_number number;
BEGIN
IF p_do_encode = 'Y' AND first_location > 0 THEN
v_string := p_string;
FOR i IN first_location .. length(v_string) LOOP
v_char := substr(v_string,i,1);
v_ascii_number := ascii(v_char);
IF v_ascii_number > 128 THEN
-- just replace all of them
v_string := REPLACE (v_string, v_char,'&#' || v_ascii_number || ';');
END IF;
END LOOP;
RETURN (v_string);
ELSE
RETURN p_string;
END IF;
END;
这将加载"string"数据到你的表中如果你有特殊字符,它会显示为'½'或者类似的东西
然后在c#端你可以做一些html解码:
using System.Web;
HttpUtility.HtmlDecode(mystring);
再次…未测试。但它应该非常容易实现和测试和/或稍微调整它以使其工作。
另一种解决方案是简单地在数据库上执行数据修复,将所有这些特殊字符更改为"常规"表示(即,将-破折号更改为普通破折号)。您可以使用一些正则表达式,使用CHR()函数,并使用DUMP()函数查看奇数数据。