Alex Kostikov
Дата: 09.11.2004 23:04:02
В MSAccess создаю таблицу Result, поля:
Code, No – числовые
Var,Val – текстовые
ключевое поле отсутствует.
Вот код программы, вызывающий исключение, помогите пожалуйста понять, почему выставился флаг HasErrors и как все-таки сохранить результаты:
Обработчик кнопки:
if( openFileDialog1.ShowDialog() != DialogResult.OK ) return;
string conStr = "provider=Microsoft.JET.OLEDB.4.0; " + "data source=" + openFileDialog1.FileName;
string selStr = "SELECT * FROM Result";
OleDbConnection con = new OleDbConnection(conStr);
OleDbDataAdapter da = new OleDbDataAdapter();
da.SelectCommand = new OleDbCommand(selStr,con);
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
con.Open();
DataSet ds = new DataSet();
da.Fill(ds, "Result");
dataGrid1.DataSource = ds.Tables["Result"].DefaultView;
// отображает правильно
object[] rowVals = new object[4];
rowVals[0] = 5;
rowVals[1] = 5;
rowVals[2] = "value";
rowVals[3] = "value";
ds.Tables["Result"].Rows.Add(rowVals);
// если поставить задержку, то покажет новый ряд
DataSet changes = ds.GetChanges();
// в changes правильно заностся новый ряд
string s = "";
try
{
da.Update(changes, "Result");
}
catch( OleDbException oleE )
{
s = "Message: " + oleE.Message + "\n" +
"Sourse: " + oleE.Source + "\n" +
"Command: " + cb.GetInsertCommand().CommandText + "\n" +
"Errors in changes: " + changes.HasErrors;
MessageBox.Show(s);
// на главной форме слева на dataGrid1 во введенном ряду стоит !
}
finally
{
con.Close();
}
s получает значение:
Message: Ошибка синтаксиса в инструкции INSERT INTO.
Sourse: Microsoft JET Database Engine
Command: INSERT INTO Result( Code , No , Var , Val ) VALUES ( ? , ? , ? , ? )
Errors in changes: True