Wie mache ich das? Mein Programm soll die Möglichkeit haben die Datenbank zu ex- und importieren. Auf msdn bin ich da auch "bcp" gestossen, allerdings keine genauere Anleitung. was muss ich überhaupt einbinden um bcp nutzen zu können?
Mit den T-SQL Befehlen BACKUP und RESTORE geht das ganz gut. Man kann eine datenbank in eine BAK-Datei exportieren, sie z.B. auf einen anderen Server kopieren und dort mittels RESTORE wieder zum Leben erwecken. Näheres dazu steht in der SQL Server Online-Hilfe.
Hallo Rainbird,
weißt du zufällig, ob es solche Funktionen auch für mySql gibt? Würde sowas benötigen, da ich im MySQL-Administrator die Scheduled-Backups noch nicht zum laufen gebracht habe (hab mich allerdings bisher noch nicht sehr intensiv damit beschäftigt...).
mfg
Leider finde ich nichts zu diesen Punkten - ist das auch für C#? Hast Du da mal einen Link für mich?
Alles was ich suche ist sowas wie:
exportiere(Datenbank,File); und
importiere(File,Datenbank);
T-SQL ist reine Mictosoft Sache.
MySQL hat sowas nicht, da muss mit Standart-Sql-Befehlen arbeiten.
Wie komme ich dazu - tsql-statements nutzen zu dürfen? was muss eingebunden werden?
TSQL ist beim MSSQL-Server drin, ist halt die SQL-Sprache von MS.
Original von suamikim
Hallo Rainbird,weißt du zufällig, ob es solche Funktionen auch für mySql gibt?
Bei MySQL gibt es die Möglichkeit einen sog. Dump der Datenbank in eine Datei zu schreiben. Man kann eine Datenbank auch so wieder einlesen. Das geht allerdings nur mit einem Konsolen Tool, ist also nicht per SQL anzustoßen.
So wirds gemacht:
Hallo Rainbird,
dieses dump hätte ich schonmal ausprobiert bin aber leider nicht damit klargekommen (hab mich allerdings auch noch nicht weiter damit beschäftigt).
Wenn ich mich richtig erinnere, kann man dabei auch eine MySql-Datenbank direkt auf eine andere MySql-DB übertragen (unabhängig davon, ob die beiden DB's am selben oder unterschiedlichen Servern sind). Stimmt das? Genau sowas würde ich brauchen. Könnte ich mich vielleicht per PN mal an dich wenden, wenn ich es wieder versuche und nicht weiterkomme?
danke, mfg
mike
@suamikim: So ein Dump ist praktisch ein riesiges SQL Skript, welches die komplette Datenbank mit allen Einstellungen und Daten erzeugt. Du kannst damit Datenbank kopieren, sichern, zwischen Servern umziehen, völlig egal. Du kriegst das schon hin. Ist nicht schwer.
@netshark1000: Hier ist ein MSDN Artikel zum Thema mit komplettem Quellcode für Deine importieren und exportieren Funktionen:
Danke, habe mir das angeschaut, aber ich kann das so nicht in C# übertragen. Oder wie ist der Artikel zu verstehen?
Kann man ansonsten hieraus was basteln: Process p = new Process();
p.StartInfo = new ProcessStartInfo("<bcpPfad>","<argumente>");
p.StartInfo.CreateNoWindow = true;
p.Start();
p.WaitForExit();
if (p.ExitCode == ...) ...
?? Wie bindet man das in C# ein?
Das kannst Du wohl 1:1 in C# übertragen. .NET ist .NET, egal ob VB.NEt oder C# oder J# oder sonst was. Das sind alles nur Syntaxunterschiede. Folgende Zeile in VB.NET
Dim sqlCommand As System.Data.SqlClient.SqlCommand = New System.Data.SqlClient.SqlCommand("BACKUP DATABASE [" & DatabaseName & "] TO DISK = '" & BackupFilePath & "'",sqlConnection)
wird in C#eben so hingeschrieben:
System.Data.SqlClient.SqlCommand sqlCommand=new System.Data.SqlClient.SqlCommand("BACKUP DATABASE [" + databaseName + "] TO DISK = '" + backupFilePath + "'",sqlConnection);
Es ist das selbe, nur anders hingeschrieben. Ein SqlCommand ist immer ein SqlCommand.
Zur Not gibst VB.NET->C# Konverter. In #develop ist z.B. ein sehr guter eingebaut.
Ok, ich habe jetzt nur noch ein Problem mit dem "connectionString" und weis nicht so recht was da hin muss. die Datenbank ist ja nicht irgendwo im internet, sondern "direkt in meinem Programm".
Hier der Code:
private void backup(string backupFilePath, string connectionString)
{
SqlConnection sqlConnection = new SqlConnection();
System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand("BACKUP DATABASE [" + dateDatabaseDataSet + "] TO DISK = '" + backupFilePath + "'", sqlConnection);
sqlConnection.Open(connectionString);
sqlCommand.ExecuteNonQuery();
Der Connection-String besteht aus folgenden Bestandteilen, die mit Strichpunkt getrennt werden:
*Initial Catalog = Datenbankname
*Data Source=Name der SQL Server Instanz
*Integrated Security=SSPI (Für die aktivierung der integrierten Sicherheit)
Ein Beispiel:
Angenommen Du hast eine SQL Server Instanz mit dem Namen PC1\Srv1 und möchtest mit Windows-Anmeldung auf die Datenbank Data1 zugreifen. Dann würdest Du folgenden ConnectionString benötigen:
Initial Catalog=Data1;Data Source=PC1\Srv1;Integrated Security=SSPI
Ist das auch bei meiner Datenbank im Studio2005 so? Da habe ich mich gar nicht groß um die Datenbank gekümmert, sie nur über Data > Add New Datasource angelegt, die Felder definiert und konfguriert und fertig. Nichts mit Server&Co.
Ich binb auch zu blöd meinen Code entsprechend anzupassen, da ich die Materie nicht richtig durchsteige. Hat noch jemand einen Rat?
Dir fehlen einfach die Grundlagen. Software Entwicklung ist eine komplexe Materie. Man kann keine Software entwicklen, ohne sich darum zu kümmern, wie alles funktioniert. Assistenten & Co von Visual Studio sollen die Arebit erleichtern, ersetzen aber kein vernünftiges Buch. Das aufbauen einer Verbindung zur Datenbank ist Pippifax. Das liest Du Dir einmal durch und dann weisst Du wie es geht.
Sowas kann ein Forum nicht abdecken.
Du solltest Dir ein Buch zum Thema ADO.NET besorgen. Günstige IT-Bücher bekommst Du bei www.terrashop.de. Ansonsten findest Du alles an grundlagen in der deutschen MSDN Library:
http://www.microsoft.com/germany/msdn/library/default.mspx?mfr=true
Außerdem kannst Du Dir folgendes Schulungsvideo zum Theam ADO.NET ansehen. Dann solltest Du das nötigste wissen:
Aber ist es denn so kompliziert die Datenstruktur zu exportieren? Will ja nicht alle Details kennen, sondern nur dieses eine DB-Feature nutzen.
Nein es ist nicht schwer. Du öffnest eine Verbindung zur Datenbank (mittels SqlConnection-Objekt) und führst "BACKUP DATABASE xxx ..." aus (mittels SqlCommand). Fertig!
Ich kann Deine Verbindungszeichenfolge leider nicht wissen.
Du kannst Dir die Verbindungszeichenfolge auch von Visual Studio erzeugen lassen. Dazu erzeugst Du eine leere Windows-Anwendung und ziehst aus dem Datenbank Explorer die entsprechende Datenbankverbindung auf Form1. Im vom Designer erzeugten Quellcode steht nun die Verbindungszeichenfolge.
Hallo,
Eure Antworten sind echt hilfreich, aber ein Problem bleibt noch, in meinen Augen:
Was tun, wenn die Datenbank remote ist, und kein Zugriff auf das Filesystem da ist?
BACKUP DATABASE [pfarr-informatik] TO DISK = 'c:\test.sql';
obiges scheidet aus, kennt jemand eine Alternative, z.B. in der Art, dass die BACKUP-SQL_Statements (Create Tables, Inserts, etc.) in die Konsole, also dort, wo man die TSQL Aktion erfaßt hat, landet. - änlich einem Select-Command, der die Ergebnisse ja auch online zurückgibt.
Bin gespannt auf Eure Ideen,
Gruß Hape
T-SQL wird direkt im Server Prozeß ausgeführt, desalb gelten alle Pfadangaben nur für den Server-Computer. Die "test.bak" (Du solltest Bakup-Dateien auch mit der BAK-Endung benennen und nicht mit SQL, da diese Endung für SQL-Skripts reserviert ist.) wird also auf der Festplatte C des Servers landen.
Oder willst Du das Datenbank-Backup auf dem Client haben, hast aber keine Möglichkeit auf die Festplatte des Servers zuzugreifen (Im Falle einen Webservers zum Beispiel)?
Was meinst Du mit BACKUP-SQL_Statements?
Vielleicht Datenbank-Erstellungsskripte generieren lassen?
Hallo Rainbird,
wie Du vermutest handelt sich um einen Webserver, auf dessen Festplatten ich keinen Zugriff habe. Ich arbeite mit Visual Studio 2005, und wüßte nun gerne, wie ich mir die Datenbank auf meinen PC sichern kann.
Es muß eigentlich nicht unbedingt ein Backup sein (mit T-SQL: BACKUP DATABASE ...), die Datenbank-Erstellungsscripte wären genauso hilfreich.
Ich verwende Visual Studio 2005 pro und vielleicht hast Du mir einen Tipp, wie ich mir diese Datenbank-Erstellungsscripte erzeugen lassen kann.
Danke, Gruß Hape
Inzwischen habe ich ein Tool gefunden, der macht das Erzeugen der Datenbankerstellungsscripts SQL ganz gut : http://www.sqlscripter.com
Aber eigentlich dachte ich an Tools, die von MSDN geliefert werden 🙂 integriert sozustagen. Dann habe ich noch ein paar stored procedures gefunden, die das auch machen können, aber nicht für sql 2005. Leider!
Grüße, Hape