2

ASP.NET 4.0、C#、およびSQL Server2008R2を使用しています。UserNameSQLテーブルに保存するためのWebページでユーザーから取得していますUser_Info2。SQL Server 2008の機能「計算列」を使用して、ストアドプロシージャを使用するVendor_IDたびに自動的に生成しています。Insertボタンクリックで、レコードを挿入した後、メッセージを表示したいので、ストアドプロシージャから列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();    
  }    
}
4

4 に答える 4

6

句を使用して挿入された値を出力し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();
     }        
  }  
于 2012-08-27T07:39:44.297 に答える
1

これを試すことができます

ALTER PROCEDURE [dbo].[usp_User_Info2] @UserName VARCHAR(30)
AS  
BEGIN 
   SET NOCOUNT ON;

   declare @Id int

   INSERT INTO User_Info2 (UserName) VALUES (@UserName)   

   SET @Id = Scope_Identity()

   SELECT Vendor_ID From User_Info2 WHERE SNo = @Id
END   

C#

try   
{     
  SqlCon.Open();   
  string VendorID = cmd.ExecuteScalar() as string;  
}  
于 2012-08-27T07:42:54.190 に答える
0

また、あなたはこのようにすることができます

select top(1) Vendor_ID from User_Info2 order by SNo desc
于 2012-08-27T07:42:19.983 に答える
0

の助けを借りて現在挿入行を取得できますSCOPE_IDENTITY()

SET @SNo = SCOPE_IDENTITY()

そして、挿入クエリの下で、選択クエリを実行できます@SNo

したがって、次のようになります。

ALTER PROCEDURE [dbo].[usp_User_Info2] 
(
    @UserName VARCHAR(30),
    @SNo int,
    @Vendor_ID VARCHAR(50) OUTPUT
)
AS  
BEGIN 
   SET NOCOUNT ON;

   INSERT INTO User_Info2 (UserName) VALUES (@UserName)
   SET @SNo = Scope_Identity()


   select @Vendor_ID as Vendor_ID from User_Info2 where SNo = @SNo

END   

編集:

SqlParameter[] param= new SqlParameter[1];

param[0] = new SqlParameter("@Vendor_ID", 0);
param[0].Direction = ParameterDirection.Output;

//  Here there will be a Stored Procedure Call

int VendorID = Convert.ToInt32(param[0].Value);

これ@Vendor_IDで、どれがOutput変数であるかがわかります。

于 2012-08-27T07:45:38.517 に答える