如何检查该表中是否存在当前ID

时间:2009-09-22 07:00:19

标签: vb.net sql-server-2005

我正在使用VB.net和Sql server 2005。

我在应用程序中有GridView,我有 CPUserID 。 GridView中有数千条记录,具有不同的CPUserID。

现在我有一个按钮“分配令牌”。但在分配令牌之前,我想检查我的令牌表,如果表中已存在该CPUserID,则不应允许用户分配令牌并为该用户返回一些消息。

 For Each curRow As GridViewRow In GridView1.Rows
            Dim cpuserid As Label = CType(curRow.Cells(1).FindControl("lblCPUserID"), Label)                
        Next

TOKEN表结构如下:

TokenID,CPUserID,StatusID (全部整数)

请建议!使用一些示例代码

2 个答案:

答案 0 :(得分:0)

在令牌表上执行查询,以查看该表中是否已存在给定ID的行:

SELECT COUNT(*) FROM Token WHERE CPUserID = 5
例如

为了在VB.NET中执行此操作,您必须使用SqlConnectionSqlCommand类。 另外,请务必使用参数化查询。

在C#中,代码看起来或多或少是这样的:

SqlConnection conn = new SqlConnection ("here comes the connectionstring to the db.");

conn.Open();
try
{
    SqlCommand cmd = new SqlCommand ();
    cmd.Connection = conn;
    cmd.CommandText = "SELECT COUNT(*) FROM Token WHERE CPUserId = :p_UserId";
    cmd.Parameters.Add ("p_UserId", SqlDbType.Int32).Value = 5;
    object result = cmd.ExecuteScalar();

    if( Convert.ToInt32(result) > 0 )
    {
         MessageBox.Show ("Token already exists for user");
    }
}
finally
{
     conn.Close();
}

为了提高性能,您必须确保在令牌表上创建正确的索引。 CPUserId上的索引可能有助于此查询。

答案 1 :(得分:0)

首先感谢给所有回复此问题的人。

我用以下解决方案解决了上述问题:

SQL过程:

我在SQL Server 2005中创建了一个过程

GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[uspUpdateAllocateToken]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[uspUpdateAllocateToken]

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[uspUpdateAllocateToken]
( @CPUserID INT)
AS

IF NOT EXISTS(SELECT TokenID FROM tblToken WHERE CPUserId=@CPUserID AND StatusID IN (41,47))
BEGIN

UPDATE tblToken
SET 
CPUserID = @CPUserID,
StatusID=47

WHERE
 tblToken.TOKENID = (SELECT TOP 1 TOKENID FROM TBLTOKEN WHERE CPUSERID IS NULL AND STATUSID = 40)
END

进一步在我的Button Click上的应用程序。我在下面写下代码:

Protected Sub ibtnAllocateTokens_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ibtnAllocateTokens.Click
        Try
            Dim conString As String = WebConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString
            Dim con As New SqlConnection(conString)
            con.Open()
            Dim cmd As SqlCommand
            For Each gvRow As GridViewRow In GridView1.Rows
                cmd = New SqlCommand("uspUpdateAllocateToken", con)
                cmd.CommandType = CommandType.StoredProcedure
                cmd.Parameters.Add("@CPUserID", SqlDbType.Int).Value = CType(gvRow.Cells(1).FindControl("lblCPUserID"), Label).Text
                cmd.ExecuteScalar()
                lblAllocateTokenMessage.Visible = True
            Next

        Catch ex As Exception
            ErrorHandler.WriteError(ex.Message)
        End Try
    End Sub

如果此实施中出现任何问题,请查看并告诉我。

干杯!