- 題名: 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