Wie kann ich eine SDF-Datenbank? Keine Verbindungszeichenfolge, die ich versuche zu funktionieren scheint
Habe ich versucht, buchstäblich 50+ verschiedene versuche, auf meinem connection-string für meine lokale Datenbank, und nichts scheint zu funktionieren. Ich bin im wesentlichen nur versucht, eine Verbindung zu öffnen die Datenbank-Datei so kann ich den dump in die Daten, die ich gezogen habe aus meiner excel-Tabelle. Ich bin mit Visual C# macht eine offline-winform-Anwendung.
Egal was Verbindungszeichenfolge, die ich versuche in meiner app.config, es schlägt immer fehl, wenn er versucht zu schreiben "dReader" auf die Datenbank.
Der Fehler ist in der Regel diese je nachdem, welche Zeichenfolge ich versuchen:
"Ein Netzwerk-oder instanzspezifischen Fehler beim herstellen einer Verbindung zu SQL Server. Der server wurde nicht gefunden oder ist nicht zugänglich. Stellen Sie sicher, dass der Instanzname richtig ist und ob SQL Server Remoteverbindungen zulässt. (Anbieter: Named Pipes-Anbieter, Fehler: 40 - Konnte nicht geöffnet werden eine Verbindung zu SQL Server)"
Ich habe schon viele online-Beispiele und Ressourcen, und keiner scheint zu arbeiten. Ich hoffe jemand hier kann darauf hinweisen, warum es fehlschlägt.
Hier ist meine app.config in seiner neuesten form:
<connectionStrings>
<add name="DDP_Project.Properties.Settings.DDP_DatabaseConnectionString"
connectionString="Data Source=E:\Other DDP Projects\DDP_Project_SDF\DDP_Project\DDP_Database.sdf;"
providerName="Microsoft.SqlServerCe.Client.3.5" />
</connectionStrings>
Hier ist mein form-code:
private void Profiles_Click(object sender, EventArgs e)
{
profilesDialog.FileName = "[YOUR_UPLOAD_FILE_HERE]";
var result = profilesDialog.ShowDialog();
if (result == DialogResult.OK)
{
HandleFileSelection();
}
}
private void HandleFileSelection()
{
var file = profilesDialog.FileName;
//Create a connection to the file datafile.sdf in the program folder
string dbfile = new System.IO.FileInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).DirectoryName + "\\DDP_Database.sdf";
SqlCeConnection connection = new SqlCeConnection("datasource=" + dbfile);
string strConnection = ConfigurationManager.ConnectionStrings["DDP_Project.Properties.Settings.DDP_DatabaseConnectionString"].ConnectionString;
//Create connection string to Excel work book
string excelConnectionString = string.Format(
@"Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=""{0}"";
Extended Properties=""Excel 8.0;HDR=YES;""", file
);
//Create Connection to Excel work book
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
OleDbCommand cmd = new OleDbCommand("SELECT [ID],[STATUS],[FAN_NUM],[PROFILE_NAME],[DESTINATION_HOST],[USER_ID],[USER_PASSWORD],[PROTOCOL],[PORT],[PATH],[CONTACT_NAME],[CONTACT_EMAIL],[CONTACT_PHONE],[CONTACT_ALT_PHONE],[CONTACT_CITY],[CONTACT_STATE],[CONTACT_CONTACT_TIME] FROM [Sheet1$]", excelConnection);
excelConnection.Open();
OleDbDataReader dReader;
dReader = cmd.ExecuteReader();
SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection);
sqlBulk.DestinationTableName = "Profiles";
sqlBulk.ColumnMappings.Add("ID", "ID");
sqlBulk.ColumnMappings.Add("STATUS", "STATUS");
sqlBulk.ColumnMappings.Add("FAN_NUM", "FAN_NUM");
sqlBulk.ColumnMappings.Add("PROFILE_NAME", "PROFILE_NAME");
sqlBulk.ColumnMappings.Add("DESTINATION_HOST", "DESTINATION_HOST");
sqlBulk.ColumnMappings.Add("USER_ID", "USER_ID");
sqlBulk.ColumnMappings.Add("USER_PASSWORD", "USER_PASSWORD");
sqlBulk.ColumnMappings.Add("PROTOCOL", "PROTOCOL");
sqlBulk.ColumnMappings.Add("PORT", "PORT");
sqlBulk.ColumnMappings.Add("PATH", "PATH");
sqlBulk.ColumnMappings.Add("CONTACT_NAME", "CONTACT_NAME");
sqlBulk.ColumnMappings.Add("CONTACT_EMAIL", "CONTACT_EMAIL");
sqlBulk.ColumnMappings.Add("CONTACT_PHONE", "CONTACT_PHONE");
sqlBulk.ColumnMappings.Add("CONTACT_ALT_PHONE", "CONTACT_ALT_PHONE");
sqlBulk.ColumnMappings.Add("CONTACT_CITY", "CONTACT_CITY");
sqlBulk.ColumnMappings.Add("CONTACT_STATE", "CONTACT_STATE");
sqlBulk.ColumnMappings.Add("CONTACT_CONTACT_TIME", "CONTACT_CONTACT_TIME");
sqlBulk.WriteToServer(dReader);
sqlBulk.Close();
excelConnection.Close();
}
private void profilesDialog_FileOk(object sender, EventArgs e)
{
}
}
}
- Egal, wie die SDF-Datei ist für SQL-Server? Ich habe nicht bemerkt, eine solche Datei. Aber wenn u eine Verbindung zum sql-server, u don ' T-link zu der Datei. Die Datei angefügt oder wiederhergestellt wird, um den sql server. So wird die Verbindungszeichenfolge sollte so etwas wie dies : Server=myServerAddress;Database=myDataBase;User ID=myUsername;Password=myPassword;
- Damit SQL Server Compact kann nur verwendet werden mit einer SQL server-Instanz? Ich dachte, es war mehr standalone, ein Ersatz für Access. Bin ich falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese...
Erste:
Erstellen Sie zuerst eine test-Methode können Sie überprüfen, wenn Sie eine Verbindung herstellen können sqlcedatabase.
Zweite:
Laden Sie einfach Ihre excel-Datei Daten in eine Datatable und foreach verwenden, dann speichern Sie es auf Ihrem sql-ce-Datenbank-Datei..
Hinsichtlich
Ich denke, das problem, das Sie sehen, ist, dass Sie versuchen, verwenden Sie ein SqlConnection-Verbindung zu einer SQL-Compact-Datenbank. Die .sdf ist eine kompakte Datenbank, und Sie müssen verwenden Sie die SqlCeConnection, um eine Verbindung herzustellen. Erstellen Sie die Verbindung mithilfe dieses aber dann brauchen Sie es nicht verwenden. Stattdessen übergeben Sie die Verbindungszeichenfolge, um die SqlBulkCopy-Objekt, das implizit erstellt ein SqlConnection-Objekt aus string. Ich bin der Annahme, dass es auf dieser Linie immer, wo Sie den Fehler. Wenn Sie bemerken, wird der namespace des SqlBulkCopy ist System.Daten.SqlClient. Der Grund, den Sie sehen, der Fehler ist, dass Sie versuchen, gehen durch SQL-Server die Verbindung und beheben können, wird die Verbindungszeichenfolge zu einer SQL Server-Datenbank. Leider, ich glaube nicht, dass das System.Daten.SqlServerCe hat, die äquivalent zu der SqlBulkCopy. Bleiben, um mit Klassen in System.Daten.SqlServerCe, und die Dinge funktionieren sollte, wie erwartet. Sie will einfach haben, um die Verarbeitung in einer eher manuellen Mode.
Laut diese post, SqlBulkCopy nicht unterstützt mit SqlCe.