2017年5月14日日曜日

VB.NET プログラムでSQL ServerのSQL文を実行

プログラムでSQL文を実行し結果を取得したり、列を更新、削除する

VB.NETのSQL Serverに接続して、SQL文を実行することでテーブルの値や列を操作する説明をします

プログラムでSQL文の実行であってもSQL文事態の文法は他と同じです

ここでは、「SQL Server」の「データベースに接続」、「SELECT」、「INSERT」、「UPDATE」、「DELETE」を紹介します

テータベースに接続

Dim cn As New SqlClient.SqlConnection

cn.ConnectionString = 接続文字列
cn.Open()

最後にクローズと解放をお忘れなく
cn.Close()
cn.Dispose()

接続文字列

SQL Serverにログインするのに必要な情報をルールに基づいて羅列した文字列です

Data Source = IPアドレス等のロケーション\SQLEXPRESS;User ID = ユーザID;Password = パスワード;Initial Catalog = カレントデータベース名;" この様な定義とします

これを変数に定義します
Dim cnStaring As String

cnString = ""
cnString &= "Data Source =IPアドレス等のロケーション\SQLEXPRESS;"
cnString &= "User ID = ユーザID;"
cnString &= "Password = パスワード;"
cnString &= "Initial Catalog = データベース名;"

テーブルの内容を取得する

戻り値が必要な場合は「ExecuteReader」を使います
Dim cn As New SqlClient.SqlConnection
Dim cd As New SqlClient.SqlCommand
Dim dr As SqlClient.SqlDataReader
Dim SQL As String

'データベース接続
cn.ConnectionString = "データベース接続文字列"
cn.Open()
'SQL文生成
SQL = ""
SQL &= "SELECT"
SQL &= "        *"
SQL &= "    FROM"
SQL &= "        テーブル名"
'SQLコマンド設定
cd.CommandText = SQL
cd.Connection = cn
dr = cd.ExecuteReader
While dr.Read
    Console.Write(dr("列名1"))
    Console.Write(dr("列名2"))
End While
'クローズ解放
dr.Close()
cd.Dispose()
cn.Close()
cn.Dispose()

行を追加する

戻り値が必要ない場合は「「ExecuteNonQuery」を使用します
Dim cn As New SqlClient.SqlConnection
Dim cd As New SqlClient.SqlCommand
Dim SQL As String

'データベース接続
cn.ConnectionString = "データベース接続文字列"
cn.Open()
'SQL文生成
SQL = ""
SQL &= "INSERT  INTO    テーブル名"
SQL &= "("
SQL &= "    列名1,"
SQL &= "    列名2,"
SQL &= "    列名3"
SQL &= ")"
SQL &= "VALUES"
SQL &= "("
SQL &= "    1,"
SQL &= "    100,"
SQL &= "   'テスト文字列'"
SQL &= ")"
'SQLコマンド設定
cd.CommandText = SQL
cd.Connection = cn
cd.ExecuteNonQuery()
'クローズ解放
cd.Dispose()
cn.Close()
cn.Dispose()

テーブルを更新する

Dim cn As New SqlClient.SqlConnection
Dim cd As New SqlClient.SqlCommand
Dim SQL As String

'データベース接続
cn.ConnectionString = "データベース接続文字列"
cn.Open()
'SQL文生成
SQL = ""
SQL &= "UPDATE  テーブル名"
SQL &= "    SET 列名2      =   200,"
SQL &= "        列名3      =   '文字列修正の値'"
SQL &= "    WHERE"
SQL &= "        列名1  =   1"
'SQLコマンド設定
cd.CommandText = SQL
cd.Connection = cn
cd.ExecuteNonQuery()
'クローズ解放
cd.Dispose()
cn.Close()
cn.Dispose()

行を削除する

Dim cn As New SqlClient.SqlConnection
Dim cd As New SqlClient.SqlCommand
Dim SQL As String

'データベース接続
cn.ConnectionString = "データベース接続文字列"
cn.Open()
'SQL文生成
SQL = ""
SQL &= "DELETE"
SQL &= "    FROM"
SQL &= "        テーブル名"
SQL &= "    WHERE"
SQL &= "        列名1  =   1"
'SQLコマンド設定
cd.CommandText = SQL
cd.Connection = cn
cd.ExecuteNonQuery()
'クローズ解放
cd.Dispose()
cn.Close()
cn.Dispose()

まとめ

戻り値が必要な場合は「ExecuteReader
戻り値が必要ない場合は「「ExecuteNonQuery

順番として
データベースに接続
SQL文生成
SQLコマンド実行
データベースクローズ・解放
となります