2012-07-17 71 views
1

可能重複:
How in .Net do I Import Values from a CSV in the format I want using OleDB?閱讀數字作爲字符串

我有我讀使用OleDbCommand的CSV文件。

CSV包含的列是用左邊填充0的數字。 當我讀取列時,得到的結果沒有任何前導0個字符:現在是一個數字。

這些值在CSV:

UserNumber LocationNumber 
000
00891234  00000456 

成爲

UserNumber LocationNumber 
1234  23456 
891234  456 

在我的OleDbDataAdapter的填充結果DataTable。

有什麼辦法可以防止這種情況發生?

PS,填充不是問題,但由於所做工作的性質,並不是一個很好的解決方案,因爲CSV文件沒有設置格式。

+0

你有沒有對如何創建CSV文件控制? – Chandu 2012-07-17 11:24:42

+0

@Chandu - 不,我不知道。我們的客戶用它來在他們的網站上導入數據。我們的客戶從SAP出口和其他超出我們及其控制範圍的來源獲得這些Csv文件。 – callisto 2012-07-17 11:27:45

+0

我認爲@Stuart引用的其他帖子解決了您的問題。檢查 – Chandu 2012-07-17 11:29:39

回答

1

在我看來,你似乎不會介意,只是把整個文件看作字符串。你可以很容易地構建你的Schema.ini文件。

使用原來的連接:

DataTable GetSchemaTable() 
{ 
    try 
    { 
     OleDbDataAdapter da; // init adapater with your own connection 
     DataSet ds = new DataSet(); 
     System.Data.DataTable[] dtTables = da.FillSchema(ds, SchemaType.Source); 
     return dtTables[0]; 
    } 
    catch (System.Exception se) 
    { 
     throw new System.Exception("Problem retrieving Schema: " + se.Message); 
    } 
} 

void CreateSchemaIni(string csvDirectory, string csvFileName) 
{  
    DataTable dt = GetSchemaTable(); 
    FileStream fsOutput = new FileStream(csvDirectory + "\\schema.ini", FileMode.Create, FileAccess.Write); 
    StreamWriter srOutput = new StreamWriter(fsOutput); 
    string s1, s2, s3; 
    s1 = "[" + csvFileName + "]"; 
    s2 = "ColNameHeader=False"; 
    s3 = "Format=CSVDelimited"; 
    srOutput.WriteLine(s1 + '\n' + s2 + '\n' + s3 + '\n'); 
    StringBuilder strB = new StringBuilder(); 
    for (int i = 1; i <= dt.Columns.Count; i++) 
    { 
     strB.Append("Col" + i.ToString()); 
     strB.Append("=F" + i.ToString()); 
     strB.Append(" Text\n"); 
     srOutput.WriteLine(strB.ToString()); 
     strB = new StringBuilder(); 
    } 
    srOutput.Close(); 
    fsOutput.Close(); 
}