2012-09-24 99 views
0

當我填寫web表單中的所有數據時,下面的存儲過程工作正常但如果我留下一些列,如AwardName2,Authority2,AwardYear2和Remarks2(I在我的表中提到這個列爲NULL)時,程序拋出錯誤「無法將參數值從字符串轉換爲Int 32」。我需要在存儲過程中做什麼更改?請幫忙。錯誤:無法將參數值從字符串轉換爲Int32

ALTER PROCEDURE [dbo].[usp_RegPage2] 
    @Vendor_ID VARCHAR(16), @EmpDetailsDocPath VARCHAR(200), @EmpTotalNo INT, 
    @EmpAbove5Years INT, @EmpEnggDesign INT, @EmpProContract INT, @QADocPath VARCHAR(200), 
    @QAStandard VARCHAR(50), @QADocument CHAR(3), @QAControl CHAR(3), @HSEDocPath VARCHAR(200), 
    @HSEStandard VARCHAR(15), @HSEDocument CHAR(3), @HSEControlManual CHAR(3), 
    @AuthorityDocPath VARCHAR(200), @AwardName1 VARCHAR(50), @Authority1 VARCHAR(50), 
    @AwardYear1 INT,@Remarks1 VARCHAR(70),@AwardName2 VARCHAR(50), 
    @Authority2 VARCHAR(50), @AwardYear2 INT, @Remarks2 VARCHAR(70), @AwardName3 VARCHAR(50), 
    @Authority3 VARCHAR(50), @AwardYear3 INT, @Remarks3 VARCHAR(70), 
    @AwardName4 VARCHAR(50), @Authority4 VARCHAR(50), @AwardYear4 INT, @Remarks4 VARCHAR(70), 
    @BritishStandard CHAR(3), @AmericanStandard CHAR(3), @OtherStandard VARCHAR(50),  
    @REManpower CHAR(3), @RESubContract CHAR(3), @RELabourPath VARCHAR(200), 
    @REEquipmentPath VARCHAR(200), @REShop CHAR(3), @REAssemblyyard CHAR(3), 
    @RESizeofShop INT,@REHouse CHAR(3),@REOutSource CHAR(3),@ProjectDocPath VARCHAR(200),  
    @CmpVision VARCHAR(200), @CmpFullRegDate DATE = NULL 
    AS SET @CmpFullRegDate = COALESCE(@CmpFullRegDate,GETDATE()); 
    BEGIN 
    INSERT INTO dbo.RegPage2  
    (Vendor_ID,EmpDetailsDocPath,EmpTotalNo,EmpAbove5Years,EmpEnggDesign,EmpProContract, 
    QADocPath,QAStandard,QADocument,QAControl,HSEDocPath,HSEStandard,HSEDocument, 
    HSEControlManual,AuthorityDocPath,AwardName1,Authority1,AwardYear1,Remarks1, 
    AwardName2,Authority2,AwardYear2,Remarks2,AwardName3,Authority3,AwardYear3,Remarks3, 
    AwardName4,Authority4,AwardYear4,Remarks4,BritishStandard,AmericanStandard,  
    OtherStandard,REManpower,RESubContract,RELabourPath,REEquipmentPath,REShop, 
    REAssemblyyard,RESizeofShop,REHouse,REOutSource,ProjectDocPath,CmpVision,CmpFullRegDate) 
    VALUES  
    (@Vendor_ID,@EmpDetailsDocPath,@EmpTotalNo,@EmpAbove5Years,@EmpEnggDesign,@EmpProContract, 
    @QADocPath,@QAStandard,@QADocument,@QAControl,@HSEDocPath,@HSEStandard,@HSEDocument, 
    @HSEControlManual,@AuthorityDocPath,@AwardName1,@Authority1,@AwardYear1,@Remarks1,@AwardName2, 
    @Authority2,@AwardYear2,@Remarks2,@AwardName3,@Authority3,@AwardYear3,@Remarks3, 
    @AwardName4,@Authority4,@AwardYear4,@Remarks4,@BritishStandard,@AmericanStandard, 
    @OtherStandard,@REManpower,@RESubContract,@RELabourPath,@REEquipmentPath,@REShop, 
    @REAssemblyyard,@RESizeofShop,@REHouse,@REOutSource,@ProjectDocPath, 
    @CmpVision,@CmpFullRegDate)  
    END 

C#代碼

 protected void BtnRegPage2Save_Click(object sender, EventArgs e) 
     { 
     SqlConnection SqlCon = new SqlConnection(GetConnectionString()); 
     SqlCommand cmd = new SqlCommand(); 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.CommandText = "usp_RegPage2"; 
     cmd.Parameters.Add("@Vendor_ID", SqlDbType.VarChar).Value = lblPage2ID.Text; 
     cmd.Parameters.Add("@EmpDetailsDocPath", SqlDbType.VarChar).Value = AFU7.FileName; 
     cmd.Parameters.Add("@EmpTotalNo", SqlDbType.Int).Value = txtTotalEmp.Text.Trim(); 
     cmd.Parameters.Add("@EmpAbove5Years", SqlDbType.Int).Value = txtstability.Text.Trim(); 
     cmd.Parameters.Add("@EmpEnggDesign", SqlDbType.Int).Value = txtEnggDesign.Text.Trim(); 
     cmd.Parameters.Add("@EmpProContract", SqlDbType.Int).Value = txtProContract.Text.Trim(); 
     cmd.Parameters.Add("@QADocPath", SqlDbType.VarChar).Value = AFU8.FileName; 
     cmd.Parameters.Add("@QAStandard", SqlDbType.VarChar).Value = ddlQACertificate.Text.Trim(); 
     cmd.Parameters.Add("@QADocument", SqlDbType.Char).Value = ddlQSDocument.Text.Trim(); 
     cmd.Parameters.Add("@QAControl", SqlDbType.Char).Value = ddlQCManual.Text.Trim(); 
     cmd.Parameters.Add("@HSEStandard", SqlDbType.VarChar).Value = ddlHSECertificate.Text; 
     cmd.Parameters.Add("@HSEDocument", SqlDbType.Char).Value = ddlHSEDocument.Text; 
     cmd.Parameters.Add("@HSEControlManual", SqlDbType.Char).Value = ddlHSEManual.Text; 
     cmd.Parameters.Add("@HSEDocPath", SqlDbType.VarChar).Value = AFU9.FileName; 
     cmd.Parameters.Add("@AuthorityDocPath", SqlDbType.VarChar).Value = AFU3.FileName; 
     cmd.Parameters.Add("@AwardName1", SqlDbType.VarChar).Value = txtAward1.Text.Trim(); 
     cmd.Parameters.Add("@Authority1", SqlDbType.VarChar).Value = txtAuthority1.Text.Trim(); 
     cmd.Parameters.Add("@AwardYear1", SqlDbType.Int).Value = txtYear1.Text.Trim(); 
     cmd.Parameters.Add("@Remarks1", SqlDbType.VarChar).Value = txtRemarks1.Text.Trim(); 
     cmd.Parameters.Add("@AwardName2", SqlDbType.VarChar).Value = txtAward2.Text.Trim(); 
     cmd.Parameters.Add("@Authority2", SqlDbType.VarChar).Value = txtAuthority2.Text.Trim(); 
     cmd.Parameters.Add("@AwardYear2", SqlDbType.Int).Value = txtYear2.Text.Trim(); 
     cmd.Parameters.Add("@Remarks2", SqlDbType.VarChar).Value = txtRemarks2.Text.Trim(); 
     cmd.Parameters.Add("@AwardName3", SqlDbType.VarChar).Value = txtAward3.Text.Trim(); 
     cmd.Parameters.Add("@Authority3", SqlDbType.VarChar).Value = txtAuthority3.Text.Trim(); 
     cmd.Parameters.Add("@AwardYear3", SqlDbType.Int).Value = txtYear3.Text.Trim(); 
     cmd.Parameters.Add("@Remarks3", SqlDbType.VarChar).Value = txtRemarks3.Text.Trim(); 
     cmd.Parameters.Add("@AwardName4", SqlDbType.VarChar).Value = txtAward4.Text.Trim(); 
     cmd.Parameters.Add("@Authority4", SqlDbType.VarChar).Value = txtAuthority4.Text.Trim(); 
     cmd.Parameters.Add("@AwardYear4", SqlDbType.Int).Value = txtYear4.Text.Trim(); 
     cmd.Parameters.Add("@Remarks4", SqlDbType.VarChar).Value = txtRemarks4.Text.Trim(); 
     cmd.Parameters.Add("@BritishStandard", SqlDbType.Char).Value = ddlBritishStd.Text.Trim(); 
     cmd.Parameters.Add("@AmericanStandard", SqlDbType.Char).Value = ddlAmericanStd.Text.Trim(); 
     cmd.Parameters.Add("@OtherStandard", SqlDbType.VarChar).Value = txtOthers.Text.Trim(); 
     cmd.Parameters.Add("@REManpower", SqlDbType.Char).Value = ddlOwnManpower.Text.Trim(); 
     cmd.Parameters.Add("@RESubContract", SqlDbType.Char).Value = ddlSubContract.Text.Trim(); 
     cmd.Parameters.Add("@RELabourPath", SqlDbType.VarChar).Value = AFU4.FileName; 
     cmd.Parameters.Add("@REEquipmentPath", SqlDbType.Char).Value = AFU5.FileName; 
     cmd.Parameters.Add("@REShop", SqlDbType.Char).Value = ddlAtShop.Text; 
     cmd.Parameters.Add("@REAssemblyyard", SqlDbType.Char).Value = ddlAssembly.Text; 
     cmd.Parameters.Add("@RESizeofShop", SqlDbType.Int).Value = txtAssemblysize.Text; 
     cmd.Parameters.Add("@REHouse", SqlDbType.Char).Value = ddlInHouse.Text; 
     cmd.Parameters.Add("@REOutSource", SqlDbType.Char).Value = ddlOutSourcing.Text; 
     cmd.Parameters.Add("@ProjectDocPath", SqlDbType.VarChar).Value = AFU6.FileName; 
     cmd.Parameters.Add("@CmpVision", SqlDbType.VarChar).Value = txtVision.Text.Trim(); 
     cmd.Connection = SqlCon; 
     try 
     { 
     SqlCon.Open(); 
     cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
     throw new Exception(ex.Message); 
     } 
     finally 
     { 
     SqlCon.Close(); 
     SqlCon.Dispose(); 
     } 
    } 
+0

請添加您身在何處.NET代碼 – Maheep

+0

添加參數代碼「無法參數值從字符串到一個詮釋32轉換」引用'string'和'Int32'會指出這個錯誤是從.NET端出來的,而不是SQL Server(它有'varchar'和'int'數據類型)。我們需要看到.NET代碼。 –

回答

1

使您的表中的列NULL並不意味着你的PROC會自動分配null以對應於該列

罪魁禍首參數可能是@AwardYearint參數。您需要從您的代碼傳遞的DBNull

if(String.IsNullOrEmpty(AwardYear)) 
    command.Parameters.AddWithValue("@AwardYear", DBNull.Value); 
else 
    command.Parameters.AddWithValue("@AwardYear", Convert.ToInt32(AwardYear)); 
0

剛剛越過檢查所有你在進程內傳遞的數據類型是相同的,在我想一些列的table.Becaues在表列的數據類型是INT對於他們,你正在傳遞sproc中的varchar參數。

相關問題