Всем известная проблема
Есть код:
Код:
void Page_Load(object s, EventArgs e)
{
String sConnStr = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath("~/dbms/test.mdb");
OleDbConnection cn = new OleDbConnection(sConnStr);
String sComm = "INSERT INTO tTable (sTest, sTest2) VALUES ('test1', 'test2');";
OleDbCommand cm = new OleDbCommand(sComm, cn);
cn.Open();
cm.ExecuteNonQuery();
cm.Dispose();
cn.Close();
}
{
String sConnStr = "Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + Server.MapPath("~/dbms/test.mdb");
OleDbConnection cn = new OleDbConnection(sConnStr);
String sComm = "INSERT INTO tTable (sTest, sTest2) VALUES ('test1', 'test2');";
OleDbCommand cm = new OleDbCommand(sComm, cn);
cn.Open();
cm.ExecuteNonQuery();
cm.Dispose();
cn.Close();
}
Не работает. "Operation must use an updateable query".
Проблема описана здесь http://support.microsoft.com/default.aspx?scid=kb;en-us;Q175168
Я проверил всё, что описано в статье. Вроде всё должно работать, но не работает.
На форуме я тоже нашел несколько тем.
Вот только что делать нигде не написано.
Более того. Я пользуюсь MS Web Developer'ом, кот. входит в состав VS. Там есть встроенный сервер.
Так вот. Если открывать сайт в VS просто как папку и тестить, используя встроенный в VS сервер, всё прекрасно работает. Если открыть сайт как виртуальный каталог IIS, то под управлением IIS генериться этот самый exception.
Размещал код у своего хостера. Та же самая проблема.
Кто-нибудь знает что нужно делать, чтобы заработало?
AccessDataSource mdb=new AccessDataSource();
mdb.DataFile = "~/dbms/test.mdb";
mdb.InsertCommand = "INSERT INTO tTable SELECT 'test1' As sTest, 'test2' As sTest2";
mdb.DataSourceMode = SqlDataSourceMode.DataSet;
mdb.Insert();
1) Создай запрос на добавление в самом Access, а потом запускать программно через хранимую процедуру.
2) Попробуй использовать метод ExecuteReader()
Ещё рекомендую посмотреть структуру изменяемой таблицы в Access, может там даталогическая ошибка вкралась
Цитата:
Originally posted by 3A3-968M
Если ты используешь MSVS 2005, то для соединения с *.mdb файлом лучше используй класс AccessDataSource. С ним всё проще:
AccessDataSource mdb=new AccessDataSource();
mdb.DataFile = "~/dbms/test.mdb";
mdb.InsertCommand = "INSERT INTO tTable SELECT 'test1' As sTest, 'test2' As sTest2";
mdb.DataSourceMode = SqlDataSourceMode.DataSet;
mdb.Insert();
Если ты используешь MSVS 2005, то для соединения с *.mdb файлом лучше используй класс AccessDataSource. С ним всё проще:
AccessDataSource mdb=new AccessDataSource();
mdb.DataFile = "~/dbms/test.mdb";
mdb.InsertCommand = "INSERT INTO tTable SELECT 'test1' As sTest, 'test2' As sTest2";
mdb.DataSourceMode = SqlDataSourceMode.DataSet;
mdb.Insert();
За совет спасибо. Использую VS 2005.
Я написал в службу поддержки воего хостера. Они ответили. У них че-то в IIS было не сконфигурировано, сейчас всё работает.
Но поскольку у меня на компьютере всёравно не пашет, пожалуй попробую воспользоваться умным советом.
Цитата:
Originally posted by vesna
За совет спасибо. Использую VS 2005.
Я написал в службу поддержки воего хостера. Они ответили. У них че-то в IIS было не сконфигурировано, сейчас всё работает.
Но поскольку у меня на компьютере всёравно не пашет, пожалуй попробую воспользоваться умным советом.
За совет спасибо. Использую VS 2005.
Я написал в службу поддержки воего хостера. Они ответили. У них че-то в IIS было не сконфигурировано, сейчас всё работает.
Но поскольку у меня на компьютере всёравно не пашет, пожалуй попробую воспользоваться умным советом.
В MSVS 2005 много объектов для работы с источниками данных, таких как AccessDataSource, ObjectDataSource, SiteMapDataSource. Кстати, при помощи последнего можно без особого напряжения создавать карту сайта.
Цитата:
Кстати, при помощи последнего можно без особого напряжения создавать карту сайта.
Что я, собственно, и сделал :). Что касается остальных...
Это, конечно, хорошо, просто мне хотелось побыстрее сделать. Там кода-то три строчки...
Я считаю, проблема все-таки в IIS.