Как проверить, есть ли текущий идентификатор в этой таблице или нет - PullRequest
0 голосов
/ 22 сентября 2009

Я использую VB.net и Sql server 2005.

У меня есть GridView в приложении, где у меня есть CPUserID . В GridView могут быть тысячи записей с разными CPUserID.

Теперь у меня есть кнопка " Allocate Token ". Но перед выделением токена я хочу проверить в своей таблице Token , что если этот 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 голосов
/ 22 сентября 2009

Прежде всего спасибо всем, кто ответил на этот вопрос.

Я решил вышеуказанные проблемы с помощью следующих решений:

Процедура 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

Далее в моей заявке о моем нажатии кнопки. Я пишу ниже код:

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

Пожалуйста, посмотрите и дайте мне знать, если есть какие-либо проблемы в этой реализации.

Ура!

0 голосов
/ 22 сентября 2009

Выполните запрос к таблице Token, чтобы узнать, существует ли уже строка в этой таблице для данного идентификатора:

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();
}

Чтобы повысить производительность, вам необходимо убедиться, что вы создали правильные индексы для таблицы Token. Индекс CPUserId может помочь в этом запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...