2 回答

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

TA貢獻1821條經驗 獲得超5個贊
感謝理查迪西莫!我將問題分解為更易于管理的部分:
讀取 csv 文件、添加更多列然后寫出另一個 csv 文件的 c# 控制臺應用程序需要如 Richard 所說的編碼。
using (StreamReader reader = new StreamReader(File.OpenRead(INFILE),
Encoding.Default, true))
{
using (StreamWriter writer = new StreamWriter(File.Open(OUTFILE, FileMode.Create),
Encoding.Default))
這行得通,我驗證了輸出文件包含西班牙變音符號。
我仍然遇到 sql server 2016 數據庫的問題。我嘗試了 COLLATE 參數的幾種變體,但在創建表上不起作用。我發現我需要在 BULK INSERT 語句中指定 CODEPAGE = '1252' 作為參數。然后一旦加載,SELECT 就會正確顯示變音字符,包括我的 c# WinForms 應用程序。
注意:我不需要將西班牙語單詞列 (SpanWord) 更改為 nvarchar。我將它保留為 varchar,因為所有的西班牙方言都包含在 varchar 中。它們僅大于 127。
每個 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 關注
- 238 瀏覽
添加回答
舉報