2011-05-12 92 views
1

我正在使用ODBC Microsoft Text Driver將csv文件加載到要在datagridview中顯示的數據集中,但DGV目前沒有列。我可以成功地加載該文件,但我遇到的兩個問題:DataAdapter.Update在執行更新方法時拋出異常

  1. 的兩列裝載罰款,但還裝載第三「NONAME」列 - 爲什麼會發生這種情況?
  2. 當我使用DataAdapter做一個更新,我得到這個異常:

錯誤[HYS22] [微軟] [ODBC文本驅動程序] INSERT INTO語句包含以下未知的字段名稱:「NONAME 」。確保您輸入了正確的名稱,然後再次嘗試操作。

有沒有人知道爲什麼會發生這種情況?

//RefreshData Method() 
OdbcConnection conn = new OdbcConnection(@"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\;"); 

OdbcCommand comm = new OdbcCommand("Select * FROM test.csv", conn); 
OdbcDataAdapter adapter = new OdbcDataAdapter(comm); 
DataSet ds = new DataSet(); 
adapter.Fill(ds); 
// ds.Tables[0].Columns.Remove("noname"); 
dataGridView1.DataSource = ds.Tables[0]; 
} 

//Button Click Method 
OdbcConnection conn = new OdbcConnection(@"Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=c:\;"); 
string qry = "Select * FROM test.csv"; 
OdbcDataAdapter da = new OdbcDataAdapter(); 
da.SelectCommand = new OdbcCommand(qry, conn); 

OdbcCommandBuilder cb = new OdbcCommandBuilder(da); 

DataSet ds = new DataSet(); 
da.Fill(ds); 

//ds.Tables[0].Columns.Remove("noname"); 

DataTable dt = ds.Tables[0]; 

// Add a row 
DataRow newRow = dt.NewRow(); 
newRow[0] = this.textBox1.Text; 
newRow[1] = int.Parse(this.textBox2.Text); ; 
dt.Rows.Add(newRow); 

da.Update(ds.Tables[0]); 

conn.Close(); 

this.Refresh(); 

CSV數據:

empName,工資,
查爾斯,4324343,
安德魯,31343970,
弗蕾迪998788966,
環,8878743,

回答

3

有每行數據末尾有一個逗號。我懷疑ODBC文本驅動程序將此讀取爲一個額外的列,其中沒有數據並且沒有名稱。因此NoName列。

這可能也解釋了將數據導入數據庫的問題,因爲您有一個額外的列無法映射回數據庫。

在ODBC文本驅動程序中可能有一個選項忽略空列,但我不確定。如果沒有,那麼你可以通過包括註釋掉行刪除它:

//ds.Tables[0].Columns.Remove("noname"); 

這應該從數據表中刪除列,並允許您將數據導入到數據庫中。