Hallo Leute,
ich bin zwar nicht neu in der Datenbank Programmierung(ich habe schon mit MySQL gearbeitet) aber ich komme jetzt mit der Microsoft SQL Compact 3.5 Datenbank nicht ganz zurecht. Ich habe diese Datenbank auf einem Server möchte aber nur vom selben Server drauf zugreifen, also nicht von aussen! Muss ich dazu jetzt auch eine "Verbindung" aufbauen oder wie mache ich das? Nach langem Googeln habe ich diesen Code schreiben können:
string connectstr =
"Data Source =" + Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + @"\accounts.sdf";
//Baut die Verbindung zu Datenbank auf
SqlConnection sql = new SqlConnection(
connectstr);
sql.Open();
SqlCommand command = new SqlCommand("Select * From Accounts", sql);
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader["name"].ToString());
}
sql.Close();
Bei dem Verbindungsaufbau gibt es aber nach einiger Zeit eine "SqlException":
System.Data.SqlClient.SqlException wurde nicht behandelt.
Message="Netzwerkbezogener oder instanzspezifischer Fehler beim Herstellen einer Verbindung mit SQL Server. Der Server wurde nicht gefunden, oder auf ihn kann nicht zugegriffen werden. Überprüfen Sie, ob der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (provider: SQL-Netzwerkschnittstellen, error: 26 - Fehler beim Bestimmen des angegebenen Servers/der angegebenen Instanz)"
Source=".Net SqlClient Data Provider"
ErrorCode=-2146232060
Class=20
LineNumber=0
Number=-1
Server=""
State=0
StackTrace:
bei System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
bei System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject)
bei System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
bei System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
bei System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
bei System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
bei System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
bei System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
bei System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
bei System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
bei System.Data.SqlClient.SqlConnection.Open()
bei DB_TEST.Program.Main(String[] args) in C:\reposC\Xtras\DB_TEST\DB_TEST\Program.cs:Zeile 23.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:
Ich hoffe ihr könnt mir helfen!
mfg
MasterLord
Ich glaube du musst SqlCeConnection anstelle von SqlConnection verwenden.
Das gleiche gilt für SqlCommand -> SqlCeCommand, SqlTransaction -> SqlCeTransaction, etc.
Ich hoffe das hilft.
In welchem Namespace befinden sich diese?
//EDIT: Hab den Namespace. Danke ich werde das später testen...
Ok das mit dem Abfragen, Löschen, Erstellen etc habe ich jetzt alles hinbekommen. Nur wenn ich das Programm jetzt beende dann ist die Datenbank beim nächsten mal starten leer! Woran kann das liegen?
mfg
MasterLord
Weil irgendwo in den Projekteinstellungen steht, das die DB bei jedem kompilieren ins Ausgabeverzeichnis kopiert werden soll. Somit wird jedesmal beim Kompilieren eine neue erstellt.
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)