Windows フォームから SQL Server LocalDB を更新する
.NET の Windows フォームから SQL Server 2012 Express の LocalDB を更新するサンプルを作成してみます。
使用する環境は、Visual Studio 2012 for Windows Desktop で、Windows フォームは .NET Framework 4.5 をターゲットにします。
LocalDB データベースの作成
以下のエントリを参考に、LocalDB データベースを作成します。
インスタンス名 | LocalDB Instance |
データベース名 | LocalDB |
データベースパス | C:\temp |
上記データベースに、以下の定義で Users テーブルを作成します。
列名 | データ型 |
ID | int |
Name | nvarchar(50) |
Windows フォームプロジェクトの作成
Visual Studio を起動して、LocalDBSample という名前の Windows フォームプロジェクトを作成します。
Visual Studio にデータベース取り込み
データソースビューを開き、「新しいデータソースの追加」をクリックします。
データベースを選択して「次へ」。
データセットを選択して「次へ」。
「新しい接続」をクリック。
接続の追加画面で以下の設定を行いOK。
データソース | Microsoft SQL Server データベース ファイル |
データベース ファイル名 | C:\Temp\LocalDB.mdf |
データ接続に LocalDB.mdf が表示されていることを確認して「次へ」。
以下のメッセージが表示されますが、今回はデータベースを直接使用したいので「いいえ」をクリック。
そのまま「次へ」。
テーブルにチェックを入れて「完了」をクリックして終了。
Windows フォームの作成
DataGridView のデータソースを Users テーブルにして、以下のようなフォームを作成します。
追加ボタン(buttonAdd)に以下のコードを追加します。
using System.Data.SqlClient;
private void buttonAdd_Click(object sender, EventArgs e)
{
string connectionString = @"Server=(LocalDB)\v11.0; Integrated Security=true ;AttachDbFileName=C:\Temp\LocalDB.mdf";SqlConnection con = new SqlConnection(connectionString);
string sql = "INSERT INTO Users (ID, Name) VALUES(@ID, @Name);";
SqlCommand command = new SqlCommand(sql, con);
SqlParameter pID = new SqlParameter("@ID", int.Parse(this.textBoxID.Text));
command.Parameters.Add(pID);SqlParameter pName = new SqlParameter("@Name", this.textBoxName.Text);
command.Parameters.Add(pName);
con.Open();
command.ExecuteNonQuery();
con.Close();//更新をDataGridViewに反映
this.usersTableAdapter.Fill(this.localDBDataSet.Users);
アプリケーションの実行
アプリケーションを実行して、ID=1, Name=田中 を指定して「追加」ボタンをクリックすると、正しく DataGridView にデータが反映されます。
気になる点
SQL文でデータ更新すると正しく反映されますが、DataGridView でデータを更新してもデータベースに更新が反映されませんでした。
SQL Server Management Studio では問題なくデータ更新ができるので、もしかしたら LocalDB と DataGridView の更新で不具合があるのかもしれません。
DataGridView の設定を何か見落としているかもしれませんが・・・。
スポンサーリンク
Twitter ではブログにはない、いろんな情報を発信しています。
@fnyaさんをフォロー
コメント