Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 31.10.04 07:46
Оценка:
Всем привет! Подскажите пожалуйста как разрешить следующую проблему.
Есть у меня база данных аля MS Access. Пишу ASP.NET'ую морду для доступа к этой базе. Читаю из неё без проблем, а вот удалить запись, обновить или вставить нговую не удается. Получаю exeption следующего содержания:
— при попытке удаления записи: "Невозможно удаление записей из указанных таблиц."
— при попытке обновить запись или вставить новую: "В операции должен использоваться обновляемый запрос."
Что бы это могло значить и в чем может быть проблема?
Использую ADO.NET'ый механизм:
// connection string
protected string _sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\olContacts.mdb";

Например, обновляю запись так:

private void btnUpdate_Click(object sender, System.EventArgs e)
{
string sUpdateSQL = "UPDATE Users SET ";
sUpdateSQL += "GroupID='" + txtGroupID.Text + "',";
sUpdateSQL += "NickName='" + txtNickName.Text + "',";
sUpdateSQL += "UserOrder='" + txtOrder.Text + "',";
sUpdateSQL += "ItemData='" + txtItemData.Text + "' ";
sUpdateSQL += " WHERE ItemData=" + lstUsers.SelectedItem.Value;
// ADO.NET objects
OleDbConnection oleConnection = new OleDbConnection(_sConnection);
OleDbCommand oleCommand = new OleDbCommand(sUpdateSQL,oleConnection);
int nUpdated = 0;
try
{
oleConnection.Open();
nUpdated = oleCommand.ExecuteNonQuery();
lblInfo.Text = nUpdated.ToString() + " records updated.";
}
catch(Exception err)
{
lblInfo.ForeColor = Color.Purple;
lblInfo.Text = "Error updating record. ";
lblInfo.Text = err.Message;
}
finally
{
if( oleConnection != null )
{
oleConnection.Close();
}
}
}

А удаляю например так:

private void btnDelete_Click(object sender, System.EventArgs e)
{
string sDeleteSQL = "DELETE FROM Users ";
sDeleteSQL += "WHERE ItemData=" + lstUsers.SelectedItem.Value;
// ADO.NET objects
OleDbConnection oleConnection = new OleDbConnection(_sConnection);
OleDbCommand oleCommand = new OleDbCommand(sDeleteSQL,oleConnection);
int nDelItems = 0;
try
{
oleConnection.Open();
nDelItems = oleCommand.ExecuteNonQuery();
lblInfo.Text = nDelItems.ToString() + " records deleted.";
}
catch(Exception err)
{
lblInfo.ForeColor = Color.Purple;
lblInfo.Text = "Error deliting record. ";
lblInfo.Text = err.Message;
}
finally
{
if( oleConnection != null )
{
oleConnection.Close();
}
}
if( nDelItems > 0 )
{
FillUsersList();
}
}

Что тут неверно?

Спасибо всем неравнодушным!
Re: Добавление записей в БД Access с помощью ADO.NET
От: vvvoloshin1 Канада  
Дата: 31.10.04 12:03
Оценка:
какой SQL запрос-то получается ? прислал бы
Re[2]: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 31.10.04 12:23
Оценка:
Здравствуйте, vvvoloshin1, Вы писали:

V>какой SQL запрос-то получается ? прислал бы


Я в деле ASP.NET + ADO.NET новичок, поэтому честно говоря не очень понимаю твоего вопроса. Что нужно прислать? Как выглядит строчка сиквела или что?
Re[3]: Добавление записей в БД Access с помощью ADO.NET
От: vvvoloshin1 Канада  
Дата: 31.10.04 12:36
Оценка:
Здравствуйте, dmaster1, Вы писали:

D>Здравствуйте, vvvoloshin1, Вы писали:


V>>какой SQL запрос-то получается ? прислал бы


D>Я в деле ASP.NET + ADO.NET новичок, поэтому честно говоря не очень понимаю твоего вопроса. Что нужно прислать? Как выглядит строчка сиквела или что?


ну конечно, а говорит не понимает...
Re[4]: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 31.10.04 17:59
Оценка:
Здравствуйте, vvvoloshin1, Вы писали:

V>Здравствуйте, dmaster1, Вы писали:


D>>Здравствуйте, vvvoloshin1, Вы писали:


V>>>какой SQL запрос-то получается ? прислал бы


D>>Я в деле ASP.NET + ADO.NET новичок, поэтому честно говоря не очень понимаю твоего вопроса. Что нужно прислать? Как выглядит строчка сиквела или что?


V>ну конечно, а говорит не понимает...


При обновлении сиквел получается такой:

UPDATE Users SET GroupID='1',NickName='Дядя Ваня',UserOrder='2',ItemData='3' WHERE ItemData=3

при этом имею "противный" эксепшен: В операции должен использоваться обновляемый запрос.

А при попытки удалить строчку сиквел такой:

DELETE FROM Users WHERE ItemData=6

а эксепшен такой: Невозможно удаление записей из указанных таблиц.

Где собака зарыта???
Re[5]: Добавление записей в БД Access с помощью ADO.NET
От: vvvoloshin1 Канада  
Дата: 31.10.04 18:38
Оценка:
В случае DELETE может у тебя ссылки на эти записи из других таблиц, проверь Primary/Foreign Keys
Над Update размышляем.... но может та же причина
Re[4]: Добавление записей в БД Access с помощью ADO.NET
От: Аноним  
Дата: 31.10.04 19:03
Оценка:
Подобные проблемы обычно разрешаются так: получаешь SQL-запрос, который у тебя идет к базе, открываешь эту базу в Access, делаешь новый запрос, переходишь к SQL-представлению, вставляешь строчку своего запроса, запускаешь — Access показывает конкретное место которое ему не нравится.
Еще совет — все названия таблиц и полей в запросе помещай в квадратные скобки. В Jet есть оочень много "запрещенных" слов, которые нельзя использовать напрямую. В данном случае слово Users выглядит очень подозрительно. Я бы написал [Users].


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[6]: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 31.10.04 19:40
Оценка:
Здравствуйте, vvvoloshin1, Вы писали:

V>В случае DELETE может у тебя ссылки на эти записи из других таблиц, проверь Primary/Foreign Keys

V>Над Update размышляем.... но может та же причина

Нее. Исключено. Правда у меня в базе две таблицы (Users и Groups) но они не связаны.
Re[5]: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 31.10.04 19:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подобные проблемы обычно разрешаются так: получаешь SQL-запрос, который у тебя идет к базе, открываешь эту базу в Access, делаешь новый запрос, переходишь к SQL-представлению, вставляешь строчку своего запроса, запускаешь — Access показывает конкретное место которое ему не нравится.

А>Еще совет — все названия таблиц и полей в запросе помещай в квадратные скобки. В Jet есть оочень много "запрещенных" слов, которые нельзя использовать напрямую. В данном случае слово Users выглядит очень подозрительно. Я бы написал [Users].

А>
данное сообщение получено с www.gotdotnet.ru

А>ссылка на оригинальное сообщение


Красивая идея. Щас попробую...
Re[5]: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 31.10.04 20:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подобные проблемы обычно разрешаются так: получаешь SQL-запрос, который у тебя идет к базе, открываешь эту базу в Access, делаешь новый запрос, переходишь к SQL-представлению, вставляешь строчку своего запроса, запускаешь — Access показывает конкретное место которое ему не нравится.

А>Еще совет — все названия таблиц и полей в запросе помещай в квадратные скобки. В Jet есть оочень много "запрещенных" слов, которые нельзя использовать напрямую. В данном случае слово Users выглядит очень подозрительно. Я бы написал [Users].

А>
данное сообщение получено с www.gotdotnet.ru

А>ссылка на оригинальное сообщение


Проверил. Расстановка квадратных скобок скобок не прокатывает. Зато этот сиквел на UPDATE в этой базе, открытой в ACCESS'е сработал на ура: строка обновилась, и ACCESS ни к чему ни придрался, только сто раз спрашивал, точно ли я уверен, что хочу обновить эту строчку, и знаю ли я, что "назад дороги не будет"
Из под ASP.NET проблема осталась...
Re[6]: Добавление записей в БД Access с помощью ADO.NET
От: vvvoloshin1 Канада  
Дата: 31.10.04 21:02
Оценка:
А Delete в базе сработал ?
Re[5]: Добавление записей в БД Access с помощью ADO.NET
От: Леон Казахстан  
Дата: 01.11.04 05:44
Оценка:
Здравствуйте, dmaster1, Вы писали:

D>UPDATE Users SET GroupID='1',NickName='Дядя Ваня',UserOrder='2',ItemData='3' WHERE ItemData=3

Ты используешь
ItemData='3' и ItemData=3
Непонял это что? Опечатка или косяк?
... << RSDN@Home 1.1.4 @@subversion >>
Re[6]: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 01.11.04 07:02
Оценка:
Здравствуйте, Леон, Вы писали:

Л>Здравствуйте, dmaster1, Вы писали:


D>>UPDATE Users SET GroupID='1',NickName='Дядя Ваня',UserOrder='2',ItemData='3' WHERE ItemData=3

Л>Ты используешь
Л>ItemData='3' и ItemData=3
Л>Непонял это что? Опечатка или косяк?

Да я честно говоря и сам думал, что это такое, когда сначала написал ItemData='3' и получил эксепшен, что мол неверное выражение в условии запроса. Пришлось убрать апострофы...
Re[6]: Добавление записей в БД Access с помощью ADO.NET
От: Аноним  
Дата: 01.11.04 09:30
Оценка:
Ну ты с типом данных то определись!


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Добавление записей в БД Access с помощью ADO.NET
От: just_dmitry Россия www.parsec-club.ru
Дата: 01.11.04 09:54
Оценка:
Здравствуйте, dmaster1, Вы писали:

D>Всем привет! Подскажите пожалуйста как разрешить следующую проблему.

D>Есть у меня база данных аля MS Access. Пишу ASP.NET'ую морду для доступа к этой базе. Читаю из неё без проблем, а вот удалить запись, обновить или вставить нговую не удается. Получаю exeption следующего содержания:
D> — при попытке удаления записи: "Невозможно удаление записей из указанных таблиц."
D> — при попытке обновить запись или вставить новую: "В операции должен использоваться обновляемый запрос."

Проверь разрешения на каталог где у тебя лежит mdb-файл.
1) На сам файл у юзера под которым работает сайт должны быть права на модификацию (ну это я думаю есть
2) На каталог где нахоится файл должно быть право создания файлов (и их последующей модификации), т.к. при операциях обновления для блокировок создается файл .ldb. Если access не сможет создать этот файл то база будет в режиме readonly
Re: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 01.11.04 10:08
Оценка:
Здравствуйте, dmaster1, Вы писали:

D>Всем привет! Подскажите пожалуйста как разрешить следующую проблему.

D>Есть у меня база данных аля MS Access. Пишу ASP.NET'ую морду для доступа к этой базе. Читаю из неё без проблем, а вот удалить запись, обновить или вставить нговую не удается. Получаю exeption следующего содержания:
D> — при попытке удаления записи: "Невозможно удаление записей из указанных таблиц."
D> — при попытке обновить запись или вставить новую: "В операции должен использоваться обновляемый запрос."
D>Что бы это могло значить и в чем может быть проблема?
D>Использую ADO.NET'ый механизм:
D> // connection string
D> protected string _sConnection = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\olContacts.mdb";

D> Например, обновляю запись так:


D> private void btnUpdate_Click(object sender, System.EventArgs e)

D> {
D> string sUpdateSQL = "UPDATE Users SET ";
D> sUpdateSQL += "GroupID='" + txtGroupID.Text + "',";
D> sUpdateSQL += "NickName='" + txtNickName.Text + "',";
D> sUpdateSQL += "UserOrder='" + txtOrder.Text + "',";
D> sUpdateSQL += "ItemData='" + txtItemData.Text + "' ";
D> sUpdateSQL += " WHERE ItemData=" + lstUsers.SelectedItem.Value;
D> // ADO.NET objects
D> OleDbConnection oleConnection = new OleDbConnection(_sConnection);
D> OleDbCommand oleCommand = new OleDbCommand(sUpdateSQL,oleConnection);
D> int nUpdated = 0;
D> try
D> {
D> oleConnection.Open();
D> nUpdated = oleCommand.ExecuteNonQuery();
D> lblInfo.Text = nUpdated.ToString() + " records updated.";
D> }
D> catch(Exception err)
D> {
D> lblInfo.ForeColor = Color.Purple;
D> lblInfo.Text = "Error updating record. ";
D> lblInfo.Text = err.Message;
D> }
D> finally
D> {
D> if( oleConnection != null )
D> {
D> oleConnection.Close();
D> }
D> }
D> }

D> А удаляю например так:


D> private void btnDelete_Click(object sender, System.EventArgs e)

D> {
D> string sDeleteSQL = "DELETE FROM Users ";
D> sDeleteSQL += "WHERE ItemData=" + lstUsers.SelectedItem.Value;
D> // ADO.NET objects
D> OleDbConnection oleConnection = new OleDbConnection(_sConnection);
D> OleDbCommand oleCommand = new OleDbCommand(sDeleteSQL,oleConnection);
D> int nDelItems = 0;
D> try
D> {
D> oleConnection.Open();
D> nDelItems = oleCommand.ExecuteNonQuery();
D> lblInfo.Text = nDelItems.ToString() + " records deleted.";
D> }
D> catch(Exception err)
D> {
D> lblInfo.ForeColor = Color.Purple;
D> lblInfo.Text = "Error deliting record. ";
D> lblInfo.Text = err.Message;
D> }
D> finally
D> {
D> if( oleConnection != null )
D> {
D> oleConnection.Close();
D> }
D> }
D> if( nDelItems > 0 )
D> {
D> FillUsersList();
D> }
D> }

D>Что тут неверно?


D>Спасибо всем неравнодушным!


Проблема разрешилась!
В IIS'е нужно было прописать запуск этой страницы от имени Админа. И все сразу заработало.
Спасибо всем!
Re[2]: Добавление записей в БД Access с помощью ADO.NET
От: just_dmitry Россия www.parsec-club.ru
Дата: 01.11.04 10:11
Оценка:
Здравствуйте, dmaster1, Вы писали:
D>Проблема разрешилась!
D>В IIS'е нужно было прописать запуск этой страницы от имени Админа. И все сразу заработало.
D>Спасибо всем!

Угу, а еще в БД очеь удобно ковыряться от имени sa (MS SQL) или SYSTEM (Oracle). Тоже никаких ограничений.
Re[3]: Добавление записей в БД Access с помощью ADO.NET
От: dmaster1  
Дата: 01.11.04 10:54
Оценка:
Здравствуйте, just_dmitry, Вы писали:

_>Здравствуйте, dmaster1, Вы писали:

D>>Проблема разрешилась!
D>>В IIS'е нужно было прописать запуск этой страницы от имени Админа. И все сразу заработало.
D>>Спасибо всем!

_>Угу, а еще в БД очеь удобно ковыряться от имени sa (MS SQL) или SYSTEM (Oracle). Тоже никаких ограничений.


Намек на неграмотный подход к решению проблемы???
Тогда подскажи плиз, как разрешить её по-умному???
Буду благодарен!
Re[4]: Добавление записей в БД Access с помощью ADO.NET
От: just_dmitry Россия www.parsec-club.ru
Дата: 01.11.04 11:16
Оценка:
D>Намек на неграмотный подход к решению проблемы???

http://www.rsdn.ru/Forum/Message.aspx?mid=878069&amp;only=1
Автор: just_dmitry
Дата: 01.11.04
смотрел?
Re[5]: Добавление записей в БД Access с помощью ADO.NET
От: shinjo  
Дата: 02.11.04 03:24
Оценка:
Здравствуйте, just_dmitry, Вы писали:

D>>Намек на неграмотный подход к решению проблемы???


_>http://www.rsdn.ru/Forum/Message.aspx?mid=878069&amp;only=1
Автор: just_dmitry
Дата: 01.11.04
смотрел?


ПОКАЖИТЕ ПОЖАЛУЙСТА ПРИМЕР где там добавлять квадратные скобки ????

INSERT INTO guestbook(nick) VALUES (['боб']) так ????

и где менять права на запуск страницы от имени администратора тоже напиши об этом поподробнее.
Я пишу гостевуху на ASP.NET вот вставка записей не работает ((( такаяже проблема.....
И в SQL я новичек.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.