vb.net에서이 저장 프로 시저를 실행하고 업데이트 텍스트 상자를 비워두면 업데이트시 null이됩니다. String이 유효한 DateTime으로 인식되지 않는다는 오류를 반환합니다. 코드 작업을위한 제안은 많은 도움이 될 것입니다.매개 변수의 기본값을 지정하십시오.
CREATE PROCEDURE UpdateEquipmentProfile
(
@OE_ID varchar(11) = NULL,
@OE_Category char(3) = NULL,
@OE_SubCategory char(3) = NULL,
@OE_Name varchar(35) = NULL,
@OE_User varchar(35) = NULL,
@OE_Brand varchar(15) = NULL,
@OE_Model varchar(35) = NULL,
@OE_Specs varchar(1000) = NULL,
@OE_SerialNo varchar(35) = NULL,
@OE_PropertyNo varchar(35) = NULL,
@OE_MacAddress varchar(100) = NULL,
@OE_Static_IP varchar(15) = NULL,
@OE_Vendor varchar(35) = NULL,
@OE_PurchaseDate smalldatetime = NULL,
@OE_WarrantyInclusiveYear int = NULL,
@OE_WarrantyStatus char(2) = NULL,
@OE_Status varchar(15) = NULL,
@OE_Dept_Code char(3) = NULL,
@OE_Location_Code char(8) = NULL,
@OE_Remarks varchar(1000) = NULL
)
AS
IF EXISTS(SELECT * FROM tblOfficeEquipmentProfile WHERE [email protected]_ID)
UPDATE tblOfficeEquipmentProfile SET
OE_Category [email protected]_Category,
OE_SubCategory [email protected]_SubCategory,
OE_Name [email protected]_Name,
OE_User [email protected]_User,
OE_Brand [email protected]_Brand,
OE_Model [email protected]_Model,
OE_Specs [email protected]_Specs,
OE_SerialNo [email protected]_SerialNo,
OE_PropertyNo [email protected]_PropertyNo,
OE_MacAddress [email protected]_MacAddress,
OE_Static_IP [email protected]_Static_IP,
OE_Vendor [email protected]_Vendor,
OE_PurchaseDate [email protected]_PurchaseDate,
OE_WarrantyInclusiveYear [email protected]_WarrantyInclusiveYear,
OE_WarrantyStatus [email protected]_WarrantyStatus,
OE_Status [email protected]_Status,
OE_Dept_Code [email protected]_Dept_Code,
OE_Location_Code [email protected]_Location_Code,
OE_Remarks [email protected]_Remarks
WHERE [email protected]_ID
GO
VB.NET 코드
Dim cmd As SqlCommand = sqlconn.CreateCommand
sqlconn.Open()
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "UpdateEquipmentProfile"
cmd.Parameters.Add("@OE_ID", SqlDbType.VarChar, 11, "oeq-su-999")
cmd.Parameters.Add("@OE_Category", SqlDbType.Char, 3, "COM")
cmd.Parameters.Add("@OE_SubCategory", SqlDbType.Char, 3, "SU")
cmd.Parameters.Add("@OE_Name", SqlDbType.VarChar, 35, "adminpmis01")
cmd.Parameters.Add("@OE_User", SqlDbType.VarChar, 35, "Ivan")
cmd.Parameters.Add("@OE_Brand", SqlDbType.VarChar, 15, "DELL")
cmd.Parameters.Add("@OE_Model", SqlDbType.VarChar, 35, "optiplex")
cmd.Parameters.Add("@OE_Specs", SqlDbType.VarChar, 1000, "dualcore")
cmd.Parameters.Add("@OE_SerialNo", SqlDbType.VarChar, 35, "sgh5960")
cmd.Parameters.Add("@OE_PropertyNo", SqlDbType.VarChar, 35, "j7h7h6g6f2")
cmd.Parameters.Add("@OE_MacAddress", SqlDbType.VarChar, 100, "j7h7:h6g6f2")
cmd.Parameters.Add("@OE_Static_IP", SqlDbType.VarChar, 15, "192.168.1.5")
cmd.Parameters.Add("@OE_Vendor", SqlDbType.VarChar, 35, "ADWAYS")
cmd.Parameters.Add("@OE_PurchaseDate", SqlDbType.SmallDateTime)
cmd.Parameters.Add("@OE_WarrantyInclusiveYear", SqlDbType.Int)
cmd.Parameters.Add("@OE_WarrantyStatus", SqlDbType.Char, 2, "IN")
cmd.Parameters.Add("@OE_Status", SqlDbType.VarChar, 15, "Good")
cmd.Parameters.Add("@OE_Dept_Code", SqlDbType.Char, 3, "ADM")
cmd.Parameters.Add("@OE_Location_Code", SqlDbType.Char, 8, "ADM_OFC")
cmd.Parameters.Add("@OE_Remarks", SqlDbType.VarChar, 1000, "ACTIVE")
cmd.Parameters("@OE_ID").Value = txtOEID.Text
cmd.Parameters("@OE_Category").Value = cmbCategory.Text
cmd.Parameters("@OE_SubCategory").Value = cmbSubCategory.Text
cmd.Parameters("@OE_Name").Value = txtName.Text
cmd.Parameters("@OE_User").Value = txtUser.Text
cmd.Parameters("@OE_Brand").Value = cmbBrand.Text
cmd.Parameters("@OE_Model").Value = cmbModel.Text
cmd.Parameters("@OE_Specs").Value = txtSpecs.Text
cmd.Parameters("@OE_SerialNo").Value = txtSerialNo.Text
cmd.Parameters("@OE_PropertyNo").Value = txtPropertyNo.Text
cmd.Parameters("@OE_MacAddress").Value = txtMacAddress.Text
cmd.Parameters("@OE_Static_IP").Value = txtStaticIp.Text
cmd.Parameters("@OE_Vendor").Value = txtVendor.Text
cmd.Parameters("@OE_PurchaseDate").Value = txtPurchaseDate.Text
cmd.Parameters("@OE_WarrantyInclusiveYear").Value = txtWarrantyInclusiveYear.Text
cmd.Parameters("@OE_WarrantyStatus").Value = txtWarrantyStatus.Text
cmd.Parameters("@OE_Status").Value = txtStatus.Text
cmd.Parameters("@OE_Dept_Code").Value = cmbDeptCode.Text
cmd.Parameters("@OE_Location_Code").Value = cmbLocationCode.Text
cmd.Parameters("@OE_Remarks").Value = txtRemarks.Text
cmd.ExecuteNonQuery()
MsgBox("Successfully Updated Equipment Profile")
sqlconn.Close()
빈 문자열 인 경우에도 문자열이 아닌 NULL (아마도 DB.Null even)을 전달해야합니다. 이름이 지정된 매개 변수 (실제로 "기본값"을 사용하는 데 필요함)를 사용하여 SP proc를 호출하는 기능은 SP가 호출되는 방식에 따라 달라지며 이는 표시되지 않습니다. 그러나 두 경우 모두 클라이언트 쪽에서 적절한 "NULL"(또는 "지정되지 않음")에 매핑하는 것을 알아야합니다. – user2246674
@ user2246674 NULL 값을 전달하는 법? 나는 퍼팅 시도했다 .value = DBNULL.Value 그런 vb.net 뭔가를하지만 여전히 나던 작업 선생 – ivandinglasan
txtPurchaseDate.Text 비어 있지 않으면 다음 매개 변수를 바인딩, 그렇지 않으면 아무것도하지 마십시오. –