Asp.net 将值从存储过程返回到textbox
无法将输出所需的值ID值返回到表单中的文本框。Webforms和ADO.net 我尝试添加一个param identity作为int和OUT子句,同时设置identity=scope\u identity并返回值,然后使用团队当前用于Asp.net 将值从存储过程返回到textbox,asp.net,sql-server,webforms,ado.net,Asp.net,Sql Server,Webforms,Ado.net,无法将输出所需的值ID值返回到表单中的文本框。Webforms和ADO.net 我尝试添加一个param identity作为int和OUT子句,同时设置identity=scope\u identity并返回值,然后使用团队当前用于ExecuteNonQuery的模式,匿名参数类传入值,并尝试将@identity值传递给id的textbox.text DataManager.Db.ExecuteNonQuery("DefaultConnection", "usp_CreateNewSalesT
ExecuteNonQuery
的模式,匿名参数类传入值,并尝试将@identity值传递给id的textbox.text
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()
方法在“pure”ADO.NET中调用这样的存储过程,因为它是INSERT
语句
但是现在,您的存储过程实际上返回了一些数据,因此您确实需要将其视为“正常的”SELECT
存储过程
假设您总是只返回SCOPE\u IDENTITY()
值-最好是这样:
SELECT SCOPE_IDENTITY();
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
这只是一个值-您可以在SqlCommand
对象上使用.ExecuteScalar()
方法-如下所示:
SELECT SCOPE_IDENTITY();
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存储过程将始终返回受存储过程影响的行数-如果可以,请不要更改“标准”行为。通常,您会使用.ExecuteNonQuery()在“纯”ADO.NET中调用这样的存储过程SqlCommand
对象上的
方法-因为它是一个INSERT
语句
但是现在,您的存储过程实际上返回了一些数据,因此您确实需要将其视为“正常的”SELECT
存储过程
假设您总是只返回SCOPE\u IDENTITY()
值-最好是这样:
SELECT SCOPE_IDENTITY();
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
这只是一个值-您可以在SqlCommand
对象上使用.ExecuteScalar()
方法-如下所示:
SELECT SCOPE_IDENTITY();
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存储过程将始终返回受存储过程影响的行数-如果可以,请不要更改该“标准”行为