ADO.NET DataReaderでC#とSQL Serverのデータ型を橋渡し
C#におけるSQL Serverデータ型の対応関係
データ型とは?
データ型は、データをどのように格納し解釈するかを定義する規則です。データ型によって、データのサイズ、許容値、演算方法などが決まります。
C#とSQL Serverには、それぞれ独自の基本データ型が存在します。これらのデータ型は、互いに直接対応するわけではありませんが、類似しているものや、変換可能なものがあります。
数値型
C# | SQL Server | 説明 | 対応関係 |
---|---|---|---|
int | int | 32ビット整数 | 同一 |
long | bigint | 64ビット整数 | 同一 |
float | float | 32ビット浮動小数点数 | 同一 |
double | double | 64ビット浮動小数点数 | 同一 |
文字列型
C# | SQL Server | 説明 | 対応関係 |
---|---|---|---|
string | varchar(n) | 可変長文字列 (最大n文字) | string 型は最大長を指定できないため、varchar(max) と対応させることが多い |
char(n) | 固定長文字列 (n文字) | 固定長文字列 | string 型は可変長のため、直接的な対応関係はない |
その他のデータ型
C# | SQL Server | 説明 | 対応関係 |
---|---|---|---|
bool | bit | ブール値 (True/False) | 同一 |
DateTime | datetime | 日時 | 同一 |
データ型の変換
C#とSQL Server間でデータをやり取りするには、データ型変換が必要となる場合があります。.NET Frameworkには、データ型変換を行うための様々なクラスやメソッドが用意されています。
例
// int 型から int 型への変換
int csharpInt = 10;
int sqlServerInt = (int)csharpInt;
// string 型から varchar 型への変換
string csharpString = "Hello, world!";
string sqlServerString = "varchar(max)";
sqlServerString = csharpString;
// DateTime 型から datetime 型への変換
DateTime csharpDateTime = DateTime.Now;
DateTime sqlServerDateTime = (DateTime)csharpDateTime;
C#とSQL Serverのデータ型は直接対応しませんが、類似しているものや、変換可能なものがあります。データ型変換を理解し、適切な対応関係を把握することで、C#からSQL Serverへのデータアクセスをスムーズに行うことができます。
C#とSQL Serverのデータ型対応 サンプルコード
接続文字列
string connectionString = "Data Source=localhost;Initial Catalog=Test;Integrated Security=True";
データの読み書き
using (SqlConnection connection = new SqlConnection(connectionString))
{
// データの読み込み
string sql = "SELECT * FROM dbo.Customers";
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int id = reader.GetInt32(0);
string name = reader.GetString(1);
Console.WriteLine($"{id} - {name}");
}
reader.Close();
// データの書き込み
sql = "INSERT INTO dbo.Customers (Name) VALUES (@name)";
command = new SqlCommand(sql, connection);
command.Parameters.AddWithValue("@name", "John Doe");
command.ExecuteNonQuery();
}
データ型変換
// int 型から int 型への変換
int csharpInt = 10;
int sqlServerInt = (int)csharpInt;
// string 型から varchar 型への変換
string csharpString = "Hello, world!";
string sqlServerString = "varchar(max)";
sqlServerString = csharpString;
// DateTime 型から datetime 型への変換
DateTime csharpDateTime = DateTime.Now;
DateTime sqlServerDateTime = (DateTime)csharpDateTime;
補足
- サンプルコードはあくまで参考例です。実際のコードは、要件に合わせて変更する必要があります。
- データベースへの接続や操作には、セキュリティ対策が必要です。
C#とSQL Serverのデータ型対応:その他の方法
ADO.NET DataReader は、データベースから読み込んだデータを逐次処理するためのクラスです。DataReader は、データ型変換を自動的に行うため、コードを簡潔に記述できます。
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = "SELECT * FROM dbo.Customers";
SqlCommand command = new SqlCommand(sql, connection);
connection.Open();
SqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
int id = reader.GetInt32("ID"); // 列名でデータ型を指定
string name = reader.GetString("Name");
Console.WriteLine($"{id} - {name}");
}
reader.Close();
}
Dapper は、ADO.NET をラップするオープンソースのライブラリです。Dapper は、DataReader よりもさらに簡潔なコードでデータベース操作を行うことができます。
using (var connection = new SqlConnection(connectionString))
{
var customers = connection.Query<Customer>("SELECT * FROM dbo.Customers");
foreach (var customer in customers)
{
Console.WriteLine($"{customer.ID} - {customer.Name}");
}
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
}
Entity Framework は、オブジェクト指向プログラミング (OOP) でデータベース操作を行うためのフレームワークです。Entity Framework は、データ型変換を自動的に行うため、コードを大幅に簡略化できます。
using (var context = new MyContext())
{
var customers = context.Customers.ToList();
foreach (var customer in customers)
{
Console.WriteLine($"{customer.ID} - {customer.Name}");
}
}
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
}
C#とSQL Serverのデータ型対応には、様々な方法があります。それぞれの方法にはメリットとデメリットがあり、開発環境や要件に合わせて最適な方法を選択する必要があります。
c# .net sql-server