これまで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);