如果存储过程中存在

时间:2009-07-01 11:27:52

标签: asp.net vb.net sql-server-2005

我正在使用以下storedprocedure

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO


Alter PROCEDURE [dbo].[GetUserDetailsByUserID]
(
    @UserId varchar(100)
)
AS
BEGIN

    IF EXISTS(Select * from Registration where UserId=@UserID)
        BEGIN
            Select
                   [Name],
                   [UserId],
                   [PermanentAddress],
                   [TemporaryAddress],
                   [OfficePhoneNo],
                   [ResidentialPhoneNo],
                   [MobileNo],
                   [Email],
                   [ContactPerson],
                   [C_OfficePhoneNo],
                   [C_ResidentialPhoneNo],
                   [C_MobileNo],
                   [C_Email],
                   [Project],
                   [TotalAmount]
            From
                Registration
            Where
                UserId=@UserId

        END

END

我在vb中使用以下代码

Public Function GetUserDetailsByUserID(ByVal strUserId As String) As DataTable
        Try

            Dim db As Database = DatabaseFactory.CreateDatabase()
            Dim DbCommand As DbCommand = _
                db.GetStoredProcCommand("GetUserDetailsByUserID")
            db.AddInParameter(DbCommand, "@UserId", DbType.String, strUserId)
            Return db.ExecuteDataSet(DbCommand).Tables(0)

        Catch ex As Exception
            Return New DataTable()
        End Try
    End Function

如果注册表中不存在与userid相对应的详细信息,db.ExecuteDataSet(DbCommand).Tables(0)会将一个错误显示为cannot find Table(0)。我想要摆脱这个错误的主要程序有什么修改?

3 个答案:

答案 0 :(得分:3)

您可以简单地摆脱 IF EXISTS 。当记录不存在时,您将获得一个空表(我认为这就是您想要的,查看您的示例代码)

答案 1 :(得分:1)

该过程不会始终返回记录集。如果没有记录集,则Tables将为空,Tables(0)将失败并返回错误。您应该只返回选择而不是仅选择记录是否存在。然后,您的代码可以检查返回的空记录集。

答案 2 :(得分:0)

在VB代码中,更改

Return db.ExecuteDataSet(DbCommand).Tables(0)

Dim Ds as DataSet = db.ExecuteDataSet(DbCommand)
If Ds.Tables.Count = 1 Then
    Return Ds.Tables(0)
Else
    Return New DataTable()
End If

此外,从存储过程中删除 If Exists ,因为如果该行存在,您将强制数据库在表中搜索两次UserId = @ UserID的记录。