1

ODBC Microsoft Text Driver を使用して csv ファイルをデータセットにロードし、datagridview に表示しています。現在、DGV には列がありません。ファイルを正常にロードできますが、次の 2 つの問題が発生します。

  1. 2 つの列は問題なくロードされますが、3 番目の「noname」列もロードされます。これはなぜですか?
  2. DataAdapter を使用して更新を行うと、次の例外が発生します。

エラー [HYS22] [Microsoft][ODBC Text Driver] 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,

4

1 に答える 1

3

データの各行の終わりにはコンマがあります。ODBC テキスト ドライバーは、これを、データも名前もない余分な列として読み取るのではないかと思われます。したがって、NoName 列です。

データベースにマッピングできない余分な列があるため、これはおそらくデータベースにデータをインポートする際の問題も説明しています。

ODBC Text Driver に空の列を無視するオプションがあるかもしれませんが、よくわかりません。存在しない場合は、コメントアウトされた行を含めることで削除できます。

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

これにより、DataTable から列が削除され、データをデータベースにインポートできるようになります。

于 2011-05-12T08:52:17.820 に答える