2016-06-27 8 views
0

SQL Datatableの特殊文字を読み込み、C#のデータテーブルに読み込む際に問題が発生しています。私は現在、私のテーブルを埋めるためにSqlDataAdapterオブジェクトを使用しています:c#DataSetにSQLテーブル(特殊文字を含む)を読み込みます。

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のような文字は、この例では通常のenダッシュ( - これはemダッシュ)ではありません。文字はrest ¿ nowとしてデータセットに表示されます。メンバーの1人がSqlDataReaderを使用しようとしましたが、DataSetにロード機能はありません(DataTableのみ)。他の提案はありますか?

このメソッドが呼び出された後にコードにブレークポイントを置くと、これらの結果が出てくることがわかりました。データセットではrest nowと表示され、このデータセットをCSVファイルにエクスポートする場合はrest ¿ nowで終了します。私の推測では、文字セットはデータセットでサポートされていないので、データセットでサポートされている別の文字に変換されます。

SQLカラムdataType = nvarchar

ありがとう。

EDITED: 私はこれらの文字が一致しない理由を理解しました。これは、emダッシュまたは特殊引用符でOracleにDATAをロードするためです。ただし、Oracleはこれらの文字をサポートしていないため、upsidedownの疑問符がサポートされている別の文字と文字を切り替えます。私は、OracleはUTF8にあり、SQLのデータを検索する(つまり、SQLで一致する文字列を実行する)ためだと思います.SQLには、疑問符が逆さまになる変数があります。

私は皆さんに質問があります。これらの特殊文字をOracle - EM Dashおよび特別な引用符でロードするとき。キャラクターを同じに保つことは可能ですか? SQLで検索すると、それに応じて表示されます。

ありがとうございました。

+0

あなたはそれが正しく表示されないと思っていますか?データセットには表示されません。デバッガ、文字列出力、htmlなどがあります。何かがユニコードをサポートしていないかもしれません。詳細を教えていただけますか? CSVファイル内のテキスト、どうやってそれを保存していますか?多くのプレーンテキストエディタは、その文字セットをサポートしない方法をエンコードします。 – Nikki9696

+0

ここには、CSVエンコーディングに特化したリンクがあります。http://stackoverflow.com/questions/3728282/unicode-in-csv-file – Nikki9696

+0

@ Nikki9696あなたの助けをありがとう!!私は質問を更新しました。これは文字列が一致しなかった理由です。あなたがこの新しい質問の解決策を持っているかどうか教えてください –

答えて

0

これは可能な解決策ですが、テストされていないので心に留めてください!

私はOracleで特殊文字を使用していたこともあります。キャラクターはUTF-16に設定されています。ウムラウトや普通の32-127の範囲外の他のアスキー文字のようなものがありました。

まず、その範囲外のものに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; 

だからこれはあなたのテーブルや特殊文字を持っているどのような場合に「文字列」のデータをロードする必要があり、それが現れるでしょう'&#189'かそのようなものがあります。

using System.Web; 

HttpUtility.HtmlDecode(mystring); 

再び...未テスト:

そして、C#の側には、HTMLデコードで何かを行うことができます。しかし、それを実装するには非常に簡単で、試してみたり、少し微調整したりして作業してください。

データベースのデータフィックスを単に実行して、すべての特殊文字を「通常の」表現(つまり、ダッシュを通常のダッシュに変更)に変更することもできます。 CHR()関数を使用して正規表現を使用したり、DUMP()関数を使用して奇妙なデータを表示したりすることができます。

関連する問題