[C#] Zapisywanie informacji do bazy danych Paradox


(eureka 170) #1

Witam, napisałem następujący program:

public partial class Form1 : Form

 {

        public Form1()

        {

            InitializeComponent();

        }


        private void button1_Click(object sender, EventArgs e)

        {

            DataTable tbl = null;

            string sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" + @"Extended Properties=Paradox 5.x;"+ @"Data Source=C:\PARADOXDB\;";


            OleDbConnection objConn = new OleDbConnection(sConnectionString);

            objConn.Open();


            OleDbCommand objCmdSelect = new OleDbCommand("INSERT INTO baza (UU) VALUES (true)", objConn);

            objCmdSelect.ExecuteNonQuery();




        }



}

Zadaniem programu jest zapisywanie informacji do bazy danych Paradox. Plik baza.db znajduje się w folderze C:\PARADOXDB. Jednak po wykonaniu polecenia INSERT wyskakuje mi błąd: "Operacja musi wykorzystywać kwerendę, którą można aktualizować". Nie potrafię znaleźć rozwiązania tego problemu. Czytałem w internecie, że w tej sytuacji trzeba zmienić uprawnienia dla IUSR oraz IWAM. Na moim komputerze zmieniłem tylko uprawnienia dla IUSR( dałem mu możliwość zapisu), ale IWAM nie znalazłem nigdzie, a błąd nadal się pojawia. Czy wie ktoś, jak sobie z tym poradzić?


(Grzelix) #2

Sprawdź jeszcze kwestię uprawnień związanych z plikiem.

a) zmień uprawnienia pliku

b) spróbuj z lokalizacją pliku inną niż partycja C


(eureka 170) #3

Niestety Twoje sposoby nie pomagają. Pojawia się ten sam błąd :frowning:

Plik nie ma zaznaczonego "Tylko do odczytu", a użytkownicy mają prawo do zapisu

EDIT:

Jeżeli zmienię linijkę, gdzie jest connectionstring na:

string sConnectionString = "Driver={Microsoft Paradox Driver (*.db )};Provider=Microsoft.Jet.OLEDB.4.0;" + @"Extended Properties=Paradox 5.x;" + @"Data Source=C:\PARADOXDB\;";

wyświetla mi się z kolei błąd: "Nie można znaleźć instalowalnego pliku ISAM."

Patrzyłem na tą stronę: http://support.microsoft.com/kb/209805/pl lecz niewiele mi ten artykuł pomaga

Jeżeli ta informacja ma jakiekolwiek znaczenie to pracuję na Windows 7


(Marcin Obala) #4

A czy przypadkiem znak \ nie powinien być powielony? Ja zawsze używam \ albo / bo pojedyncze \ nie działa ponieważ jest to znak.... Jak to po polsku powiedzieć, Escape Character.


(eureka 170) #5

To nie chodzi o to.

Jeżeli używam @ przed całym wyrażeniem, to kompilator bierze łańcuch dosłownie jako "\", więc jest ok


(Grzelix) #6

Jeżeli dobrze wczytałem się w twój opis błędu, to błąd pojawia się w linijce:

objCmdSelect.ExecuteNonQuery();

czy tak?

EDIT

Z tego co jeszcze udało mi się znaleźć na google to ważne są też uprawnienia FOLDERU - musi mieć opcję modify dla odpowiedniego uzytkowika.

http://www.mikesdotnetting.com/Article/ ... uery-error

zerknij na komentarze dotyczące win7


(Marcin Obala) #7

A rzeczywiście, szukałem tej małpy ale nie zerknąłem bezpośrednio przy ciągu. A co do pomocy technicznej to tam jedyne co napisali to że masz plik o nieprawidłowej strukturze albo nie masz odpowiedniego "sterownika" do nich. Jest też wzmianka o jakimś inport ConnectionString wydaje się dobrze

http://www.connectionstrings.com/paradox

Więc wychodzi że to coś masz nie doinstalowane. Ja jak odpalałem u kogoś innego swój program wywalało:

Może to coś w podobie.


(eureka 170) #8

grzelix

Tak, błąd wyskakuje w momencie wykonania ExecuteNonQuery()

Co do fragmentu:

Dałem możliwość zapisu do Usług sieciowych, ale nic to nie dało

Nie mogę znaleźć IUSR_macinename u siebie, mam tylko samo IUSR

Z tego linku: http://msdn.microsoft.com/en-us/library/aa292118(VS.71.aspx to, gdzie mam dodać ten ciąg:

żeby pojawiło się IUSR_macinename? Marcin511 Z tej pomocy technicznej wynika jednak że mam ten sterownik bo jest na odpowiednim miejscu i jest w rejestrze. Zamieszczam przykładową tabelę .db. Spróbujcie wykonać na niej co najmniej 2 razy polecenie INSERT i dajcie znać, czy macie taki problem i czy go rozwiązaliście: http://www.multiupload.com/DQ7K6JSDCFEDIT: Mam rozwiązanie Connectionstring musi mieć taką postać: Kod:

"Provider=Microsoft.Jet.OLEDB.4.0;" + @"Extended Properties=Paradox 5.x;" + "Data Source=" + sciezka+";"

Żeby nie było komunikatu "Operacja musi wykorzystywać kwerendę, którą można aktualizować", pliki z rozszerzeniami .db, .XG0,.YG0 oraz .PX muszą znajdować w jednym folderze ( wszystkie te pliki należą do jednej tabeli).