我正在使用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 (全部整数)
请建议!使用一些示例代码
答案 0 :(得分:0)
在令牌表上执行查询,以查看该表中是否已存在给定ID的行:
SELECT COUNT(*) FROM Token WHERE CPUserID = 5
例如。
为了在VB.NET中执行此操作,您必须使用SqlConnection
和SqlCommand
类。
另外,请务必使用参数化查询。
在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
如果此实施中出现任何问题,请查看并告诉我。
干杯!