2012-02-04 13 views
0

データベースが開かれていないという問題が発生しています。このコードをC#プログラムに組み込む方法

ファイル "j:... \ KAELC_DB.mdf"を "bin \ Debug \ KAELC_DB.mdf"にコピーできません。 別のプロセスが を使用しているため、プロセスはファイル 'j:... \ KAELC_DB.mdf'にアクセスできません。

ファイル "j:... \ KAELC_DB_log.ldf"を "bin \ Debug \ KAELC_DB_log.ldf"にコピーできません。プロセスが他のプロセスによって使用されているため、ファイル 'j:... \ KAELC_DB_log.ldf'にアクセスできません。

私はその問題を解決するために見える「ジャスティン」、でここにhttps://stackoverflow.com/a/3998383にリンクStackExchange上の古い質問への回答を、見出した(と私はまた、「使用する」の一つであることを他の場所で読んだことがありますC#で最も効率的なプログラミング方法)、これを私のコードでどうやって使うのですか?

私は、SQLステートメントを処理するためにボタンを押しても何もしない小さなプロジェクトを作成しましたが、「ジャスティン」の意味は「接続を使用する」と混同しています...どのように私はこのコードにSQL文を入れますか?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Data.SqlClient; 

namespace MySqlTest 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      //Open SQL File 
      using (SqlConnection conn = SqlHelper.GetConn()) 
      { 
       // Use the connection <<< How ?!?!? 
      } 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      //Insert Record Into SQL File 

     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      //Read Record From SQL File 

     } 

     private void button4_Click(object sender, EventArgs e) 
     { 
      //Read All Records From SQL File 

     } 

     private void button5_Click(object sender, EventArgs e) 
     { 
      //Delete Record From DQL File 
     } 

     private void button6_Click(object sender, EventArgs e) 
     { 
      //Close SQL File 
     } 

     private void button7_Click(object sender, EventArgs e) 
     { 
      //Quit 
      this.Close(); 
     } 

     class SqlHelper 
     { 
      public static SqlConnection GetConn() 
      { 
       SqlConnection returnValue = new SqlConnection(@"Data Source=MEDESKTOP;AttachDbFilename=|DataDirectory|\SqlTestDB.mdf;Initial Catalog=MySqlDB;Integrated Security=True"); 
       returnValue.Open(); 
       return returnValue; 
      } 
     } 
    } 
} 
+1

あなたは 'SqlConnection'のドキュメントを探しましたか? – Douglas

+1

ジャスティンの答えはあなたの問題とは関係ありません。 Visual Studioのビルド中にこのエラーが発生していると思いますか?ファイルのオープンに問題があるとは言いませんが、 'bin \ Debug'フォルダにコピーしてください。 – Groo

+0

これは、SQL Serverデータベースにur mdfファイルを添付して、SQL Serverからファイルを削除し、Debugフォルダに配置します。 – Smack

答えて

1

SQLコマンドを実行する場合は、SQLCommandオブジェクトを使用します。ここ

は記事からのサンプルコードである( MSDN docs here)...

private static void ReadOrderData(string connectionString) 
{ 
    string queryString = 
     "SELECT OrderID, CustomerID FROM dbo.Orders;"; 
    using (SqlConnection connection = new SqlConnection(
       connectionString)) 
    { 
     SqlCommand command = new SqlCommand(
      queryString, connection); 
     connection.Open(); 
     SqlDataReader reader = command.ExecuteReader(); 
     try 
     { 
      while (reader.Read()) 
      { 
       Console.WriteLine(String.Format("{0}, {1}", 
        reader[0], reader[1])); 
      } 
     } 
     finally 
     { 
      // Always call Close when done reading. 
      reader.Close(); 
     } 
    } 
} 

の事は注意する:

  1. Usingブロック
  2. SqlConnectionオブジェクトを使用するには、SqlCommandオブジェクトを使用しています
  3. SqlDataReaderオブジェクトを使用します
  4. 明示的に閉じるSqlConnectionを終了しますそれを使って編集しました

+0

'SqlDataReader'を' using'ブロックに入れてみませんか?その後、それを閉じる必要はありません。 –

+0

を使用して、データリーダーを使用することができます。あなたのコネクションをいつもクローズする良い習慣(etc):2つのルール:人は愚かで、誰も信用しない –

+0

私はあなたのコメントを実際に理解していません。 @ DBMが述べたように、これらのクラスは 'IDisposable'(' SqlConnection'、 'SqlCommand'と' SqlDataReader)を実装しており、それらはすべて 'using'ブロックの中に入れなければなりません。 'try/finally'ブロックを書くことは、単純に多くの作業を行い、読みにくく、エラーを起こしやすくなります(例えば' SqlCommand'を処分するのを忘れてしまった)。 「人は愚かですか」「信頼している人はいません」と関係があるものは何ですか? – Groo

関連する問題