Laden...

c# MS SQL abfrage

Erstellt von Angus131 vor 12 Jahren Letzter Beitrag vor 12 Jahren 6.356 Views
A
Angus131 Themenstarter:in
8 Beiträge seit 2012
vor 12 Jahren
c# MS SQL abfrage

hallo, ich versuche grade eine SQL abfrage in meinem c# programm zu erstellen.. aber es kommt immer der fehler:"Ungültiger Objektname 'Mitarbeiter'.".
Ich verwende eine Microsoft SQL Server Datenbankdatei

so sieht mein prog aus:


        public void Hinzufuegen(Mitarbeiter_Daten mitarbeiter)
        {
            string SQL = "select * from Mitarbeiter";
            DatabaseAccess(SQL);
        }

        public void DatabaseAccess(string abfrage)
        {
                SqlConnection con = new SqlConnection();
                con.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Angus\\Documents\\Datenbank.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

                con.Open();//Die Verbindung öffnen

                //Felder füllen
                SqlCommand cmd = new SqlCommand(abfrage, con);
                string Text = Convert.ToString( cmd.ExecuteScalar());
                Console.WriteLine(Text);
                con.Close();
        }

kann mir evtl jemand sagen woran das liegt?

K
166 Beiträge seit 2008
vor 12 Jahren

Scheint die Tabelle Mitarbeiter nicht zu geben.

Gruß, Killerkruemel

A
Angus131 Themenstarter:in
8 Beiträge seit 2012
vor 12 Jahren

das ist ja das seltsame =) .. es gibt sie... und wenn ich diese Abfrage direkt bei der Datenbank mache geht es ja xD

//edit und selbst wenn dürfte der compiler jeigentlich nicht meckern oder? ... weil es ja ein string ist

731 Beiträge seit 2006
vor 12 Jahren

Hi,
musst du zufällig noch den "Erzeuger" der Tabelle angeben? Also OwnerName.Tabelle

MfG
wax

A
Angus131 Themenstarter:in
8 Beiträge seit 2012
vor 12 Jahren

geht auch net =(

3.825 Beiträge seit 2006
vor 12 Jahren

Hallo Angus,

"AttachDbFilename=C:\Users\Angus\Documents\Datenbank.mdf" im Connectionstring bitte weglassen.

Du musst noch angeben mit welcher Datenbank Du arbeiten willst, sonst bist Du in der Datenbank master :

initial catalog= ...

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

A
Angus131 Themenstarter:in
8 Beiträge seit 2012
vor 12 Jahren

also habe das "AttachDbFilename=C:\Users\Angus\Documents\Datenbank.mdf" gelöscht.

nun sieht das so aus:


                con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=Datenbank.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";

dann kommt der fehler:

Die von der Anmeldung angeforderte 'Datenbank.mdf'-Datenbank kann nicht geöffnet werden. Fehler bei der Anmeldung.
Fehler bei der Anmeldung für den Benutzer 'Angus-Laptop\Angus'.

passwort hat die Datenbank noch nicht

//edit: gebe ich allerdings den komplette pfad an kommt wieder der alte fehler =(

3.825 Beiträge seit 2006
vor 12 Jahren

Es muss heissen

Initial Catalog=Datenbank

Wenn die Datenbank 'Datenbank' heisst.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

A
Angus131 Themenstarter:in
8 Beiträge seit 2012
vor 12 Jahren

dann kommt auch der fehler mit der Anmeldung

Die von der Anmeldung angeforderte 'Datenbank'-Datenbank kann nicht geöffnet werden. Fehler bei der Anmeldung.
Fehler bei der Anmeldung für den Benutzer 'Angus-Laptop\Angus'.

3.825 Beiträge seit 2006
vor 12 Jahren

Wenn Du eine Datenbank auf localhost öffnest mit Integrated Security = True, dann sollte das auf jeden Fall gehen.

Öffne die Datenbank mal mit dem SQL Management Studio (Express).

Wenn das auch nicht geht dann gibt es die Datenbank nicht. Hast Du sie denn angelegt ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

A
Angus131 Themenstarter:in
8 Beiträge seit 2012
vor 12 Jahren

also im server explorer ist sie vorhanden sowie in der projekt ansicht =) .... im ordner Documents liegt auch eine Datenbank.mdf ... lade grade das SQL Management Studio und probiere dann die db damit zu öffnen

B
372 Beiträge seit 2007
vor 12 Jahren

Hallo Agnus131,

da Du die Abfrage mit ExecuteScalar laufen lässt bekommst Du bei der Abfrage immer nur den Wert, welcher in der ersten Zeile und dort in der ersten Spalte steht.

Vielleicht hilft dir ja folgende kleine Beschreibung (nur grob angerissen, da ich es derzeit nicht testen kann):

SQLConnection-Objekt instanziieren
Connectionstring setzen
connection öffnen und schließen, sonst kann es Probleme mit den SQL-Command geben
SQLCommand = SQLConnection.CreateSqlCommand();
SqlCommand.commandType = System.Data.CommandType.Text;
SqlCommand.Commandtext ="SELECT * FROM TBL_Name"
SqlDataAdapter = new SqlDataAdapter(SqlCommand)
DataTable tmpDataTable = new DataTable();
SqlDataAdapter.fill(tmpDataTable);

Dann hast Du alle Daten aus der DB_Table und der DataTable und kannst dann dort auf die Werte zugreifen.

Viele Grüße
Jürgen

Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉

3.825 Beiträge seit 2006
vor 12 Jahren

Oder schau hier :

http://www.seven-c.de/files/datenbankenhowto.htm

😉

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

B
372 Beiträge seit 2007
vor 12 Jahren

Hi BerndFfm,

mit dem Schema liege ich doch aber auch nicht falsch oder?

Grüße

Jürgen

Man muß nichts wissen,
man muß nur wissen wer es wissen könnte
oder wo es steht😉

3.825 Beiträge seit 2006
vor 12 Jahren

Hallo Jürgen,

mit dem Schema liegst Du richtig. Das Connection.Close muss allerdings nach dem .Fill kommen. Der SqlDataAdapter braucht noch einen Namen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

F
10.010 Beiträge seit 2004
vor 12 Jahren

@bigeddie:
Wer zeigt eigentlich immer diesen vollkommen überflüssig langen sermon an Zeilen?


SqlDataAdapter = new SqlDataAdapter("SELECT * FROM TBL_Name", connectionstring)
DataTable tmpDataTable = new DataTable();
SqlDataAdapter.fill(tmpDataTable);