プログラム

SQLServerにC#でアクセスする(SqlCommand版)

これまでSQLサーバーにC#でアクセスしたことがなく、そのやり方を勉強した際に使用したものです。今回はSQLCommandによるアクセスの仕方になります。全3回に分けて記載していきます

DB接続の準備をする

検証用のSQLテーブルを作成する

今回、SQLに対して検証用に使用するテーブルをあらかじめ作成しておきます。以下のSQLコマンドは実際に使用したテーブルから生成したものになります

CREATE TABLE [dbo].[BooksTable](
	[BookId] [int] NOT NULL,
	[BookName] [varchar](250) NOT NULL,
	[BookISBN] [int] NOT NULL,
 CONSTRAINT [PK_BooksTable] PRIMARY KEY CLUSTERED 
(
	[BookId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

SQL接続文字列の作成

SQLに接続する際に使用する文字列を作成しておきます。今回は、ユーザー名とパスワードを使用して接続するようにしています

// DB登録用クラスを作成
public class BooksTableEntity
{
    public BooksTableEntity(int bookId, string bookName, int bookISBN)
    {
        BookId = bookId;
        BookName = bookName;
        BookISBN = bookISBN;
    }

    public int BookId { get; set; }

    public string BookName { get; set; }

    public int BookISBN { get; set; }
}

var builder = new SqlConnectionStringBuilder();
// DB接続先
builder.DataSource = dataSource;
builder.InitialCatalog = dbName;
// ユーザー名とパスワードでSQLに接続
builder.IntegratedSecurity = false;
builder.UserID = userId;
builder.Password = userPassword;
string connectionString = builder.ToString();

Sqlに情報を追加する

データベースにデータを登録します

public void Insert_SQLCommand(BooksTableEntity _booksTableEntity)
{
    string sql = @"
insert into BooksTable
(BookId,
BookName,
BookISBN)
values
(
 @BookId,
 @BookName,
 @BookISBN
)
";

    using (var connection = new SqlConnection(connectionString))
    using (var command = new SqlCommand(sql, connection))
    {
        connection.Open();
        command.Parameters.AddWithValue("@BookId", _booksTableEntity.BookId);
        command.Parameters.AddWithValue("@BookName", _booksTableEntity.BookName);
        command.Parameters.AddWithValue("@BookISBN", _booksTableEntity.BookISBN);
        command.ExecuteNonQuery();
    }
}

var insertBookEntity = new BooksTableEntity(1, "dbTestBook1", 123456789);
sqlConnection.Insert_SQLCommand(insertBookEntity);

Sqlの情報を取得する

データベースに登録されているデータを取得します

public void Read_SQLCommand()
{
    var sql = @"
select * from BooksTable
";
    var result = new List<BooksTableEntity>();
    using (var connection = new SqlConnection(connectionString))
    using (var command = new SqlCommand(sql, connection))
    {
        connection.Open();
        using (var reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                result.Add(new BooksTableEntity(
                    Convert.ToInt32(reader["BookId"]),
                    Convert.ToString(reader["BookName"]),
                    Convert.ToInt32(reader["BookISBN"])));
            }
        } 
    }

    foreach(var item in result)
    {
        Console.WriteLine(string.Format("BookId:{0} BookName:{1}, BookISBN:{2}", item.BookId, item.BookName, item.BookISBN));
    }
}

sqlConnection.Read_SQLCommand();

Sqlの情報を更新する

データベースに登録されているデータを更新します
更新対象のデータが存在しない場合は、データを作成しています

public void Update_SQLCommand(BooksTableEntity _booksTableEntity)
{
    string sql = @"
update BooksTable
set BookName = @BookName,
    BookISBN = @BookISBN
where BookId = @BookId
";

    using (var connection = new SqlConnection(connectionString))
    using (var command = new SqlCommand(sql, connection))
    {
        connection.Open();
        command.Parameters.AddWithValue("@BookId", _booksTableEntity.BookId);
        command.Parameters.AddWithValue("@BookName", _booksTableEntity.BookName);
        command.Parameters.AddWithValue("@BookISBN", _booksTableEntity.BookISBN);
        var updateCount = command.ExecuteNonQuery();
        if(updateCount < 1)
        {
            Insert_SQLCommand(_booksTableEntity);
        }
    }
}

var updateBooksTableEntity = new BooksTableEntity(1, "dbTestBook001", 987654321);
sqlConnection.Update_SQLCommand(updateBooksTableEntity);

Sqlの情報を削除する

データベースに登録されているデータを削除します

public void Delete_SQLCommand(int _bookId)
{
    string sql = @"
delete BooksTable
where BookId = @BookId
");
    using (var connection = new SqlConnection(connectionString))
    using (var command = new SqlCommand(sql, connection))
    {
        connection.Open();
        command.Parameters.AddWithValue("@BookId", _bookId);
        command.ExecuteNonQuery();
    }
}

sqlConnection.Delete_SQLCommand(1);

-プログラム
-, ,