2011-03-03 42 views
0
public ArrayList ChequeACpayee(string Payee, DateTime Date) 
{ 
    ArrayList arr = new ArrayList(); 
    try 
    { 
     con.Open(); 
     SqlCommand cmd = new SqlCommand("ViewChequeforAcPayee", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlParameter p = new SqlParameter(); 
     p = cmd.Parameters.AddWithValue("@PayeeName", Payee); 
     p = cmd.Parameters.AddWithValue("@Date", Date); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      ChequeInfo infoCheque = new ChequeInfo(); 

      infoCheque.AcPayee = dr["AcPayee"].ToString(); 

      arr.Add(infoCheque); 
     } 

     dr.Close(); 
     con.Close(); 
    } 
    catch (Exception e) 
    { 
    } 
    return arr; 
} 
ArrayList ArrAcpayee = ChequeAcPayee.ChequeACpayee (DDLPayee.SelectedItem.ToString(), BDPSelectDate.SelectedDate); 

我如何得到這個ArrayList中的單個值從一個ArrayList中的單個值?該值必須轉換爲字符串。我想在一個字符串

+0

什麼價值?是他們的標準。 – rerun 2011-03-03 07:11:27

+0

是的,我有acpayee – RAHUL 2011-03-03 07:13:06

+1

任何你不使用泛型的理由? – 2011-03-03 07:13:24

回答

7

你可以只使用索引和cast:

string payee = (string) ArrAcpayee[0]; 

但你可能要檢查的大小第一:

if (ArrAcpayee.Length != 1) 
{ 
    // Create your own more appropriate exception 
    throw new SomethingWentWrongException("Expected 1 payee entry; got " 
              + ArrAcpayee.Length); 
} 
string payee = (string) ArrAcpayee[0]; 

不過,我關心你的代碼的其他方面:

  • 有沒有你不使用泛型某種原因?您是否使用真的 .NET 1.1,或一些框架不支持List<T>
  • 你是否期待有一個以上的結果是,ChequeACpayee方法中?如果不是,那方法應該返回一個字符串,並拋出,如果不是正好有一個結果
  • 捕獲異常,只是吞嚥它是一個真正壞主意。你真的想繼續努力嗎?無論發生什麼事
  • 您應該使用using語句關閉,而不是手動調用Close()數據庫連接和數據讀取器。否則,如果拋出異常,您將泄漏連接。
  • 以往,參數駝峯格式,不PascalCased。 (局部變量是從類,所以問題不大外面看不見,但他們一般也駝峯)
+0

我收到一個錯誤:「無法將類型爲'System.Object []'的對象轉換爲鍵入'System.String'」 – 2014-02-25 00:02:32

+1

@HammanSamuel:那麼你的對象顯然是'Object []'而不是'String'類型。你似乎不可能像3年前的人那樣得到完全相同的代碼......如果你無法弄清楚爲什麼你的對象是錯誤的類型,我建議你問一個新問題。 – 2014-02-25 06:57:16

1

假設你正在使用LINQ:

ArrayList ArrAcpayee = ChequeAcPayee.ChequeACpayee (DDLPayee.SelectedItem.ToString(), BDPSelectDate.SelectedDate); 

return ArrAcpayee.Cast<string>().Single(); //If there will always be just one value in the array list 

return ArrAcpayee.Cast<string>().SingleOrDefault(); //If there will be either one or no value in the array list 

return ArrAcpayee.Cast<string>().First(); //If you want to return the first value 

希望這有助於

+0

這不會編譯,因爲ArrayList不是通用的。你需要使用'鑄()'或'OfType ()'。 – 2011-03-03 07:18:53

+0

謝謝喬恩。編輯修復。 – Divi 2011-03-03 07:32:14

0

SqlDataReader中有一些內置的方法可以讓你做到這一點:

dr。 GetString(dr。GetOrdinal(「AcPayee」));

相關問題