2 回答

TA貢獻(xiàn)2039條經(jīng)驗(yàn) 獲得超8個(gè)贊
這個(gè)問題有太多可能的問題。您應(yīng)該關(guān)注數(shù)據(jù)旅程中的每一步,并確保數(shù)據(jù)仍然“良好”。一旦你找到一個(gè)特定的問題,你就可以研究那個(gè)特定的問題,如果你找不到答案,那么你應(yīng)該為那個(gè)問題創(chuàng)建一個(gè)MCVE,然后你可以提出一個(gè)問題。
以下是一些高級(jí)提示: 您應(yīng)該通過調(diào)試確保正在讀取 CSV 文件的程序正確讀取字符。如果不是,最可能的原因是編碼:更改讀取器以根據(jù)字節(jié)順序標(biāo)記決定編碼,如下所示:
new StreamReader(INFILE, Encoding.Default, true)
如果這不起作用,您可以具體告訴它使用哪種編碼。(您可以通過在記事本中打開文件并執(zhí)行“另存為...”來(lái)查看文件的編碼。)
然后,您還需要確保使用適當(dāng)?shù)木幋a編寫文件 - 我建議使用輸入文件的任何編碼。
我懷疑您需要將數(shù)據(jù)庫(kù)字段更改為nvarchar
,除非您需要的所有字符都被varchar
. 一旦正確,并且文件具有正確的編碼,則該文件的批量插入應(yīng)該可以工作。
您沒有顯示將數(shù)據(jù)從數(shù)據(jù)庫(kù)讀取到 WinForms 應(yīng)用程序的代碼;所以我只能猜測(cè)那里沒有問題。

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
感謝理查迪西莫!我將問題分解為更易于管理的部分:
讀取 csv 文件、添加更多列然后寫出另一個(gè) csv 文件的 c# 控制臺(tái)應(yīng)用程序需要如 Richard 所說的編碼。
using (StreamReader reader = new StreamReader(File.OpenRead(INFILE),
Encoding.Default, true))
{
using (StreamWriter writer = new StreamWriter(File.Open(OUTFILE, FileMode.Create),
Encoding.Default))
這行得通,我驗(yàn)證了輸出文件包含西班牙變音符號(hào)。
我仍然遇到 sql server 2016 數(shù)據(jù)庫(kù)的問題。我嘗試了 COLLATE 參數(shù)的幾種變體,但在創(chuàng)建表上不起作用。我發(fā)現(xiàn)我需要在 BULK INSERT 語(yǔ)句中指定 CODEPAGE = '1252' 作為參數(shù)。然后一旦加載,SELECT 就會(huì)正確顯示變音字符,包括我的 c# WinForms 應(yīng)用程序。
注意:我不需要將西班牙語(yǔ)單詞列 (SpanWord) 更改為 nvarchar。我將它保留為 varchar,因?yàn)樗械奈靼嘌婪窖远及?varchar 中。它們僅大于 127。
每個(gè) MS:
CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' }
Specifies the code page of the data in the data file. CODEPAGE is relevant
only if the data contains char, varchar, or text columns with character values
greater than 127 or less than 32.
- 2 回答
- 0 關(guān)注
- 245 瀏覽
添加回答
舉報(bào)