2011-05-12 45 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"); 

这应该从数据表中删除列,并允许您将数据导入到数据库中。