データベース接続!ADO.NETでSQLServerに接続する?
概要
.NET Framework初期のテクノロジであるADO.NETの接続型と呼ばれる方法でSQLServerに接続してみます。
ADO.NET 接続型
.NET Framework初期のテクノロジで低レベルAPIです。パフォーマンスはいいんだけどデータベースに接続し続けるんで、時間のかかる処理とかだとサーバリソースを消費しちゃいます。
SQL文は文字列のため、パラメータはSQLインジェクションを防ぐためにSqlParameterクラスを使用します。
使いどころとしては、
に対してADO.NET接続型が向いているようです。
SELECT
public List<WorkData> Select() { using (SqlConnection con = new SqlConnection( System.Configuration.ConfigurationManager.ConnectionStrings["ADONetConnection"].ConnectionString)) using (SqlCommand cmd = con.CreateCommand()) { //接続を開いて.. con.Open(); cmd.CommandText = "Select * from dbo.T_Work"; using (SqlDataReader reader = cmd.ExecuteReader()) { var list = new List<WorkData>(); while (reader.Read()) { var rec = new WorkData(); rec.ID = (int)reader["ID"]; rec.ProductCode = (string)reader["ProductCode"]; rec.ProductName = (string)reader["ProductName"]; rec.CategoryNo = (string)reader["CategoryNo"]; rec.Type = (string)reader["Type"]; list.Add(rec); } return list; } //処理が終わると接続を閉じます。 } }
INSERT
public void Insert(WorkData data) { using (SqlConnection con = new SqlConnection( System.Configuration.ConfigurationManager.ConnectionStrings["ADONetConnection"].ConnectionString)) { SqlCommand cmd = new SqlCommand( "Insert into dbo.T_Work (ProductCode,ProductName,CategoryNo,Type) Values (@ProductCode,@ProductName,@CategoryNo,@Type)", con); cmd.Parameters.AddWithValue("@ProductCode", data.ProductCode); cmd.Parameters.AddWithValue("@ProductName", data.ProductName); cmd.Parameters.AddWithValue("@CategoryNo", data.CategoryNo); cmd.Parameters.AddWithValue("@Type", data.Type); con.Open(); cmd.ExecuteNonQuery(); } }
UPDATE
public void Update(WorkData data) { using (SqlConnection con = new SqlConnection( System.Configuration.ConfigurationManager.ConnectionStrings["ADONetConnection"].ConnectionString)) { SqlCommand cmd = new SqlCommand( "Update dbo.T_Work Set ProductCode=@ProductCode,ProductName=@ProductName,CategoryNo=@CategoryNo,Type=@Type Where ID=@Id", con); cmd.Parameters.AddWithValue("@ProductCode", data.ProductCode); cmd.Parameters.AddWithValue("@ProductName", data.ProductName); cmd.Parameters.AddWithValue("@CategoryNo", data.CategoryNo); cmd.Parameters.AddWithValue("@Type", data.Type); cmd.Parameters.AddWithValue("@Id", data.ID); con.Open(); cmd.ExecuteNonQuery(); } }
DELETE
public void Delete(WorkData data) { using (SqlConnection con = new SqlConnection( System.Configuration.ConfigurationManager.ConnectionStrings["ADONetConnection"].ConnectionString)) { SqlCommand cmd = new SqlCommand( "Delete from dbo.T_Work Where ID=@Id", con); cmd.Parameters.AddWithValue("@Id", data.ID); con.Open(); cmd.ExecuteNonQuery(); } }
接続文字列はconfigに設定
App/Web.config
<configuration> <connectionStrings> <add name="ADONetConnection" connectionString="server=(localdb)\v11.0;database=LocalDB;Integrated Security=True"/> </connectionStrings> </configuration>