Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Работа с .mdb через ADO.NET / 4 сообщений из 4, страница 1 из 1
09.11.2004, 23:04
    #32774516
Alex Kostikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с .mdb через ADO.NET
В 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
...
Рейтинг: 0 / 0
09.11.2004, 23:28
    #32774524
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с .mdb через ADO.NET
ты используешь в качестве имени поля название функции Var.
добавь 2 строки:
Код: plaintext
1.
2.
OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
cb.QuotePrefix="[";
cb.QuoteSuffix="]";
...
Рейтинг: 0 / 0
10.11.2004, 08:37
    #32774648
Worobjoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с .mdb через ADO.NET
И еще [Val]
...
Рейтинг: 0 / 0
10.11.2004, 21:32
    #32776383
Alex Kostikov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с .mdb через ADO.NET
Спасибо, помогло
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Работа с .mdb через ADO.NET / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]