2012-01-04 97 views
1

如何获取返回的memberID变量插回到其他SQL存储过程中?如何使我的应用程序中使用我的变量?

protected void imgBtnActivate_onClick(object sender, EventArgs e) 
{ 

    // Inserts Member record 
    try 
    { 
     Database db = DatabaseFactory.CreateDatabase(ConfigManager.AppSettings["ConnectionString.Dev"]); 

     DbCommand dbCommand = db.GetStoredProcCommand("dbo.ins_member_p"); 
     db.AddInParameter(dbCommand, "@FirstName", DbType.String, txtFirstName.Text); 
     db.AddInParameter(dbCommand, "@LastName", DbType.String, txtLastName.Text); 
     db.ExecuteNonQuery(dbCommand); 
     int memberID = Convert.ToInt32(db.GetParameterValue(dbCommand, "MemberNewID").ToString()); 

} 
    catch (Exception ex) 
    { 
     ExceptionPolicy.HandleException(ex, "Notify Policy"); 
    } 


    // Insert Member Email 
    try 
     { 

Database db = DatabaseFactory.CreateDatabase(ConfigManager.AppSettings["ConnectionString.Dev"]); 

      DbCommand dbCommand = db.GetStoredProcCommand("[ins_MemberEmail_p]"); 
      dbCommand.Transaction = dbTran; 

      db.AddInParameter(dbCommand, "MemberID", DbType.Int32, memberID); 
      db.AddInParameter(dbCommand, "SourceID", DBType.In32, 33); 
      db.AddInParameter(dbCommand, "EmailAddress", DbType.String, EncryptedEmailAddress); 

    } 
    catch (Exception ex) 
    { 
     ExceptionPolicy.HandleException(ex, "Notify Policy"); 
    } 
} 

回答

3

只要定义int memberID第一try....catch外块,以便它会在里面可见第二个try...catch块:

protected void imgBtnActivate_onClick(object sender, EventArgs e) 
{ 
    // define it here 
    int memberID = -1: 

    // Inserts Member record 
    try 
    { 
     ...... 
     db.ExecuteNonQuery(dbCommand); 
     memberID = Convert.ToInt32(db.GetParameterValue(dbCommand, "MemberNewID").ToString()); 
    } 
    catch (Exception ex) 
    { 
     ExceptionPolicy.HandleException(ex, "Notify Policy"); 
    } 

    // Insert Member Email 
    try 
    { 
     ...... 
     // then it'll be visible and useable here! 
     db.AddInParameter(dbCommand, "MemberID", DbType.Int32, memberID); 
     ..... 
    } 
    catch (Exception ex) 
    { 
     ExceptionPolicy.HandleException(ex, "Notify Policy"); 
    } 
} 
1

改变它像这样,将变量的声明出来的{},才

protected void imgBtnActivate_onClick(object sender, EventArgs e) 
{ 

int memberID; 

// Inserts Member record 
try 
{ 
    Database db = DatabaseFactory.CreateDatabase(ConfigManager.AppSettings["ConnectionString.Dev"]); 

    DbCommand dbCommand = db.GetStoredProcCommand("dbo.ins_member_p"); 
    db.AddInParameter(dbCommand, "@FirstName", DbType.String, txtFirstName.Text); 
    db.AddInParameter(dbCommand, "@LastName", DbType.String, txtLastName.Text); 
    db.ExecuteNonQuery(dbCommand); 
    memberID = Convert.ToInt32(db.GetParameterValue(dbCommand, "MemberNewID").ToString()); 

} 
catch (Exception ex) 
{ 
    ExceptionPolicy.HandleException(ex, "Notify Policy"); 
} 
0

首先,我会建议你分开你的代码一点点。在控制事件处理程序中,您正在执行相当多的逻辑(包括数据访问和可能的某些域逻辑)。

但是,您的问题的直接解决方案是在您的try/catch块外部延迟memberID

protected void imgBtnActivate_onClick(object sender, EventArgs e) 
{ 
    int memberID; 
    // Inserts Member record 
    try 
    { 
     Database db = DatabaseFactory.CreateDatabase(ConfigManager.AppSettings["ConnectionString.Dev"]); 

     DbCommand dbCommand = db.GetStoredProcCommand("dbo.ins_member_p"); 
     db.AddInParameter(dbCommand, "@FirstName", DbType.String, txtFirstName.Text); 
     db.AddInParameter(dbCommand, "@LastName", DbType.String, txtLastName.Text); 
     db.ExecuteNonQuery(dbCommand); 
     memberID = Convert.ToInt32(db.GetParameterValue(dbCommand, "MemberNewID").ToString()); 

    } 
// .... so on and so forth 

你将不得不范围为整个事件处理程序,这反过来将允许您使用在整个处理程序的范围变量内memberID上述方式。

相关问题