2

binプロジェクトのフォルダーに保存されている SQL Server 2008 R2 データベースを使用して C# アプリケーションを構築しています。Linq to Sql メソッドを使用してデータベースを作成し、プロジェクトにアタッチします。

私が抱えている問題は、データベースのバックアップを作成しようとしているときです。というエラーがスローされます

データベース (database_name) が存在しません。名前が正しく入力されていることを確認してください。BACKUP DATABASE が異常終了しています。

ボタンクリックイベントで書いたコードは次のとおりです。

try
{
    SaveFileDialog sd = new SaveFileDialog();
    sd.Filter = "SQL Server database backup files|*.bak";
    sd.Title = "Create Database Backup";

    if (sd.ShowDialog() == DialogResult.OK)
    {
        using (SqlConnection conn = new SqlConnection(connStr))
        {
            string sqlStmt=string.Format("BACKUP DATABASE <database_name> TO DISK='{0}'",sd.FileName);

            using (SqlCommand bu2 = new SqlCommand(sqlStmt, conn))
            {
                conn.Open();
                bu2.ExecuteNonQuery();
                conn.Close();

                MessageBox.Show("Backup Created Sucessfully");
            }
        }
    }
}
catch(Exception ex)
{
    MessageBox.Show(ex.ToString());
}

私の接続文字列:

string connStr = ConfigurationManager.ConnectionStrings["project_name.Properties.Settings.project‌​_nameConnectionString"].ConnectionString; 

そして、私のapp.configファイルから

<add name="project_name.Properties.Settings.project_nameConnectionString" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\database_name.mdf;Integrate‌​d Security=True;User Instance=True" providerName="System.Data.SqlClient" /> 

誰かが私の問題の解決策を持っていれば、それは役に立ちます。

4

2 に答える 2

6

非常に長いブレインストーミングの後、私はついに成功したので、ここに解決策があります:

try
{
    SaveFileDialog sd = new SaveFileDialog();
    sd.Filter = "SQL Server database backup files|*.bak";
    sd.Title = "Create Database Backup";

    if (sd.ShowDialog() == DialogResult.OK)
    {
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["project_name.Properties.Settings.project‌​_nameConnectionString"].ConnectionString))
        {
            string sqlStmt = string.Format("backup database [" + System.Windows.Forms.Application.StartupPath + "\\dbname.mdf] to disk='{0}'",sd.FileName);
            using (SqlCommand bu2 = new SqlCommand(sqlStmt, conn))
            {
                conn.Open();
                bu2.ExecuteNonQuery();
                conn.Close();

                MessageBox.Show("Backup Created Sucessfully");
            }                   
        }
    }
}
catch (Exception)
{
    MessageBox.Show("Backup Not Created");
}

この質問のリソース: How to backup from .mdf database that I created

于 2013-06-08T07:20:32.693 に答える
3

User Instance と AttachDbFileName=のアプローチ全体に欠陥があります - せいぜい! .mdfVisual Studio でアプリを実行すると、ファイルが (App_Dataディレクトリから出力ディレクトリ (通常.\bin\debugはアプリが実行される場所) に) コピーされ、ほとんどの場合、問題なく動作しますが、間違ったINSERTものを見ているだけです。最後にmdfファイル

また、.mdfファイルは SQL Server インスタンスに永続的にアタッチされていないため、そのようなコマンドを使用することはできませんBACKUP DATABASE

私の意見では、本当の解決策

  1. SQL Server Express をインストールします (とにかく、既に完了しています)。

  2. SQL Server Management Studio Express をインストールする

  3. SSMS Expressでデータベースを作成し、論理名を付けます (例: MyDatabase)

  4. 論理データベース名(サーバー上で作成したときに指定) を使用して接続し、物理データベース ファイルとユーザー インスタンスをいじらないでください。その場合、接続文字列は次のようになります。

    Data Source=.\\SQLEXPRESS;Database=MyDatabase;Integrated Security=True
    

    そして、それ以外はすべて以前とまったく同じです...

そして、これが完了したらBACKUP DATABASE MyDatabase ....、問題なく使用してバックアップを実行することもできます

于 2013-05-25T05:49:33.837 に答える