DataSet + LocalDatabase - proszę o pomoc

0

Mam wielką prośbę o pomoc, męczę się z tym od trzech dni i nie moge znaleŹć w googlach rozwiązania lub nie potrafię ich zastosować. Chodzi o to że:

1.Robie aplikację konsolową
2.Dodaję "Local database" (*.sdf) plik do projektu
3.Robię w niej Tabelę "Osoba", która ma kolumny: Imie i nazwisko
4.Dajmy na to że pierwszy rekord to "Jan", "Kowalski"
Pytanie brzmi, w jaki sposób z niej to odczytać i jak coś do niej zapisać?

Probowałem tak:
SqlConnection sqlccc = new SqlConnection(@"Data source=Database1.mdf");
SqlConnection sqlccc = new SqlConnection(@"Data source=D:\Database1.mdf");
Oczywiscie wszedzie klasa FileInfo zwracała ze plik istnieje!

Dostawałem taki błąd przy próbie wywołania metody sqlccc.Open();
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

Nie mam pojęcia czemu, gdzieś wyczytałem że łatwo robi się to DataSet'em, więc stworzyłem, wrzuciłem tabelke w "Designerze" do data set, mając tam jeden rekord "Jan Kowalski", wywołanie metody Database1DataSet dds = new Database1DataSet() a nastepnie Console.WriteLine(dds.Osoba.Count) drukuje mi 0, gdzie powinna 1, nie wiem czemu. Proszę o pomoc, męczę się z tym już długo :/ Z góry dziękuje za fatygę.

0

Niestety nie chce to działać, z tym "Provider=Microsoft.Jet.OLEDB.4.0" wyrzuca nierozpoznany format bazy danych, bez tego wyrzuca ze wymaga tego "Provider'a" OLEDB.

0

Niezauważyłem, że zmieniłeś linka, sprawdzę i dam znać ;)

0

może jednak to:
SqlConnection cn=new SqlConnection(@"Data Source=.;AttachDbFilename=App_Data\Database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

0

SDF czyli MS SQL CE (Compact Edition)?? Jeśli tak, to złego obiektu używasz. Chyba powinieneś użyć SqlCeConnection.
http://msdn.microsoft.com/en-us/library/system.data.sqlserverce.sqlceconnection(VS.80).aspx

1

Ok, dziękuje wszystkim! Poradziłem sobie i z SDF i z MDF.
Może komuś się przyda, wkleje tu kod:

            //OTWIERANIE POLACZENIA
            SqlCeConnection sqlCon = new SqlCeConnection(@"Data source=|DataDirectory|\Database1.sdf");
            sqlCon.Open();
            //WYBIERANIE DANYCH
            string query = "SELECT Imie, Nazwisko FROM Osoba;";
            SqlCeCommand sqlc = new SqlCeCommand(query, sqlCon);
            SqlCeDataReader reader = sqlc.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
            reader.Close();
            //DORZUCANIE DANYCH
            SqlCeCommand zapis = new SqlCeCommand("INSERT INTO Osoba(Imie, Nazwisko) VALUES (@Imie, @Nazwisko)", sqlCon);
            zapis.Parameters.AddWithValue("@Imie", "abc");
            zapis.Parameters.AddWithValue("@Nazwisko", "xyz");
            zapis.ExecuteNonQuery();
            reader = sqlc.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
            reader.Close();
            sqlCon.Close();

MDF różni się tym że wszędzie gdzie są jakies bazy z ...Ce... to to Ce trzeba usunać, no i con string w mdf wyglada tak:
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User Instance=True";

Dla pliku Database1.mdf który zawiera Tabele Osoba z kolumnami Imie i Nazwisko.

0
            //OTWIERANIE POLACZENIA
            SqlCeConnection sqlCon = new SqlCeConnection(@"Data source=|DataDirectory|\Database1.sdf");
            sqlCon.Open();
            //WYBIERANIE DANYCH
            string query = "SELECT Imie, Nazwisko FROM Osoba;";
            SqlCeCommand sqlc = new SqlCeCommand(query, sqlCon);
            SqlCeDataReader reader = sqlc.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
            reader.Close();
            //DORZUCANIE DANYCH
            SqlCeCommand zapis = new SqlCeCommand("INSERT INTO Osoba(Imie, Nazwisko) VALUES (@Imie, @Nazwisko)", sqlCon);
            zapis.Parameters.AddWithValue("@Imie", "abc");
            zapis.Parameters.AddWithValue("@Nazwisko", "xyz");
            zapis.ExecuteNonQuery();
            reader = sqlc.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(String.Format("{0}, {1}",
                    reader[0], reader[1]));
            }
            reader.Close();
            sqlCon.Close();

SqlCeConnection - dodaj klauzulę using(){.. } tak, żeby w razie niepowodzenia wykonało się Dispose()

1 użytkowników online, w tym zalogowanych: 0, gości: 1