2011-09-20 156 views
0

在这里,我需要访问的变量delval外的for循环,如下面的代码在c#中循环访问变量外?

cmd_mail.Parameters.Add("@deleteusers", SqlDbType.NVarChar).Value = delval; 

..How做到这一点..

这里是我的代码

for (int i = 0; i <= NoOfUsers - 1; i++) { 
     using (SqlConnection Conn = new SqlConnection(constr_str)) { 
      using (SqlCommand cmd = new SqlCommand()) { 
       cmd.Connection = Conn; 
       Conn.Open(); 
       cmd.CommandText = "Select top 1 Login_User_Name from Rode_Provisioning_User where [email protected] and CustomerCode [email protected] and disableflag=0 order by User_Count"; 
       cmd.Parameters.Add("@CustomerCode", SqlDbType.VarChar).Value = CustomerCode; 
       cmd.Parameters.Add("@RequestId", SqlDbType.VarChar).Value = RequestId; 
       string Loginusername = cmd.ExecuteScalar(); 
       Conn.Close(); 
       string delval = ""; 
       if (string.IsNullOrEmpty(delval)) { 
        delval = Loginusername; 
       } else { 
        delval = delval + "," + Loginusername; 
       } 
      } 
     } 
     } 

    if (flag == "Yes") { 
     string constr_dep = "server=" + _strServer + ";database=" + _strDatabase + ";uid=" + _strUserid + ";pwd=" + _strPassword + ";"; 
     SqlConnection con_dep = new SqlConnection(); 
     con_dep.ConnectionString = constr_dep; 

     SqlCommand cmd_mail = new SqlCommand("delete_user_mailsend_sp", con_dep); 
     cmd_mail.CommandType = CommandType.StoredProcedure; 
     cmd_mail.CommandTimeout = 0; 
     cmd_mail.Parameters.Add("@companycode", SqlDbType.NVarChar).Value = CustomerCode 
     cmd_mail.Parameters.Add("@deleteusers", SqlDbType.NVarChar).Value = delval; 
      try { 
      con_dep.Open(); 
      cmd_mail.ExecuteNonQuery(); 
     } catch (SqlException ee) { 
      VWLogger.LogMessage("Exception in delete_user_mailsend_sp:", TraceEventType.Critical); 
      VWLogger.LogMessage(ee, TraceEventType.Critical); 
      return ee.Message; 
      flag = ee.Errors(0).ToString(); 

     } 

     con_dep.Close(); 
    } 

任何建议?

+1

您需要重构代码pal。 – Zenwalker

+0

'delval'在声明后总是一个空字符串,所以你可以删除if语句。 –

+0

http://stackoverflow.com/questions/7475200/sql-server-connection-management-with-c/7475327#7475327 –

回答

5

然后在循环外定义它,它将在两个块中以及外部都可见。

+0

我很困惑自己。 ==“ –

+0

没有看到我的循环块..我在这里连接delval和登录用户名..我需要使用最后的连接delval值作为循环以外的参数 – bala3569

+0

@ bala3569:so?use it – zerkms

0

正如zerkms所说,在循环之外声明它。见下文。

string delval = ""; 

for (int i = 0; i <= NoOfUsers - 1; i++) 
{ 
    // your existing stuff 
    // ... 
    if (string.IsNullOrEmpty(delval)) 
    { 
     delval = Loginusername; 
    } 
    else 
    {      
     delval = delval + "," + Loginusername;     
    } 
} 

if (flag == "Yes") 
{   
    // your existing stuff 
    // ... 
    cmd_mail.Parameters.Add("@deleteusers", SqlDbType.NVarChar).Value = delval; 
}