0

C#を使用してxlsファイルをsqlサーバー2008にインポートするタスクを実行しています.xlsファイルには、xlsファイルに3つの列(ProductCode =英数字の値、Productname =文字列の値、Categoryids =英数字の値)が含まれています。

コードを使用して xls をインポートすると、Productname、Categoryids が読み取られますが、ProductCode は数値のみで、文字を含むコードを読み取れません。

例: 列の値 の例productcode -30-sunscreen-250ml, 04 5056, 045714PC, 10-cam-bag-pouch-navy-dot, 100102

100102と読みますが、[045714PC,04 5056,-30-sunscreen-250ml,10-cam-bag-pouch-navy-dot]が読めません。

解決策を提案してください。

ありがとう

4

1 に答える 1

2

Excel の OLEDB ドライバーは、データの最初の 8 行に基づいて、列のデータを推測します。特定の列の最初の 8 行の大部分が数値であると見なされ、英数字の値を適切に処理できません。

これには 4 つの解決策があります。

  1. 受信データを並べ替えて、最初の 8 行の大部分がその列 (および数値/英数字データが混在するその他の列) に英数字の値を持つようにします。

  2. たとえば、実際にインポートを実行するときに無視する行 2 ~ 9 に偽のデータの行を追加し、厳密に数値であってはならない任意の列に文字が含まれていることを確認します。

  3. レジストリの [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel] にある "TypeGuessRows" という REG_DWORD キーを編集し、8 を 0 に変更します。これにより、Excel は列を推測する前にシート全体を調べます。データ型。ただし、これによりパフォーマンスが低下する可能性があります。(値を 8 から 1 から 16 の間の任意の値に変更することもできますが、それは Excel が参照する行数を変更するだけであり、16 ではまだ不十分な場合があります。)

  4. 接続文字列に「;IMEX=1」を追加します。これにより、値の大部分を調べるのではなく、少なくとも 1 つの数値以外の値を探すようにロジックが変更されます。次に、これをソリューション (1) または (2) と組み合わせて、最初の 8 行内の適切な列に英数字の値が「見える」ようにすることができます。

于 2012-05-03T06:04:50.643 に答える