2013-04-30 88 views
1

在vb.net上執行此存儲過程並使購買文本框保持空白以使其在更新時爲空時。但它返回錯誤,說明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() 
+1

您需要傳入NULL(甚至可能是DB.Null),而不是字符串 - 即使它是空字符串。用命名參數(這是真正使用「默認值」所需的)調用SP處理程序的能力將取決於SP如何被調用 - 哪些未顯示。但是,在這兩種情況下,客戶端需要知道將「」映射爲NULL(或「未指定」)。 – user2246674 2013-04-30 06:32:25

+0

@ user2246674如何傳遞NULL VALUE先生?我試圖把.value = DBNULL.Value在vb.net的東西那樣的,但仍然沒有工作先生 – ivandinglasan 2013-04-30 06:36:30

+0

如果txtPurchaseDate.Text不是空的,然後綁定參數,否則,什麼都不做。 – 2013-04-30 06:49:19

回答

0
Dim d as DateTime 
DateTime.TryParse(txtPurchaseDate.Text, d) 

然後通過d你的存儲過程調用。

cmd.Parameters("@OE_PurchaseDate").Value = d 
+0

我怎麼能傳遞d存儲proc先生?我有點新的參數 – ivandinglasan 2013-04-30 06:38:23

+0

供應您正在使用的vb代碼來調用存儲過程,我可以告訴你 – Rots 2013-04-30 06:40:13

+0

請檢查我的vb代碼先生 – ivandinglasan 2013-04-30 06:44:32

1

因爲參數有NULL的默認值:

@OE_PurchaseDate  smalldatetime = NULL, 

你是不是被迫的值傳遞,如果沒有價值

例如通過:

if txtPurchaseDate.Text <> "" then 
    cmd.Parameters("@OE_PurchaseDate").Value = txtPurchaseDate.Text 
+0

我會使用'TryParse'來代替,以確保無效的DateTime不會傳遞到存儲的proc中,導致它失敗。 '如果DateTime.TryParse(txtPurchaseDate.Text,d)Then','d'是'DateTime'。然後,如果轉換成功(它將在空字符串/空字符串上失敗),他們可以將'd'分配給參數。 – Tim 2013-04-30 06:56:39

+0

@Tim,同意,但如果在UI上有適當的日曆控制,那麼它可能是正常的? – 2013-04-30 07:04:53

+0

如果是操作詞。由於我們所有的OP代碼都是TextBox,所以我們不知道UI是什麼。無論如何,我喜歡在謹慎的方面犯錯 - 如果用戶可以做一些愚蠢的事情,他們會:) – Tim 2013-04-30 07:11:21