2

vbアプリケーションのユーザーがデータベース(MySQL)をストレージメディアにバックアップおよび復元できるようにしたい。私の問題は、ドライブcで作成されているかどうかに関係なく、アプリケーションがダムファイルを見つけられるようにするため、コードで'c:\を指定したくないということです。以下は私が使用したコードですが、別のマシンにインストールすると、D:にウィンドウとプログラムファイルがありました。すべてのマシンのドライブ文字を確認し、アプリケーションを公開する前にコードを変更して、バックアップを許可する必要があることがわかりました。私はそれが普遍的であることを望みます。したがって、ダンプファイルがドライバC、Gなどにあるかどうか。どんな助けでも。以下は私が使用したコードです。Dim cmd As String

Private Sub cmdBackup_Click()
    Screen.MousePointer = vbHourglass
    DoEvents

    cmd = Chr(34) & "C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump" & Chr(34) & " -uroot -psecretpswd --routines --comments db_name > c:\MyBackup.sql"
    Call execCommand(cmd)

    Screen.MousePointer = vbDefault
    MsgBox "done"
End Sub
4

3 に答える 3

2

MySqlBackup.NETというコンパイル済みの DLL があります。実際、それは の代替手段MySqlDumpです。

特徴

  • テーブルの構造と行のエクスポート/インポート
  • ストアド プロシージャ、関数、トリガー、イベント、ビューのエクスポート/インポート
  • カスタム テーブルと行のエクスポート。
  • プロセスに暗号化を適用できます。
  • BLOB をエクスポートし、ファイルとして保存します。
  • インポート プロセス中に SQL 構文エラーを収集します。
  • エクスポート/インポートで進行状況が報告されます。プログレスバーの使用を有効にします。
  • 同期モードまたは非同期モードで実行できます。
  • Zip ファイルからのエクスポート/インポート。

詳細については、以下のリンクを参照してください。

編集: コード例を追加

MySQL データベースのバックアップ

Dim con As String = "server=localhost;user=root;pwd=1234;database=test;"
Dim file As String = "C:\backup.sql"
Dim mb As New MySqlBackup(con)
mb.ExportInfo.FileName = file
mb.Export()

MySQL データベースを復元する

Dim con As String = "server=localhost;user=root;pwd=1234;database=test;"
Dim file As String = "C:\backup.sql"
Dim mb As New MySqlBackup(con)
mb.ImportInfo.FileName = file
mb.Import()
于 2012-12-16T23:07:52.520 に答える
0

通常、このコマンドは、MySqlDumpへのパス、データベース名、および宛先フォルダーへのパスをハードコーディングするのではなく、アプリケーションの外部のパラメーターを使用して作成されます。

コードを次のように変更する必要があります

Private Sub cmdBackup_Click()
    Screen.MousePointer = vbHourglass
    DoEvents
    Dim mySqlDumpCmd = ConfigurationManager.AppSettings("PathToMySqlDump")
    Dim dbName = ConfigurationManager.AppSettings("DatabaseToBackup")
    Dim destPath = ConfigurationManager.AppSettings("DestinationPath")
    cmd = Chr(34) & mySqlDumpCmd & Chr(34) & " -uroot -psecretpswd --routines --comments " +
          dbName & " > " & destPath
    Call execCommand(cmd)
    Screen.MousePointer = vbDefault
    MsgBox "done"
End Sub

そして、application.configファイルにはこれらの値が含まれています

<?xml version="1.0"?>
<configuration>
    <configSections>
    .......

    <appSettings>
    <add key="PathToMySqlDump" value="C:\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump.exe"/>
    <add key="DatabaseToBackup" value="db_name"/>
    <add key="DestinationPath" value="C:\MyBackup.sql"/>
    </appSettings>
    .......

このようにして、アプリケーションの構成ファイルから重要な情報を読み取ります。必要に応じて、アプリケーション内の何にも触れることなく、コマンドで使用される情報を簡単に変更できます。

于 2012-12-16T23:39:26.140 に答える
0

このコードを使用します。わたしにはできる。

私はそのような問題を抱えていて、この記事を見つけました

" http://www.experts-exchange.com/Programming/Languages/.NET/Q_27155602.html "

例はC#でした。手動で vb.net に変換し、「utf8」への変換を追加しました。

   Imports System.Text
   Public Class Form1
       Dim OutputStream As System.IO.StreamWriter
        Sub OnDataReceived1(ByVal Sender As Object, ByVal e As    System.Diagnostics.DataReceivedEventArgs)
          If e.Data IsNot Nothing Then
          Dim text As String = e.Data
          Dim bytes As Byte() = Encoding.Default.GetBytes(text)
          text = Encoding.UTF8.GetString(bytes)
          OutputStream.WriteLine(text)
         End If
    End Sub

    Sub CreateBackup()
        Dim mysqldumpPath As String = "d:\mysqldump.exe"
        Dim host As String = "localhost"
        Dim user As String = "root"
        Dim pswd As String = "Yourpwd"
        Dim dbnm As String = "BaseName"
        Dim cmd As String = String.Format("-h{0} -u{1} -p{2} {3}", host, user, pswd, dbnm)
        Dim filePath As String = "d:\backup\fieName.sql"
        OutputStream = New System.IO.StreamWriter(filePath, False, System.Text.Encoding.UTF8)

        Dim startInfo As System.Diagnostics.ProcessStartInfo = New System.Diagnostics.ProcessStartInfo()
        startInfo.FileName = mysqldumpPath
        startInfo.Arguments = cmd

        startInfo.RedirectStandardError = True
        startInfo.RedirectStandardInput = False
        startInfo.RedirectStandardOutput = True 
        startInfo.UseShellExecute = False
        startInfo.CreateNoWindow = True
        startInfo.ErrorDialog = False

        Dim proc As System.Diagnostics.Process = New    System.Diagnostics.Process()
        proc.StartInfo = startInfo
        AddHandler proc.OutputDataReceived, AddressOf OnDataReceived1
        proc.Start()
        proc.BeginOutputReadLine()
        proc.WaitForExit()

        OutputStream.Flush()
        OutputStream.Close()
        proc.Close()
     End Sub

     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As      System.EventArgs) Handles MyBase.Load
       CreateBackup()
       End Sub
      End Class
于 2015-03-17T17:02:50.307 に答える