Laden...

Datenbankabfrage von PPC

Erstellt von Maddinel vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.944 Views
Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren
Datenbankabfrage von PPC

verwendetes Datenbanksystem: Microsoft SQL Server 2005 Express

Hallo,

ich habe ein kleines Programm geschrieben für Pocket-PC (Windows Mobile 5.0 mit Compact Framework 2) und möchte jetzt über das Netzwerk vom PPC auf eine SQL-Server 2005 Express Datenbank zugreifen.
Um den Zugriff von außerhalb des DB-Rechners zu testen, habe ich mir vorher eine kleine Windows-Anwendung geschrieben, mit der ich von einem anderen PC aus auf die DB zugegriffen habe. Nachdem ich den SQL-Server richtig konfiguriert hatte, funktionierte der Zugriff auch problemlos.
Jetzt versuche ich das gleiche mit dem PPC und es funktioniert aber aus irgend einem Grund nicht. Der PPC ist aber ins Netzwerk integriert. Wenn ich das PPC-Programm auf einem Netzwerk-Rechner laufen lasse, funktioniert die Abfrage, nur auf dem PPC nicht. Woran könnte das liegen? Hat Jemand von euch Erfahrung oder eine Idee?

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

W
201 Beiträge seit 2007
vor 15 Jahren

Hi!

Habe sowas nur mal mit SQL CompactEdition - also DB am PPC - gemacht...
Fehlermeldung?
Runtime am PPC installiert?

lg

Programmieren ist der Wettkampf zwischen Programmierer die immer noch einfachere Programme schreiben
und Anwender die immer noch dümmer werden...

F
10.010 Beiträge seit 2004
vor 15 Jahren

@Webbi:
Der Compact hat nichts mit dem Sqlserver zu tun ( ausser hersteller und das er daten verwaltet ).

@Maddinel:
Du bist doch auch schon lang genug dabei oder?
[Hinweis] Wie poste ich richtig? und hier speziell Punkt 5.

W
201 Beiträge seit 2007
vor 15 Jahren

@FZelle
? SQL Compact ist die Mini-Version für PPC und WinMobile...?
Runtime am Client ist ja die selbe...?

lg

Programmieren ist der Wettkampf zwischen Programmierer die immer noch einfachere Programme schreiben
und Anwender die immer noch dümmer werden...

F
10.010 Beiträge seit 2004
vor 15 Jahren

Ja, nur hat der nichts mit Maddinels Ansinnen zu tun.

Er/Sie will sich mit einem echten Sql-Server verbinden, und dieses Verbindung
geschiet ganz normal mit dem SqlClient, nicht mit dem SqlServerCE.

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Eine Fehlermeldung gibts leider nicht wirklich. Das einige was zurückgegeben wird ist SQLException ...mehr leider nicht.

Scheinbar ist eine direkte Abfrage nicht möglich. Es ist wohl nur eine verbindung zu einem Server möglich über die SQL Server Compact Edition und Remote Access oder Replikation. Das funktioniert beides aber nicht mit der Express Edition des SQL-Server. Ich muss meine Forschung in diese Richtung also leider einstellen weil eine SQL-Server 2005 DB für über 700 Euro nicht in Frage kommt 🙁

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

W
201 Beiträge seit 2007
vor 15 Jahren

Funktioniert‘s im Emulator?
bzw. schon mal versuch am PPC das Programm laufen zu lassen und am PC zu debuggen? Das ist ein cooles Feature von MS.

lg

Programmieren ist der Wettkampf zwischen Programmierer die immer noch einfachere Programme schreiben
und Anwender die immer noch dümmer werden...

F
10.010 Beiträge seit 2004
vor 15 Jahren

@Maddinel:

Natürlich funktioniert das, das machen hunderte von entwickler.
Aber wenn Du nicht langsam anfängst vernünftig zu posten,
also deinen Code und die exakte und vollständige exception, können wir
dir nicht helfen.

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Ich kann mir nicht vorstellen, dass das von MS so gewollt ist (der direkte Zugriff).
Zumindest wird von Microsoft die Variante über SQL-Server in Verbindung mit SQL-Server Compact Edition und Replikation quasi als Ideallösung für den Mobile-Client - PC - Datenaustausch. Ist ja auch logisch, weil sich dadurch Geld verdienen lässt. Ich hab im Netz nach ewiger Suche keine Lösung dazu gefunden.

@FZelle:
Meinen Code brauch ich doch nicht posten, wenn die Verbindung einwandfrei funktioniert auf sämtlichen Desktop-PCs. Es ist eine ganz normale SQLConnection, die ich schon zich mal verwendet habe, die zuverlässig in meiner Verbindungsklasse funktioniert.
Die exakte Exception habe ich bereits gepostet! Es war wirklich lediglich "SQLException". Mehr stand NICHT drin. Mit mehr Information hätte ich ja auch etwas anfangen können. SQLException ist in meinem Fall nicht einfach der Exception-Typ sondern tatsächlich die ganze Exception. Sie tritt beim Versuch auf eine Connection herzustellen.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

F
10.010 Beiträge seit 2004
vor 15 Jahren

Ich arbeite ständig mit einer Sql-Server Verbindung vom PPC aus.

Und Da der Compact sowie das Sync Framework kostenlos sind, kann ms
damit kein geld verdienen.

Und zur Exception, was steht in der innerexception?

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Ich meinte Geld verdienen mit der Replikations-Lösung.
Exception.Message = "SQLException"

Aha Moment. Du hast gerade was von Sync-Framework geschrieben. Das hab ich schon mal garnicht. Wird das Sync-Framework auf dem Desktop-PC oder auf dem Mobilgerät installiert? Kann ich das Sync-Framework auch von .net Framework 2.0 bzw. Compact Framework 2.0 verwendet werden?

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

F
10.010 Beiträge seit 2004
vor 15 Jahren

Versuch doch erstmal eine sache zu verstehen, nicht gleich auf die nächste
zurennen, die bei weitem Komplexer ist, als SqlConnection oder mal mit
Exceptions zu beschäftigen.

Mich interessiert nicht, was in Exception.Message steht, sondern entweder was in
Exception.ToString() steht, oder in Exception.InnerException.

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Ich glaube ja nicht, dass du darin mehr siehst, aber Exception.ToString() sieht folgendermaßen aus:


07.07.08 15:24:57  System.Data.SqlClient.SqlException: SqlException
bei System.Data.SqlClient.SqlConnection.OnError()
bei System.Data.SqlClient.SqlInternalConnection.OnError()
bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
bei System.Data.SqlClient.TdsParser.Connect()
bei System.Data.SqlClient.SqlInternalConnection.OpenAndLogin()
bei System.Data.SqlClient.SqlInternalConnection..ctor()
bei System.Data.SqlClient.SqlConnection.Open()
bei GBS_Net_Client.DataConnector.ExecuteSqlTableReturn()
bei GBS_Net_Client.FrmMain.LoadKategorien()
bei GBS_Net_Client.FrmMain.btnLoadArtikel_Click()
bei System.Windows.Forms.Control.OnClick()
bei System.Windows.Forms.Button.OnClick()
bei System.Windows.Forms.ButtonBase.WnProc()
bei System.Windows.Forms.Control._InternalWnProc()
bei Microsoft.AGL.Forms.EVL.EnterMainLoop()
bei System.Windows.Forms.Application.Run()
bei GBS_Net_Client.Program.Main()
 SQL-STRING: SELECT ID, Bezeichnung FROM Kategorien WHERE ÜberKategorieID IS NULL ORDER BY Bezeichnung ASC
07.07.08 15:24:57  System.NullReferenceException: NullReferenceException
bei GBS_Net_Client.FrmMain.LoadKategorien()
bei GBS_Net_Client.FrmMain.btnLoadArtikel_Click()
bei System.Windows.Forms.Control.OnClick()
bei System.Windows.Forms.Button.OnClick()
bei System.Windows.Forms.ButtonBase.WnProc()
bei System.Windows.Forms.Control._InternalWnProc()
bei Microsoft.AGL.Forms.EVL.EnterMainLoop()
bei System.Windows.Forms.Application.Run()
bei GBS_Net_Client.Program.Main()

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Die InnerException ist folgende:


07.07.08 15:29:39   SQL-STRING: SELECT ID, Bezeichnung FROM Kategorien WHERE ÜberKategorieID IS NULL ORDER BY Bezeichnung ASC
07.07.08 15:29:39  System.NullReferenceException: NullReferenceException
bei GBS_Net_Client.FrmMain.LoadKategorien()
bei GBS_Net_Client.FrmMain.btnLoadArtikel_Click()
bei System.Windows.Forms.Control.OnClick()
bei System.Windows.Forms.Button.OnClick()
bei System.Windows.Forms.ButtonBase.WnProc()
bei System.Windows.Forms.Control._InternalWnProc()
bei Microsoft.AGL.Forms.EVL.EnterMainLoop()
bei System.Windows.Forms.Application.Run()
bei GBS_Net_Client.Program.Main()

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Der Verbindungsaufbau sieht folgendermaßen aus:

   SqlConnection sqlConn = new SqlConnection(ConnString);
                SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
                sqlConn.Open();

                sqlComm.ExecuteNonQuery();
                DataSet dsReturn = new DataSet();
                SqlDataAdapter adap = new SqlDataAdapter(sqlComm);
                adap.Fill(dsReturn);
                sqlConn.Close();
                return dsReturn;

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

3.511 Beiträge seit 2005
vor 15 Jahren

Der Stacktrace sagt doch schon fast alles aus. Du hat eine NullRefException in deiner LoadKatgorien Methode.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Ja das stimmt, weil die Rückgabe leer ist von der Datenbank also das DataSet.

Das ist die Methode LoadKategorien:

private void LoadKategorien()
        {
            
                string sql = "SELECT ID, Bezeichnung FROM Kategorien WHERE ÜberKategorieID IS NULL ORDER BY Bezeichnung ASC";
                DataSet dsData = DataConnector.ExecuteSqlTableReturn(sql);

                //ListView leeren
                this.lvKategorien.Items.Clear();

                //Zurückgegebene Datensätze durchlaufen
                foreach (DataRow dRow in dsData.Tables[0].Rows)
                {
                    string bezeichnung  = dRow["Bezeichnung"].ToString();
                    ListViewItem lvi    = new ListViewItem(bezeichnung);
                    lvi.ImageIndex      = 0;
                    this.lvKategorien.Items.Add(lvi);
                }//foreach

                
        }

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Sorry, dass mir da die DataSet NullReference noch dazwischen gerutscht ist.
Hier ist noch mal Exception.ToString() ohne die NULLReference:

07.07.08 15:47:37  System.Data.SqlClient.SqlException: SqlException
bei System.Data.SqlClient.SqlConnection.OnError()
bei System.Data.SqlClient.SqlInternalConnection.OnError()
bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
bei System.Data.SqlClient.TdsParser.Connect()
bei System.Data.SqlClient.SqlInternalConnection.OpenAndLogin()
bei System.Data.SqlClient.SqlInternalConnection..ctor()
bei System.Data.SqlClient.SqlConnection.Open()
bei GBS_Net_Client.DataConnector.ExecuteSqlTableReturn()
bei GBS_Net_Client.FrmMain.LoadKategorien()
bei GBS_Net_Client.FrmMain.btnLoadArtikel_Click()
bei System.Windows.Forms.Control.OnClick()
bei System.Windows.Forms.Button.OnClick()
bei System.Windows.Forms.ButtonBase.WnProc()
bei System.Windows.Forms.Control._InternalWnProc()
bei Microsoft.AGL.Forms.EVL.EnterMainLoop()
bei System.Windows.Forms.Application.Run()
bei GBS_Net_Client.Program.Main()

Ich wollte euch auch noch die InnerException zeigen, aber die ist leer. Da steht in der Fehlermeldung nur der SQL-String, den ich immer an die Fehlermeldung mit dran hänge, sonst ist nichts enthalten.

Benötige ich den großen SQL Server 2005 dazu? Wie ich geschrieben hatte verwende ich SQL Server 2005 Express. Kann es daran liegen?

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

3.511 Beiträge seit 2005
vor 15 Jahren

Wie verbindest du dich überhaupt? Sprich, wie sieht dein ConnectionString aus?
Sind Remoteverbindungen zum SQL Server aktiviert (diese sind nämlich in der Expressvariante per default ausgeschaltet)?

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Ich verbinde mich über folgenden ConnectionString:

"Server=MADDINPC\\SQLEXPRESS;Database=gbs_net;User ID=usr_gbs;Password=usr_gbs;Trusted_Connection=False;"

Der ConnectionString funktioniert prinzipiell auch, da sich die WindowsMobile Anwendung problemlos verbinden kann, wenn ich Sie auf dem Desktop-PC ausführe.

Die Remoteverbindung vom SQL Server 2005 Express habe ich bereits aktiviert, Sie funktioniert auch, da die WIndowsMobile Anwendung auch von einem anderen Rechner im Netzwerk funktioniert.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

3.511 Beiträge seit 2005
vor 15 Jahren

Ist der SQL Browser Dienst aktiviert?

Wenn man mal im Internet etwas ließt, kann es Probleme geben mit benannten Instanzen. Installier den SQL Server nochmal unter der Defaultinstanz. Ob das auch was bringt, weis ich nicht. Ist auch nur eine Vermutung.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Was meinst du mit der DefaultInstanz? Die DefaultInstanz ist SQLExpress. Unter dieser einfach neu installieren?

Gibt mir bitte mal einen Link zu dem Thema. Hab speziell dazu nichts gelesen bisher.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

3.511 Beiträge seit 2005
vor 15 Jahren

Die Defaultinstanz ist die Instanz ohne Namen.

Einfach mal bei Google "ppc sql connection" oder "sqlexception ppc" eingeben. Gibt eigentlich eine ganze Menge an Infos dazu.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Ah interessant. Danke für die Google Keywords.
Wegen der Instanz muss ich mal drauf achten.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Eine Neuinstallation hat leider nichts gebracht.
Wenn es jemand irgendwann mal erfolgreich umgesetzt hat, dann die Verbindung von einem PPC (Win Mobile 5.0) zu einem SQL Server 2005 Express, dann wäre es super wenn er es mir hier schreiben könnte.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

Maddinel Themenstarter:in
1.371 Beiträge seit 2004
vor 15 Jahren

Hallo,

es gibt Neuigkeiten!

Ich habe mal folgenden ConnectionString benutzt:

"Data Source=192.168.2.101;Initial Catalog=gbs_net;Integrated Security=SSPI;User ID=usr_gbs;Password=usr_gbs;";

Wenn ich jetzt mal im Debugger das Exception-Objekt durchsuche, stoße ich auf folgende Fehlermeldung:

Fehler bei der Anmeldung für den Benutzer ''. Der Benutzer ist keiner vertrauenswürdigen SQL Server-Verbindung zugeordnet.

Die Meldung hat die Nummer 18452.

Ich habe in der MS-Knowledgebase auch schon geschaut. Dort steht, dass im SQL-Server der Falsche Anmeldetyp angegeben ist. Also Spricht dort soll dann nur WindowsAuthentication eingestellt sein und man soll es auf SQL-User einstellen.
Leider war dies bei mir trotz der Fehlermeldung bereits richtig eingestellt. Woran könnte es liegen?

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

F
10.010 Beiträge seit 2004
vor 15 Jahren

Wenn du integrated Security angibst versucht er ( egal ob du pwd angibst )
immer Windowsauthorisierung.

Die kann es aber auf dem PPC nicht geben.

Hättest Du aber alles viel eher haben können, wenn Du diese "kleinigkeit"
eher gepostet hättest.