【问题标题】:Procedure Error : Unable to cast object of type 'System.DBNull' to type 'System.String' [duplicate]过程错误:无法将“System.DBNull”类型的对象转换为“System.String”类型[重复]
【发布时间】:2020-03-12 13:41:15
【问题描述】:
 alter procedure SAVE_PERSONAL_DETAILS_OP
    @v_PNO CHAR(4),
    @v_EMAILID VARCHAR(80),
    @v_MOBILE CHAR(10),
    @v_AADHAR CHAR(12),
    @v_PANNO CHAR(10),
     @v_PASSPORT CHAR(9),
     @v_EXPIRY_DT date,   
    @ERROR VARCHAR(100) OUTPUT 

 AS
   BEGIN 
        DECLARE @nCnt float=0
        DECLARE @vCnt float=0

        if @v_PNO=''
        begin
        set @ERROR = 'Pno not in Session..!!!!'
        return;
        end         
        if @v_MOBILE =''
        begin
        set @ERROR = 'Please Enter Mobile Number !!!!'
        return;
        end
        if @v_AADHAR =''
        begin
        set @ERROR = 'Please Enter Aadhar Number !!!! '
        return;
        end
        if @v_PANNO =''
        begin
        set @ERROR = 'Please Enter PAN Number !!!! '
        return;
        end
        if @v_PASSPORT =''
        begin
        set @ERROR = 'Please Enter Passport Number !!!!'
        return;
        end
        if @v_EXPIRY_DT =''
        begin
        set @ERROR = 'Please Select Expiry Date !!!!'
        return;
        end         

         --SET NOCOUNT ON

            SET @nCnt=0
            select @nCnt = count(*) from Tbl_Aadhar where pno=@v_PNO
                 if @nCnt=0 
                    begin try 
                        INSERT INTO Tbl_Aadhar(PNO , AadharNo , Pan, CivilPassportNo, PassportExpiry, InsertDate) 
                        VALUES (@v_PNO,@v_AADHAR,@v_PANNO, @v_PASSPORT,@v_EXPIRY_DT, GETDATE())
                     if @nCnt !=0   
                         begin                    
                          declare @ID Char(10)
                          declare @MobileId Char(10)
                          set @ID=(select ID from Tbl_Aadhar where pno=@v_PNO)
                          set @MobileId=(select registrationid from tbl_Registration where pno=@v_PNO and Cader='OP')
                          update Tbl_Aadhar set AadharNo=@v_AADHAR , Pan =@v_PANNO , CivilPassportNo =@v_PASSPORT , PassportExpiry= @v_EXPIRY_DT 
                          where ID=@ID and Pno=@v_PNO

                          update tbl_Registration set Mobile=@v_MOBILE where PNO=@v_PNO and RegistrationId=@MobileId
                        end 

                             SET @ERROR = 'The Details has been saved successfully. for Pno  '  +  @v_PNO                                                             
                    end try
                    begin catch
                            SET @ERROR = 'Something Went Wrong. Please Try Agian Later'
                    end catch       

   END

【问题讨论】:

  • 请提供更多细节和SQL技术。这似乎是调用您的 SP 的 APP 错误,但我没有看到应用代码
  • SP 必须是 SQL 服务器。
  • 您需要包含程序代码,而不仅仅是存储过程,因为错误显然来自程序。
  • 您遇到 .NET 错误,但您只显示了 SQL 代码。除非您添加引发错误的 .NET 代码,否则很难为您提供帮助。

标签: sql .net sql-server


【解决方案1】:

如果您的任何 Sql 参数返回 Null 值并且在 DAO 层您正在将该实体读取/转换为字符串,那么您将面临同样的错误。

为了避免这种情况, 在 Sp 级别使用 ISNull 检查

示例。

从表中选择名称;

这里的名称是一个字符串。如果这是 Null 并且您将在代码中的任何位置将此字符串用作字符串,那么这将导致错误为 DB Null 转换错误。

解决方案: 从表中选择 ISNULL(名称,'');

在这里您可以检查 Null 的可能性,如果我们得到 null 值,那么它将显示 ' ' 空白,可以在代码中的任何地方使用。

【讨论】:

    猜你喜欢
    • 2012-05-19
    • 2012-05-24
    • 2021-04-26
    • 2012-09-14
    相关资源
    最近更新 更多