簡體   English   中英

從存儲過程返回值到文本框

[英]Return value to textbox from stored procedure

在返回值ID值時遇到麻煩,我需要將輸出返回到表單中的文本框。 Webforms和ADO.net

我嘗試將參數標識添加為int和OUT子句,同時設置identity = scope_identity並返回值,然后使用我的團隊當前用於ExecuteNonQuery的模式,並使用傳入參數的匿名參數類,並嘗試將@identity值傳遞給文本框.text作為ID。

DataManager.Db.ExecuteNonQuery("DefaultConnection", "usp_CreateNewSalesTerritory", 
                        new SqlParameter("@orgId", orgId),
                        new SqlParameter("@identity", salesTerritoryIdTextBox.Text),
                        new SqlParameter("@salesTerritoryName", salesTerritories.Name), 
                        new SqlParameter("@createdBy", salesTerritories.CreatedBy), 
                        new SqlParameter("@createdDate", salesTerritories.CreatedDate),
                        new SqlParameter("@updatedBy", salesTerritories.UpdatedBy),
                        new SqlParameter("@updatedDate", salesTerritories.UpdatedDate),
                        new SqlParameter("@isActive", salesTerritories.IsActive));


CREATE PROCEDURE dbo.usp_CreateNewSalesTerritory
    @orgId              VARCHAR(255), 
    @salesTerritoryName VARCHAR(255), 
    @createdBy          VARCHAR(255), 
    @createdDate        DATETIME,
    @updatedBy          VARCHAR(255),
    @updatedDate        DATETIME,
    @isActive           BIT,
    @identity           INT OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO SalesTerritory (OrganizationId, Name, IsActive, 
                                CreatedBy, CreatedDate, UpdatedBy, UpdatedDate)
    VALUES (@orgId, @salesTerritoryName, @isActive, 
            @createdBy, @createdDate, @updatedBy, @updatedDate);

    --SELECT SCOPE_IDENTITY();

    --RETURN SCOPE_IDENTITY();

    --SELECT @@IDENTITY;
    SET @identity = SCOPE_IDENTITY()
END;

RETURN @identity

我希望獲得該記錄的新插入的ID值,而是在屏幕上獲得默認值0

通常,您將使用SqlCommand對象上的.ExecuteNonQuery()方法在“純” ADO.NET中調用這種存儲過程-因為它是INSERT語句。

但是現在,您的存儲過程實際上正在返回一些數據-因此,您確實需要像對待“正常” SELECT存儲過程那樣對待它。

假設您總是只返回SCOPE_IDENTITY()值-最好像這樣:

SELECT SCOPE_IDENTITY();

這只是一個單一值-您可以在SqlCommand對象上使用.ExecuteScalar()方法-如下所示:

object returned = sqlCmd.ExecuteScalar();

if (returned != null)
{
    int newIdValue = Convert.ToInt32(returned);
}
// else -> nothing was returned, so most likely no row has been inserted -> handle it appropriately

因此,也許您已經在DataManager.Db對象上為.ExecuteScalar()使用了“包裝”方法-也許您需要添加它。 試試看-我很確定這可以解決問題。

我會避免使用RETURN ...語句-默認情況下,SQL Server存儲過程將始終返回受存儲過程影響的行數-如果可以,請不要更改該“標准”行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM