「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

2024.08.04
XML
カテゴリ: WPFC#.NET


C# WPF で SQL Server にデータを登録するサンプルコードを以下に示します。この例では、ユーザーが `TextBox` に入力したデータを SQL Server に登録します。


## プロジェクトの設定



   Visual Studio で新しい WPF アプリケーションプロジェクトを作成します。


2. **NuGet パッケージの追加**:

   必要に応じて `System.Data.SqlClient` パッケージをインストールします。


## クラスの構成


### モデル (Model)


まず、データベースのエンティティを表すモデルクラスを作成します。


```csharp

public class Customer

{

    public int CustomerID { get; set; }

    public string Name { get; set; }

    public string Email { get; set; }

}

```


### データ アクセス層 (Data Access Layer)


次に、SQL Server に接続してデータを登録するためのクラスを作成します。


```csharp

using System.Data.SqlClient;


public class DataService

{

    private string _connectionString = "Your Connection String Here";


    public void AddCustomer(Customer customer)

    {

        using (var connection = new SqlConnection(_connectionString))

        {

            var command = new SqlCommand("INSERT INTO Customers (Name, Email) VALUES (@Name, @Email)", connection);

            command.Parameters.AddWithValue("@Name", customer.Name);

            command.Parameters.AddWithValue("@Email", customer.Email);


            connection.Open();

            command.ExecuteNonQuery();

        }

    }

}

```


### ビュー モデル (ViewModel)


次に、データを登録するためのビュー モデルを作成します。


```csharp

using System.ComponentModel;

using System.Runtime.CompilerServices;

using System.Windows.Input;


public class MainViewModel : INotifyPropertyChanged

{

    private string _name;

    private string _email;

    private readonly DataService _dataService;


    public string Name

    {

        get => _name;

        set

        {

            _name = value;

            OnPropertyChanged();

        }

    }


    public string Email

    {

        get => _email;

        set

        {

            _email = value;

            OnPropertyChanged();

        }

    }


    public ICommand AddCustomerCommand { get; }


    public MainViewModel()

    {

        _dataService = new DataService();

        AddCustomerCommand = new RelayCommand(AddCustomer);

    }


    private void AddCustomer()

    {

        var customer = new Customer { Name = Name, Email = Email };

        _dataService.AddCustomer(customer);


        // Clear input fields

        Name = string.Empty;

        Email = string.Empty;

    }


    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)

    {

        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));

    }

}

```


### コマンド (RelayCommand)


`RelayCommand` クラスを使用して、ボタンのコマンドを実装します。


```csharp

using System;

using System.Windows.Input;


public class RelayCommand : ICommand

{

    private readonly Action _execute;

    private readonly Func<bool> _canExecute;


    public RelayCommand(Action execute, Func<bool> canExecute = null)

    {

        _execute = execute;

        _canExecute = canExecute;

    }


    public bool CanExecute(object parameter)

    {

        return _canExecute == null || _canExecute();

    }


    public void Execute(object parameter)

    {

        _execute();

    }


    public event EventHandler CanExecuteChanged

    {

        add => CommandManager.RequerySuggested += value;

        remove => CommandManager.RequerySuggested -= value;

    }

}

```


### ビュー (View)


データを入力するための XAML を作成します。


`MainWindow.xaml`:


```xml

<Window x:Class="WpfApp.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="200" Width="400">

    <Grid>

        <StackPanel>

            <TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" 

                     Width="200" Height="30" Margin="10" 

                     PlaceholderText="Enter Name" />

            <TextBox Text="{Binding Email, UpdateSourceTrigger=PropertyChanged}" 

                     Width="200" Height="30" Margin="10" 

                     PlaceholderText="Enter Email" />

            <Button Content="Add Customer" 

                    Command="{Binding AddCustomerCommand}" 

                    Width="100" Height="30" Margin="10" />

        </StackPanel>

    </Grid>

</Window>

```


### ビュー コードビハインド (View Code-Behind)


最後に、ビューのコードビハインドファイルでデータコンテキストを設定します。


`MainWindow.xaml.cs`:


```csharp

public partial class MainWindow : Window

{

    public MainWindow()

    {

        InitializeComponent();

        DataContext = new MainViewModel();

    }

}

```


## コードの説明


1. **モデル (Model)**:

   - `Customer` クラスは、データベースのエンティティを表します。


2. **データ アクセス層 (Data Access Layer)**:

   - `DataService` クラスは、SQL Server に接続してデータを登録します。`AddCustomer` メソッドは、SQL クエリを使用してデータを挿入します。


3. **ビュー モデル (ViewModel)**:

   - `MainViewModel` クラスは、ユーザーが入力したデータを保持し、`AddCustomer` メソッドでデータをデータベースに登録します。`RelayCommand` を使用して、ボタンのクリックイベントを処理します。


4. **コマンド (RelayCommand)**:

   - `RelayCommand` クラスは、WPF のコマンド機能を実装するための汎用的なクラスです。


5. **ビュー (View)**:

   - `MainWindow.xaml` では、ユーザーが名前とメールアドレスを入力できるようにし、`Add Customer` ボタンでデータを登録します。


6. **ビュー コードビハインド (View Code-Behind)**:

   - `MainWindow.xaml.cs` では、`DataContext` を `MainViewModel` に設定します。


このサンプルコードを実行すると、ユーザーが `TextBox` に入力したデータが SQL Server に登録されます。SQL Server の接続文字列を正しく設定することを忘れないでください。また、データベースとテーブルが存在することを確認してください。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.08.04 15:16:02


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Mobilize your Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: