【问题标题】:DataAdapter.Update throwing an exception while execting update methodDataAdapter.Update 在执行更新方法时抛出异常
【发布时间】:2011-08-23 22:24:04
【问题描述】:

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

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

错误 [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,
安德鲁,31343970,
弗雷迪,998788966,
循环,8878743,

【问题讨论】:

    标签: c# odbc dataadapter


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      相关资源
      最近更新 更多