2009-09-24 7 views
0

Je dois utiliser le même nom de variable pour déclarer la chaîne de connexion. Mais quand je fais cela, je vais avoir d'autres erreurs. J'ai déclaré "SqlConnection sqlCon = new SqlConnection (strCon);" pour la première variable, puis-je l'utiliser à nouveau? Selon mon professeur, je devrais utiliser la même variable.Utilisation Le même nom de variable dans la portée

string strCon = Database.GetConStr(); 
    SqlConnection sqlCon = new SqlConnection(strCon); 
    try 
    { string strSql = "SELECT Name, ID FROM student WHERE Status = 'A' ORDER BY Name"; 
     SqlCommand sqlCmd = new SqlCommand(strSql, sqlCon); 
     sqlCon.Open(); 
     SqlDataReader reader = sqlCmd.ExecuteReader(); 
     while (reader.Read()) 
     { 
      ddlStaff.Items.Add(new ListItem(reader["Name"].ToString(), reader["ID"].ToString())); 
     } 
     reader.Close(); 
    } 
    catch (Exception ex) 
    { 
     Session["Error"] = "Error in getting ... System Msg: " + ex.Message; 
     Server.Transfer("Error.aspx"); 
    } 
    finally 
    { 
     if (sqlCon.State == ConnectionState.Open) 
      sqlCon.Close(); 
    } 

    string strCon2 = Database.GetConStr(); 
    sqlCon = new SqlConnection(strCon2); 
    try 
    { string strSql2 = "SELECT Desc1, Desc2 FROM Parameter WHERE Paracode1 = 'Test' AND Status = 'A' ORDER BY Desc1"; 
     SqlCommand sqlCmd2 = new SqlCommand(strSql2, sqlCon); 
     sqlCon.Open(); 
     SqlDataReader reader2 = sqlCmd2.ExecuteReader(); 
     while (reader2.Read()) 
     { 
      ddlModule.Items.Add(new ListItem(reader2["Desc1"].ToString(), reader2["Desc22"].ToString())); 
     } 
     reader2.Close(); 
    } 
    catch (Exception ex) 
    { 
     Session["Error"] = "Error in getting ... System Msg: " + ex.Message; 
     Server.Transfer("Error.aspx"); 
    } 
    finally 
    { 
     if (sqlCon.State == ConnectionState.Open) 
     sqlCon.Close(); 
    } 

Est-ce parce que je ne peux pas utiliser la même variable?

Répondre

2

Vous ne pouvez pas déclarer plusieurs fois le même nom de variable dans le même espace de déclaration . Mais vous pouvez très bien l'utiliser.

try removing SqlConnection in second declaration: 
    /*SqlConnection*/ sqlCon = new SqlConnection(strCon2); 

Si vous souhaitez déclarer le même nom, vous pouvez définir la portée du nom de la variable using {}

Ex:

{ 
    SqlConnection sqlCon = new SqlConnection(strCon); 
    //use sqlCon 
}//scope ends 
//sqlCon is not available after } 
{ //new scope starts 
    SqlConnection sqlCon = new SqlConnection(strCon); 
} 
+0

Merci. J'ai essayé la première méthode avant. ça n'a pas marché. la deuxième méthode fonctionne parfaitement bien. :) – Nana

+0

Je remarque que vous avez confondu "scope" avec "espace de déclaration". Il est souvent parfaitement légal de déclarer deux variables du même nom dans la même portée. Par exemple, classe C {int x; void M() {int x; }} - ici il y a deux variables appelées x et les deux déclarées dans la portée définie par la classe C. La différence est qu'elles sont dans des espaces de déclaration différents, ce qui le rend légal. –

+0

okay je vais ajouter cette clarification. –

4

Vous pouvez réutiliser le même nom de variable. Le problème est que vous le déclarez deux fois. Essayez de supprimer le "SqlConnection" (le type de variable) de la deuxième instance.

+0

OHS, je J'ai déjà essayé ça. mais ça ne marche pas. il m'a donné cette erreur: "Le nom 'sqlCon' n'existe pas dans le contexte actuel." – Nana

+0

La dernière fois que vous avez essayé, sqlCon a été déclaré à l'intérieur du bloc try? –

+0

lorsque je supprime le sqlConnection de la deuxième instance, il n'est pas dans le bloc try. mais j'utilise la variable sqlCon dans le bloc try (mais cela n'affecte pas le droit? cuz ici n'est pas la déclaration ou affecte-t-il?) – Nana

0

essayer comme ceci: - sqlConnection sqlcon = new sqlConnection(); // première connexion sqlcon.connectionstring = "connexion string1" faire un peu de travail .... // deuxième sqlcon.connectionstring = "chaîne de connexion 2" ......

Questions connexes