- 題名: VB.NETでのストアドの実行。
- 日時: 2005/07/16 13:34:26
- ID: 11837
- この記事の返信元:
- (なし)
- この記事への返信:
- [11842] Re[1]: VB.NETでのストアドの実行。2005/07/17 16:44:07
- ツリーを表示
ゆうこさん。こんにちわ。 前提条件として、対象フィールドが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() *** コード ここまで ***
分類:[.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