2009-09-24 41 views
0

我需要使用相同的變量名來聲明連接字符串。 但是當我這樣做,我會有進一步的錯誤。 我聲明瞭「SqlConnection sqlCon = new SqlConnection(strCon);」對於第一個變量,我可以再次使用它嗎? 據我的老師,我應該使用相同的變量。使用範圍中的相同變量名稱

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(); 
    } 

是因爲我不能使用相同的變量?

回答

2

您不能在相同的聲明空間中多次聲明相同的變量名稱。但你可以很好地使用它。

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

如果你想聲明同名,那麼你可以定義範圍爲變量名using {}

對於前:

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

謝謝。我之前嘗試過第一種方法。它沒有工作。第二種方法工作得很好。 :) – Nana 2009-09-24 02:34:17

+0

我注意到你已經把「範圍」與「聲明空間」混淆了。在相同範圍內聲明兩個相同名稱的變量通常是完全合法的。例如,類C {int x; void M(){int x; }} - 這裏有兩個變量都被稱爲X和兩個由C類中定義的不同範圍內聲明的是,他們在不同的聲明空間,這使得它的法律。 – 2009-09-24 06:25:42

+0

好的,我會補充說明。 – 2009-09-24 07:08:06

4

您可以重新使用相同的變量名稱。問題是你聲明瞭兩次。嘗試從第二個實例中刪除「SqlConnection」(變量類型)。

+0

OHS,我我曾嘗試過。但它不起作用。它給了我這個錯誤:「名字'sqlCon'在當前上下文中不存在。」 – Nana 2009-09-24 02:22:54

+0

當你最後一次嘗試sqlCon宣佈裏面的嘗試塊? – 2009-09-24 02:29:44

+0

當我從第二個實例中刪除sqlConnection時,它不在try塊內。但我用try塊變量sqlCon(但它不影響正確的Cuz在這裏是不聲明或造成影響?。?) – Nana 2009-09-24 02:40:40

0

嘗試這樣的: - 的SqlConnection sqlcon =新的SqlConnection(); //第一連接 sqlcon.connectionstring = 「連接字符串1」 做一些工作.... //第二 sqlcon.connectionstring = 「連接字符串2」 ......

相關問題