我正在使用 ASP.NET 4.0、C# 和 SQL Server 2008 R2。我正在从网页中的用户处获取 UserName
以存储在 SQL 表 User_Info2
中。使用 SQL Server 2008 功能“计算列”,我使用存储过程为每个 Insert
自动生成 Vendor_ID
。在单击按钮时,插入记录后我想显示带有 Vendor_ID
的消息,所以请有人告诉我如何从存储过程中获取 Vendor_ID
列?
CREATE TABLE User_Info2
( SNo int Identity (2000,1) ,
Vendor_ID AS 'VEN' + CAST(SNo as varchar(16)) PERSISTED PRIMARY KEY,
UserName VARCHAR(30) NOT NULL
)
存储过程
ALTER PROCEDURE [dbo].[usp_User_Info2] @UserName VARCHAR(30)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO User_Info2 (UserName) VALUES (@UserName)
END
C#代码:
protected void BtnUserNext_Click(object sender, EventArgs e)
{
SqlConnection SqlCon = new SqlConnection(GetConnectionString());
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "usp_User_Info2";
cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = txtUserName.Text.Trim();
cmd.Connection = SqlCon;
try
{
SqlCon.Open();
cmd.ExecuteScalar();
}
finally
{
string url = "../CompanyBasicInfo.aspx?Parameter=" + Server.UrlEncode ("+ Vendor_ID +");
ClientScript.RegisterStartupScript(this.GetType(),"callfunction",
"alert('Login created successfully for "+ Vendor_ID +"');
window.location.href = '" + url + "';", true);
SqlCon.Close();
}
}
最佳答案
可以使用OUTPUT
子句输出插入的值,然后在执行存储过程时读取:
ALTER PROCEDURE [dbo].[usp_User_Info2] @UserName VARCHAR(30)
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO User_Info2 (UserName)
OUTPUT Inserted.Vendor_ID
VALUES (@UserName)
END
并在您的 C# 调用代码中:
object spResult;
string vendorID;
try
{
SqlCon.Open();
spResult = cmd.ExecuteScalar();
if(spResult != null) // check to make sure you got something back!
{
vendorID = spResult.ToString();
}
}
关于c# - 如何在存储过程中获取计算列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137760/