いつもよく検索して調べるので、めも。何回書いても覚えられぬ…orz
目次
1. app.configにSQLServer接続文字列を追加する
以下の接続情報をconfigに追加します。
Data Source=(SQL Server のホスト名またはIPアドレス);
Initial Catalog=(接続先データベース名);
Connect Timeout=60;
Persist Security Info=True;
User ID=(SQL Serverに接続するユーザーID);
Password=(ユーザーのパスワード)
例)App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="sqlsvr"
connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=TESTDB;Connect Timeout=60;Persist Security Info=True;User ID=tester;Password=1234"/>
</connectionStrings>
</configuration>
※事前に、上記に設定したDBにテーブルを準備しておく。
SYAINNO | NAME |
---|---|
1000 | 佐藤 |
1001 | 山田 |
1002 | 鈴木 |
2. System.Configurationコンポーネントを追加する
「.NET」の「プロジェクト」>「参照の追加」より、「System.Configuration」を追加します。追加後、usingに記載してください。
3. SQL Serverにアクセスし、実行結果を取得する
using System.Configuration;
using System.Data.SqlClient;
static void Main(string[]args)
{
// データベース接続文字の取得
private static string ConnectionString = ConfigurationManager.ConnectionStrings["sqlsvr"].ConnectionString;
// SQLテキスト
private static readonly string GetSinarioData = @"SELECT * FROM t_sinario";
try
{
// コネクション生成
using (var connection = new SqlConnection(ConnectionString))
{
// コネクションオープン
using (SqlCommand command = connection.CreateCommand())
{
// データベースの接続開始
connection.Open();
// SQLの準備
command.CommandText = GetSinarioData;
// SQL実行
SqlDataReader reader = command.ExecuteReader();
while (reader.Read() == true)
{
string syainNo = reader["SYAINNO"].ToString();
string name = reader["NAME"].ToString();
Console.WriteLine( "{0} {1}", syainNo , name );
}
}
}
}
catch (SqlException e)
{
Console.WriteLine(e.ToString());
}
}
}
}
解説
SQLServerへの接続オブジェクト SqlConnection オブジェクトを作成します。
SqlConnection オブジェクトのOpen()メソッドを呼び出し、SQL Serverへの接続をします。
SqlCommandオブジェクトを作成し、CommandTextに実行するSQLを設定します。
SqlCommandオブジェクトのExecuteReader()メソッドを呼び出し、SQLを実行します。SqlDataReaderに取得結果を格納します。
SqlDataReader オブジェクトのRead()メソッドを呼び出し、結果レコードを取得します。
(falseになるまでレコードを取得する)
レコードの値は、SqlDataReader オブジェクトのインデクサーに列名を与えることで取得できます。
データベース接続後は、Close()メソッドでSqlDataReader、SqlConnectionを閉じ、Dispose()メソッドでSqlCommandを開放する必要があります。
ここではusingを使用しているので、usingを抜けることで閉じられます。
データベース接続の閉じ忘れるがなくなるのでおすすめです。
また、データベース接続時は、try catchでエラーハンドリングするのが通常です。
実行結果を取得しない場合(更新、削除など)
ExecuteNonQueryを使用します。戻り値は、SQLによって変更を受けた行数を返します。
// SQLの準備
command.CommandText = @"UPDATE t_sinario SET NAME ='斎藤' WHERE id ='1000';
// SQL実行
int cnt = command.ExecuteNonQuery();
単一の値を受け取る場合
ExecuteScalarを使用します。例では、string型の単一値を受け取っています。
// SQLの準備
command.CommandText = @"SELECT NAME FROM t_sinario WHERE id ='1000';
// SQL実行
string name = (string)command.ExecuteScalar();
今日はここまで。