VB.NET|SQL ServerのSQL文を実行する

VB.NET|SQL ServerのSQL文を実行する

VB.NET

VB.NETのプログラムでSQL Serverに接続してSQL文を実行する解説です。

この記事ではSQL Serverのデータベースに接続し、「SELECT」、「INSERT」、「UPDATE」、「DELETE」を実行する内容を例にしています。

戻り値が必要な場合は「ExecuteReader」を使い、戻り値が必要無い場合は「ExecuteNonQuery」を使用します。

SQL Serverのデータベースに接続する

Dim cn As New SqlClient.SqlConnection

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

'---- ↓ ----
この間でSQL文を実行する
'---- ↑ ----

cn.Close()
cn.Dispose()

最後にクローズと解放をお忘れなく!!

cn.Close()
cn.Dispose()

SQL Serverのデータベースに接続する「接続文字列」

接続文字列とはSQL Serverのデータベースにログインするのに必要な情報をルールに基づいて羅列した文字列です。

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

これらの内容を変数に定義します。

ここでは変数「cnStaring」に接続文字列を定義します。

Dim cnStaring As String

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

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

テーブルの内容を取得するには「SELECT句」を「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()

このSQL文ではコンソールに列名1と列名2の内容が表示されます。

このようにテーブルの内容(戻り値)が必要な場合は「ExecuteReader」を使用することで可能になります。

テーブルに行(レコード)を追加する

テーブルに新たな行(レコード)を追加するには「INSERT句」を「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()

これでテーブル「テーブル名」に1行追加できます。

他テーブルの内容で行を追加する

先ほどは固定値で行(レコード)を追加しましたが、今度は他のテーブルの内容で行を追加しましょう。

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    テーブル名A"
SQL &= "("
SQL &= "    列名A1,"
SQL &= "    列名A2,"
SQL &= "    列名A2"
SQL &= ")"
SQL &= "    SELECT"
SQL &= "            列名B1,"
SQL &= "            列名B2,"
SQL &= "            列名B3"
SQL &= "        FROM"
SQL &= "            テーブル名B"
'SQLコマンド設定
cd.CommandText = SQL
cd.Connection = cn
cd.ExecuteNonQuery()
'クローズ解放
cd.Dispose()
cn.Close()
cn.Dispose()

これはテーブル名Bの内容をテーブル名Aに追加します。

テーブルの内容を更新する

テーブルの内容を更新するには「UPDATE句」を「ExecuteNonQuery」で使用します。

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()

テーブル「テーブル名」の列名2と列名3の内容を変更します。

テーブルの行(レコード)を削除する

行(レコード)を削除するには「DELETE句」を「ExecuteNonQuery」で使用します。

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()

テーブル「テーブル名」の列名1が1の行(レコード)を削除します。

コメント

  1. 名無し より:

    いつも参考にさせていただいております。
    SQL文でwhereを使ったときに文字列を指定したいときはどのような記述になるのでしょうか。
    例えばリンゴだったら”リンゴ”とすると””が外れてエラーになりますよね。
    よろしくお願い致します。

    • SSSPRODUCTSSSPRODUCT より:

      お問合せありがとうございます。
      励みになります。
      返事が遅くなってすみません。
      結論から言うと「”」ダブルコーテーションがエラーの原因ではないでしょうか。
      WHERE
      tx = ‘りんご’
      で書いてみて下さい。

タイトルとURLをコピーしました