3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(VB.Net)パラメタ使ったSQLで、NULL値を入れる。

ついつい忘れてしまうのでメモ。

SqlParameterを使って、値を入れるときにNullを入れる方法です。

Imports System.Data.SqlClient
Public Class TestClass
	Private Sub DBTest()
		Dim conn As New SqlConnection("DB接続文字列")
		'StringBuilder使ったほうがStringでつなぐより速いらしい。
		Dim strCmd As New System.Text.StringBuilder
		strCmd.AppendLine("INSERT INTO tbl")
		strCmd.AppendLine(" ( No ,")
		strCmd.AppendLine(" Name ) ")
		strCmd.AppendLine("VALUES ")
		strCmd.AppendLine(" ( @No , ")
		strCmd.AppendLine(" @Name ) ")
		Dim cmd As New SqlCommand(strCmd.ToString(), conn)

		'パラメータを作成
		Dim param As New SqlParameter("@No", SqlDbType.Int, 0)

		'ここでNull値をパラメタにセット。
		param.Value = "DBNull.Value"
		cmd.Parameters.Add(param)

		Dim param2 As New SqlParameter("@Name", SqlDbType.NText, 0)
		param2.Value = "DBNull.Value"
		cmd.Parameters.Add(param2)
		'上記で作成しているパラメータは下記のようにインスタンス作成省略も可能。
		'cmd.Parameters.Add("@No",SqlDbType.Int)
		'cmd.Parameters.Add("@Name",SqlDbType.NText)

		'DB接続、実行、切断
		conn.Open()
		cmd.ExecuteNonQuery()
		conn.Close()

	End Sub
End Class

上記はパラメタを使ったサンプルですが、みてわかるようにSystem.DBNullクラスの Value プロパティを入れるだけです。

ちなみに、DBNullクラスはシングルトン クラスであり、インスタンスは1つしか存在しないようです。(つまり開発者はこのインスタンスを作成できない。) >シングルトン クラスとなるので、デザインパターンのSingletonパターンの実装のようですね。

デザインパターンはまだまださっぱしなので、勉強しないといけないですな。。。