DataAdapter.Update вызывает исключение при использовании метода обновления - PullRequest
1 голос
/ 12 мая 2011

Я использую ODBC Microsoft Text Driver для загрузки файла CSV в набор данных, который будет отображаться в сетке данных, DGV в настоящее время не имеет столбцов.Я могу загрузить файл успешно, но у меня возникают 2 проблемы:

  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, заработная плата,чарльз, 4324343,андрей, 31343970,Freddy, 998788966,петля, 8878743,

1 Ответ

3 голосов
/ 12 мая 2011

В конце каждой строки данных есть запятая. Я подозреваю, что текстовый драйвер ODBC считывает это как дополнительный столбец без данных и имени. Следовательно, столбец NoName.

Вероятно, это также объясняет вашу проблему с импортом данных в базу данных, так как у вас есть дополнительный столбец, который невозможно сопоставить с базой данных.

В драйвере текста ODBC может быть опция игнорирования пустых столбцов, но я не уверен. Если нет, вы можете удалить его, добавив закомментированную строку:

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

Это должно удалить столбец из DataTable и позволить вам импортировать данные в базу данных.

...