DataAdapter.Update在执行update方法时抛出异常

时间:2011-05-12 08:22:04

标签: c# odbc dataadapter

我正在使用ODBC Microsoft文本驱动程序将csv文件加载到要在datagridview中显示的数据集中,DGV目前没有列。我可以成功加载文件,但遇到2个问题:

  1. 2列加载正常但第三个'noname'列也被加载 - 为什么会发生这种情况?
  2. 当我使用DataAdapter进行更新时,我遇到了以下异常:
  3.   

    错误[HYS22] [Microsoft] [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,salary,
    charles,4324343,   
    andrew,31343970,
      freddy,998788966,
    loop,8878743,

1 个答案:

答案 0 :(得分:3)

每行数据末尾都有一个逗号。我怀疑ODBC文本驱动程序将此读取为一个额外的列,其中没有数据,也没有名称。因此NoName列。

这也可能解释了将数据导入数据库的问题,因为您有一个无法映射回数据库的额外列。

ODBC文本驱动程序中可能有一个选项可以忽略空列,但我不确定。如果没有,那么您可以通过添加注释掉的行来删除它:

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

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