2013-07-25 87 views
1

我在分配值時遇到問題。如何將3個值分配到單個字符串中

string userlanguages = string.Empty; 
     try 
     { 
      SqlCommand cmd = new SqlCommand("SELECT [s_langName] from [dbo].[tx_UserLanguages] WHERE [s_ID] ='" + Class1.EmployeeId + "'", objcon); 
      if (objcon.State == ConnectionState.Closed) objcon.Open(); 
      SqlDataAdapter adp = new SqlDataAdapter(cmd); 
      DataSet myDS = new DataSet(); 
      adp.Fill(myDS); 
      userlanguages = myDS.Tables[0].Rows[0]["[s_langName]"].ToString(); 
     } 
     catch (SqlException exc) 
     { 
      Response.Write(exc.Message); 
     } 
     finally 
     { 
      objcon.Close(); 
      Class1.langKnwn = userlanguages; 
     } 
    } 

假設,這裏的myDs包含三個值。那麼我將如何將它們分配給單個字符串(本例中爲'userlanguages')。我在另一個頁面中使用Class1.langKnwn來顯示用戶選擇的語言(在很多情況下可能會超過1種語言)。

請幫幫我。

回答

2

如何像

List<string> languages = new List<string>(); 
for (int iRow = 0; iRow < myDS.Tables[0].Rows.Count; iRow++) 
    languages.Add(myDS.Tables[0].Rows[iRow]["[s_langName]"].ToString()); 

userlanguages = String.Join(",", languages); 
+0

非常感謝你.. – Tannya

1
 SqlCommand cmd = new SqlCommand("SELECT [s_langName] from [dbo].[tx_UserLanguages] WHERE [s_ID] ='" + Class1.EmployeeId + "'", objcon); 
     if (objcon.State == ConnectionState.Closed) objcon.Open(); 
     SqlDataAdapter adp = new SqlDataAdapter(cmd); 
     DataSet myDS = new DataSet(); 
     adp.Fill(myDS); 
     for(int ndx=0;ndx<myDS.Tables[0].Rows.Count;ndx+=1) 
     { 
      if(ndx==0) 
       { 
        userlanguages = myDS.Tables[0].Rows[ndx]["[s_langName]"].ToString(); 
       } 
       else 
       { 
        userlanguages = userlanguages+","+ myDS.Tables[0].Rows[ndx]["[s_langName]"].ToString(); 
       } 
     } 
+0

在這裏,你去brotha' – user1625766

0

如果我正確理解你的問題,使用SqlDataReader可能是你的情況更好的選擇somethig。

using (SqlConnection objcon= new SqlConnection(connectionString)) 
{ 
    SqlCommand cmd = new SqlCommand("SELECT [s_langName] from [dbo].[tx_UserLanguages] WHERE [s_ID] = @id", objcon); 
    cmd.Parameters.AddWithValue("@id", Class1.EmployeeId); 
    connection.Open(); 

    SqlDataReader reader = cmd .ExecuteReader(); 

    string userlanguages = string.Empty; 
    while (reader.Read()) 
    { 
     string str = reader.GetString(0); 
     userlanguages = String.Join(",", userlanguages); 
    } 
    reader.Close(); 
} 

而且您應該始終使用parameterized queries。這種字符串連接對於SQL Injection攻擊是開放的。

0

試試這個

使用using System.Text; namesapce

,然後編寫代碼在你的塊

StringBuilder sb = new StringBuilder(); 
     for (int iRow = 0; iRow < myDS.Tables[0].Rows.Count; iRow++) 
     { 
      sb.Append(myDS.Tables[0].Rows[iRow]["[s_langName]"].ToString()); 
      sb.Append(","); 
     } 

//得到字符串末 string myString = sb.ToString();

myString= myString.Substring(0, myString.Length - 1);

+0

請注意,這將結束與一個額外的','在最後。 –

+0

感謝您的反饋意見。我已更新我的代碼。 –

0
userlanguages = string.Join(",", myDS.Tables[0].AsEnumerable() 
             .Select(row => row.Field<string>("[s_langName]")) 
             .ToArray()); 
相關問題