DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB.NETでのストアドの実行。

環境/言語:[vb.net]
分類:[.NET]

いつも参考にさせていただいてます。
下記のストアドを作成し、
CREATE PROCEDURE IN_CO(@CONAME VARCHAR(50),@ZIPCODE VARCHAR(20),@ADDRESS1 VARCHAR(100),@ADDRESS2 VARCHAR(100),@STARTYEAR NUMERIC(4),@STARTMONTH NUMERIC(2),@STARTDAY NUMERIC(2),@ENDYEAR NUMERIC(4),@ENDMONTH NUMERIC(2),@ENDDAY NUMERIC(2),@COYEAR NUMERIC(2),@TAXPAR REAL,@TAXSELECT VARCHAR(20)) AS INSERT INTO T_CORPO(CONAME,ZIPCODE,ADDRESS1,ADDRESS2,STARTYEAR,STARTMONTH,STARTDAY,ENDYEAR,ENDMONTH,ENDDAY,COYEAR,TAXPAR,TAXSELECT) VALUES(@CONAME,@ZIPCODE,@ADDRESS1,@ADDRESS2,@STARTYEAR,@STARTMONTH,@STARTDAY,@ENDYEAR,@ENDMONTH,@ENDDAY,@COYEAR,@TAXPAR,@TAXSELECT)
このように実行したのですが・・・
cd5.CommandText = "IN_CO"
cd5.Connection = cn
cd5.CommandType = CommandType.StoredProcedure
cd5.Parameters.Clear()
prm1 = cd5.Parameters.Add("@CONAME", SqlDbType.VarChar, 50)
prm1.Value = Me.txtCoName.Text
prm2 = cd5.Parameters.Add("@ZIPCODE", SqlDbType.VarChar, 20)
prm2.Value = Me.txtZipCode.Text
prm3 = cd5.Parameters.Add("@ADDRESS1", SqlDbType.VarChar, 100)
prm3.Value = Me.txtAddress1.Text
prm4 = cd5.Parameters.Add("@ADDRESS2", SqlDbType.VarChar, 100)
prm4.Value = Me.txtAddress2.Text
prm5 = cd5.Parameters.Add("@STARTYEAR", SqlDbType.Int)
prm5.Value = Me.txtStartYear.Text
prm6 = cd5.Parameters.Add("@STARTMONTH", SqlDbType.Int)
prm6.Value = Me.txtStartMonth.Text
prm7 = cd5.Parameters.Add("@STARTDAY", SqlDbType.Int)
prm7.Value = Me.txtStartDay.Text
prm8 = cd5.Parameters.Add("@ENDYEAR", SqlDbType.Int)
prm8.Value = Me.txtEndYear.Text
prm9 = cd5.Parameters.Add("@ENDMONTH", SqlDbType.Int)
prm9.Value = Me.txtEndMonth.Text
prm10 = cd5.Parameters.Add("@ENDDAY", SqlDbType.Int)
prm10.Value = Me.txtEndDay.Text
prm11 = cd5.Parameters.Add("@COYEAR", SqlDbType.Int)
prm11.Value = Me.txtCoYear.Text
prm12 = cd5.Parameters.Add("@TAXPAR", SqlDbType.Real)
prm12.Value = Me.txtTaxPar.Text
prm13 = cd5.Parameters.Add("@TAXSELECT", SqlDbType.VarChar, 20)
prm13.Value = Me.comTax.Text
cd5.ExecuteNonQuery()
textboxになにも入力しないとエラーが出てしまいます。
どうもInt型へのnullの挿入を認めてくれません。
Int型への入力をするとInsertしてくれます。
どなたかご存知の方よろしくお願いいたします。
環境 OS:winXPpro
   vb.net:2003
   SQL:msde
ゆうこさん。こんにちわ。

前提条件として、対象フィールドがNullを許可している必要があります。
ここでは、NUMERIC型のフィールドがNullを許可しているとします。

*** ストアド ここから ***

CREATE PROCEDURE IN_CO
(
    @CONAME VARCHAR(50),
    @ZIPCODE VARCHAR(20),
    @ADDRESS1 VARCHAR(100),
    @ADDRESS2 VARCHAR(100),
    @STARTYEAR NUMERIC(4) = Null,  <- Nullを規定値とする
    @STARTMONTH NUMERIC(2) = Null,   <- Nullを規定値とする
    @STARTDAY NUMERIC(2) = Null,     <- Nullを規定値とする
    @ENDYEAR NUMERIC(4) = Null,      <- Nullを規定値とする
    @ENDMONTH NUMERIC(2) = Null,     <- Nullを規定値とする
    @ENDDAY NUMERIC(2) = Null,       <- Nullを規定値とする
    @COYEAR NUMERIC(2) = Null,       <- Nullを規定値とする
    @TAXPAR REAL,
    @TAXSELECT VARCHAR(20)
) AS 
INSERT INTO T_CORPO
(
    CONAME,
    ZIPCODE,
    ADDRESS1,
    ADDRESS2,
    STARTYEAR,
    STARTMONTH,
    STARTDAY,
    ENDYEAR,
    ENDMONTH,
    ENDDAY,
    COYEAR,
    TAXPAR,
    TAXSELECT
) VALUES (
    @CONAME,
    @ZIPCODE,
    @ADDRESS1,
    @ADDRESS2,
    @STARTYEAR,
    @STARTMONTH,
    @STARTDAY,
    @ENDYEAR,
    @ENDMONTH,
    @ENDDAY,
    @COYEAR,
    @TAXPAR,
    @TAXSELECT
)

*** ストアド ここまで ***

*** コード ここから ***

cd5.Connection = cn
cd5.CommandText = "IN_CO"
cd5.CommandType = CommandType.StoredProcedure
cd5.Parameters.Clear()

prm1 = cd5.Parameters.Add("@CONAME", SqlDbType.VarChar, 50)
prm1.Value = Me.txtCoName.Text
prm2 = cd5.Parameters.Add("@ZIPCODE", SqlDbType.VarChar, 20)
prm2.Value = Me.txtZipCode.Text
prm3 = cd5.Parameters.Add("@ADDRESS1", SqlDbType.VarChar, 100)
prm3.Value = Me.txtAddress1.Text
prm4 = cd5.Parameters.Add("@ADDRESS2", SqlDbType.VarChar, 100)
prm4.Value = Me.txtAddress2.Text

'//未入力なら、パラメータを指定しない(ここでは、文字数しかチェックしていません)
'//パラメータ指定がない場合は、規定値(Null)が代入されます。
If Me.txtStartYear.Text.Length > 0 Then
    prm5 = cd5.Parameters.Add("@STARTYEAR", SqlDbType.Int)
    prm5.Value = Me.txtStartYear.Text
End If
If Me.txtStartMonth.Text.Length > 0 Then
    prm6 = cd5.Parameters.Add("@STARTMONTH", SqlDbType.Int)
    prm6.Value = Me.txtStartMonth.Text
End If
If Me.txtStartDay.Text.Length > 0 Then
    prm7 = cd5.Parameters.Add("@STARTDAY", SqlDbType.Int)
    prm7.Value = Me.txtStartDay.Text
End If
If Me.txtEndYear.Text.Length > 0 Then
    prm8 = cd5.Parameters.Add("@ENDYEAR", SqlDbType.Int)
    prm8.Value = Me.txtEndYear.Text
End If
If Me.txtEndMonth.Text.Length > 0 Then
    prm9 = cd5.Parameters.Add("@ENDMONTH", SqlDbType.Int)
    prm9.Value = Me.txtEndMonth.Text
End If
If Me.txtEndDay.Text.Length > 0 Then
    prm10 = cd5.Parameters.Add("@ENDDAY", SqlDbType.Int)
    prm10.Value = Me.txtEndDay.Text
End If
If Me.txtCoYear.Text.Length > 0 Then
    prm11 = cd5.Parameters.Add("@COYEAR", SqlDbType.Int)
    prm11.Value = Me.txtCoYear.Text
End If

prm12 = cd5.Parameters.Add("@TAXPAR", SqlDbType.Real)
prm12.Value = Me.txtTaxPar.Text
prm13 = cd5.Parameters.Add("@TAXSELECT", SqlDbType.VarChar, 20)
prm13.Value = Me.comTax.Text

cd5.ExecuteNonQuery()

*** コード ここまで ***
■No11842に返信(pinpiさんの記事)
返信ありがとうございます。
今は会社なので帰宅後、
結果を投稿いたします。

DOBON.NET | プログラミング道 | プログラミング掲示板