Back to Top

プログラムの覚書

Category: データベース

VB.NET スキーマ情報を取得する

スキーマ情報(全テーブル名または全列名)の取得方法を記載します。

スキーマ情報を取得する

Dim builder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
builder.DataSource = ".\SQLEXPRESS"
builder.AttachDBFilename = "D:\DB\TestDB.mdf"
builder.IntegratedSecurity = True
builder.UserInstance = True
builder.MultipleActiveResultSets = True
Dim ConnectString As String = builder.ToString()

Using sqlConnect As New SqlConnection(ConnectString)
    sqlConnect.Open()

    '全てのテーブルを取得します。
    Dim schemaTable As DataTable = sqlConnect.GetSchema("Tables")

    Dim command As SqlCommand = sqlConnect.CreateCommand()
    command.CommandText = "SELECT * FROM Table_1"
    Dim dtReader As SqlDataReader = command.ExecuteReader()

    'テーブル内の列情報を取得します。
    schemaTable = dtReader.GetSchemaTable()

    dtReader.Close()
End Using

 

VB.NET SQL文を作成し実行する

パラメータを指定して、SQL文を作成する SqlParameter クラスを説明します。

置き換える変数は、@から始まる文字列で記述します。

SqlParameter に変数と値を設定します。

SqlParameter を省略して、SqlCommand.Parameters に直接 SqlCommand.Parameters に変数と値を設定することもできます。

パラメータで、SQL作成し実行する

Dim builder As SqlConnectionStringBuilder = New SqlConnectionStringBuilder()
builder.DataSource = ".\SQLEXPRESS"
builder.AttachDBFilename = "D:\DB\TestDB.mdf"
builder.IntegratedSecurity = True
builder.UserInstance = True
builder.MultipleActiveResultSets = True
Dim ConnectString As String = builder.ToString()

Using sqlConnect As New SqlConnection(ConnectString)
    sqlConnect.Open()

    Dim sqlStr As String = "INSERT INTO Table_1 (Item1,Item2) VALUES (@Item1,@Item2)"

    Dim command As SqlCommand = New SqlCommand(sqlStr, sqlConnect)

    Dim val As String = "AAAAA"
    Dim p1 As SqlParameter = New SqlParameter("@Item1", val)
    command.Parameters.Add(p1)

    'SqlParameter省略追加
    command.Parameters.Add("@Item2", SqlDbType.Char).Value = "XXXX2"

    command.ExecuteNonQuery()

End Using

※上記の文でvalの変数の部分を直接数値を設定することができますが、Stringの場合直接設定するとうまく置き換えすることができなくなります。

 

エスケープ処理

Parameters を使用する場合、エスケープ処理をする必要がありません。

使用しない場合は、値のエスケープ処理を行わないとエラーとなります。

Public Function ValueEscape(str As String) As String
    Dim sb As New System.Text.StringBuilder(str)

    sb.Replace("'", "''")
    sb.Replace(",", ",,")
    sb.Replace(Chr(&H09), "\" & Chr(&H09))           'TAB
    sb.Replace(Chr(&H13), "\" & Chr(&H13))           'CR
    sb.Replace(Chr(&H00), "\" & Chr(&H00))           'LF

    Return sb.ToString()
End Function