Laden...

SQL Mobile / Connection.Open() / A SQL Mobile DLL could not be loaded

Letzter Beitrag vor 18 Jahren 6 Posts 1.422 Views
SQL Mobile / Connection.Open() / A SQL Mobile DLL could not be loaded

Hi,

Ich habe folgendes seltsames verhalten:

Wenn ich mein Program starte, und direkt die Methode "DoCheckConnection()" aufrufe, erhalte ich eine Fehlermeldung die besagt : "A SQL Mobile DLL could not be loaded. Reinstall SQL Mobile. [ DLL Name = sqlceqp30.dll ]"

Wenn ich allerdings vorher CreateDatabase() aufrufe, funktioniert es einwandfrei. Die Datenbank ist jedoch immer vorhanden, und das verhalten ist im Debug/Release Modus, direkt auf dem PDA und in der IDE gleich.

Kann damit jemand was anfangen? Anfangs dachte ich, es liegt an der SqlCEEngine, von daher hatte ich das Objekt im Konstruktor initialisiert (ob ich es brauche oder net), aber daran lags auch net...



	private DBAccessor()
		{
			
       }

public void CreateDatabase()
		{
			try
			{
                        _Engine = new SqlCeEngine();
			_Engine.LocalConnectionString = DBConnectionString;
			
				if (File.Exists(@"\My Documents\db.sdf"))
					File.Delete(@"\My Documents\db.sdf");

				_Engine.CreateDatabase();
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
                        finally 
{
_Engine.Dispose();
}

			SqlCeCommand cmd = new SqlCeCommand();
			cmd.Connection = DBAccessor.Instance.AcquireConnection();
		
			try
			{
				List<string> sql = new List<string>(20);

				sql.Add("CREATE...");
[...]
				foreach (string sqlQuery in sql)
				{
					cmd.CommandText = sqlQuery;
					cmd.ExecuteNonQuery();

				}
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message);
			}
		}


public void DoCheckConnection()
		{
			SqlCeConnection con = new SqlCeConnection(DBConnectionString;");
			con.Open();

			SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM Benutzer", con);
			cmd.ExecuteScalar();

			con.Close();
		}

Hi,

Ich habe nun Stundenlang debuggt, etliche Zeilen umgeschrieben und festgestellt das jetzt die Ursache an folgendem Code liegt:


public class Program
	{
		[...]
public void LoadSettings()
		{
			try
			{
				XmlDocument doc = new XmlDocument();
				doc.Load(@"\My Documents\config.xml");

				XmlNode node = null;

				node = doc.SelectSingleNode("/configuration/WebServiceURL");
				Program.Instance.WebServiceURL = node.InnerText;

				node = doc.SelectSingleNode("/configuration/WebServiceTimeout");
				Program.Instance.WebServiceTimeoutSEC = Convert.ToInt32(node.InnerText);
			}
			catch
			{
			}
		}

		private Program()
		{
			
		}
[...]

Wenn ich direkt vor dem Datenzugriff Program.Instance.LoadSettings() aufrufe, bekomme ich die "A SQL Mobile DLL..." fehlermeldung, sobald ich diese Zeile entferne funktioniert alles einwandfrei.

Hat da jemand eine erklaerung?

Gib das try and catch raus und schau mal in welcher Zeile du gerade bist.

"Das Problem kennen ist wichtiger, als die Lösung zu finden, denn die genaue Darstellung des Problems führt automatisch zur richtigen Lösung." Albert Einstein

Kommt keine Fehlermeldung.... das interessante ist, sobald ich den Methodeninhalt auskommentiere, funktioniert es...

es liegt also nicht an dem Singleton "Program", nicht an der Datenbank, sondern an den Inhalt der Methode "LoadSettings"

So...

Wenn ich
DoCheckConnection() vor Program.Instance.LoadSettings() aufrufe, funktionieren auch alle weiteren zugriffe....

Seltsames verhalten, ich werd dem mal auf den grund gehen

ich hatte diese fehlermeldung auch. Das lag allerdingsdaran das ich ein Windows Mobile 2003 Projekt gemacht habe und dieses dann auf ein Windows Mobile 5.0 PDA geladen habe beim ausführen. Ich hab manuel den SQL Server Mobile 2005 installiert. Danach ging alles ohne probleme