2014-08-27 39 views
0

我從外部獲取.csv文件,並使用OLEDB寫入數據表。 它運行良好,但連續不會出現在表中的一個值。寫入DataTable時缺少.CSV的某些值

我的代碼寫入到數據表是

File1.PostedFile.SaveAs(Server.MapPath("Uploads\\" + StrFileName)); 
TextBox2.Text = StrFileName; 
int i = 0; 
string strCon; 
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath("Uploads\\") + "; Extended Properties = \"Text;HDR=YES;FMT=Delimited\"";// 
String abc = TextBox2.Text; 
OleDbConnection olecon = new OleDbConnection(strCon); 
OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [" + abc + "]", strCon); 
DataTable myds = new DataTable(); 
myda.Fill(myds); 

我的問題是,得到.CSV我讀一個接一個行插入 我的SQL Server表的表後,但其中一箇中間行有.CSV文件中的數據,但沒有出現在數據表中。

這是怎麼了我得到的數據:在一排(例如:2507141012)

for (i = 0; i <= myds.Rows.Count - 1; i++) 
{ 
    String si21; 
    String si11 = "0"; 
    if (myds.Rows[i][5].ToString().Length == 9) 
    { 
     si21 = si11 + myds.Rows[i][5].ToString(); 
    } 
    else 
    { 
     si21 = myds.Rows[i][5].ToString(); 
    } 
} 

只有一個特定的值有10位丟失,但其他行的其餘10位值通常出現。 在SQL表中插入像

109 0408143119   NULL NULL 0  2.3 NULL NULL NULL NULL NULL  
110 --heres value miss-- NULL NULL NULL 0 2.19 NULL NULL NULL NULL 
111 0408143117   NULL NULL NULL 0 2.29 NULL  NULL NULL NULL  

有人幫助我。

+0

嘗試LumenWorks csv閱讀器http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader它可能會幫助你。 – 2014-08-27 10:24:55

+0

在'i == 109'的循環中設置一個條件斷點。看一下第109行的最後一列,可能會有一個缺失的行分隔符。 – mrtig 2014-08-27 13:20:01

+0

僅在數據表中缺失值,但它出現在.CSV文件中。在讀取和寫入數據表後,我正在做循環。我假設問題在於讀取.CSV文件。如何從.CSV獲取整個數據到DataTable中。 – 2014-08-28 01:35:01

回答

0

你可以用下面的方法擺脫這個問題。

string CSVFilePathName = @file.DirectoryName + "\\" + file.Name; 
string[] Lines = File.ReadAllLines(CSVFilePathName); 
string[] Fields; 
Fields = Lines[0].Split(new char[] { ',' }); 
int Cols = Fields.GetLength(0); 
DataTable dt = new DataTable(); 
//1st row must be column names; force lower case to ensure matching later on. 
for (int i = 0; i < Cols; i++) 
    dt.Columns.Add(Fields[i].ToLower(), typeof(string)); 
DataRow Row; 
for (int i = 1; i < Lines.GetLength(0); i++) 
{ 
    Fields = Lines[i].Split(new char[] { ',' }); 
    Row = dt.NewRow(); 
    for (int f = 0; f < Cols; f++) 
     Row[f] = Fields[f]; 
    dt.Rows.Add(Row); 
}