c# - 如何在存储过程中获取计算列值

标签 c# asp.net .net sql-server-2008

我正在使用 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/

相关文章:

c# - LINQ 按特定术语过滤列表中的列表

c# - 如何正确转义资源文件中的特殊字符?

c# - AutoMapper 在源属性的条件下将目标设置为 null

c# - 为什么我的代码不能写入 SQL?

c# - Compare() 方法,Parent 和 Children 对象排序不完美

c# - 如何使用 iTextSharp 设置 HTML 表格的背景颜色以输出为 PDF

c# - 将 32768kb EGA 文件转换为 256x256 Texture2D?

asp.net - 为什么我无法验证其中包含 $ 符号的值?

c# - ASP.NET PhysicalFileProvider 在 Startup.cs 中不可用

c# - .net 的 Selenium 测试覆盖率(C# 和 VB)