2012-10-30 2 views
1

C# .NET 4.0을 사용하여 MS Visual Studio 2012 Express를 사용합니다.C#은 데이터 테이블 함수를 단축합니다.

안녕 얘들 아, 이건 내가 믿는 단순한거야.

나는 사장님의 요청에 따라 프로그램을 서두르고 있었지만, 이제는 더 많은 자유 시간을 갖게되었습니다.

그래서 내가 더 컴팩트 만들려고 노력하는 코드를 통해거야, 청소기

나는이 하나 개의 기능이 .....

public void RunMonth() 
{ 
    //** top 10 listings*********************//    
    SetTxtBox1(DateTime.Now.ToString() + " ==== END OF MONTH REPORTS starting.........\r\n"); 
    SetTxtBox1(" **************************************************************************************\r\n"); 
    try 
    { 
     VRMtableDESC = querys.TopVRM("DESC"); 
     SetTxtBox1(DateTime.Now.ToString() + " ==== VRM Top has been loaded\r\n"); 
    } 
    catch 
    { 
     SetTxtBox1(DateTime.Now.ToString() + " ==== VRM Top has FAILED\r\n"); 
    } 
} 

는 "VRMtableDESC는"데이터 테이블 등등, 약 18 개의 데이터 테이블 중 하나. 각 데이터 테이블에 대해이 try 문이 실행됩니다.

지금 알 수 있듯이 현재 모든 테이블에 대해 18 번 반복됩니다. 대신 대신 테이블에 루프를 넣고 거기에 데이터를 입력하고 싶습니다.

이 방법이 있습니까? 내가 datatables 및 query.function 호출 컬렉션에 대한 일종의 내가 너무 멀리 알고 전화가 필요합니다.

지금까지 나는 뭔가가 실종 된 것을 기대하면서 공백을 쳤습니다. 사전에

감사

:::: UPDATE ::::

foreach (DataTable tbl in MyDataSet.Tables) 
{ 
    tbl.TableName.Equals(querys.TopVRM("")); 
} 

equals 메소드는 동적 할 필요가 .... 나는이 지금까지 설정 한 있도록 확인의 방법 선택도 .... 어떤 아이디어?

:: UPDATE (31/10/12) :: 다시

안녕, 임 오류를 받고, 일반적인 오류가있는 병합에 apears

"개체의 인스턴스로 전송되지 객체" foreach 루프.

내 쿼리 호출을 디버깅하여 정상적으로 보입니다.

var tables = new SortedDictionary<string, Func<DataTable>>() 
     { 
      {"VRMtableDESC", () => querys.TopVRM("DESC")}, 
      {"VRMtableASC", () => querys.BotVRM("ASC")}, 
      {"SpectableDESC",() => querys.TopSpec("DESC")}, 
      {"SpectableASC", () => querys.botSpec("ASC")}, 
      {"ParttableDESC",() => querys.TopPart("DESC")}, 
      {"ParttableASC",() => querys.BotPart("ASC")}, 
      {"MantableDESC", () => querys.TopManual("DESC")}, 
      {"MantableASC", () => querys.BotMan("ASC")}, //why is this first to run????? 
      {"UsersLockedTbl",() => querys.UserLocked()}, 
      {"NewUsersTbl", () => querys.NewUsers()}, 

      {"VRMtotaltblTOP", () => querys.VRMtotalTOP("")}, 
      {"PARTtotaltblTOP", () => querys.PARTtotalTOP("")}, 
      {"SPECtotaltblTOP", () => querys.SPECtotalTOP("")}, 
      {"MANtotaltblTOP", () => querys.MANtotalTOP("")}, 
      {"VRMtotaltblBOT", () => querys.VRMtotalBOT("")}, 
      {"PARTtotaltblBOT", () => querys.PARTtotalBOT("")}, 
      {"SPECtotaltblBOT", () => querys.SPECtotalBOT("")}, 
      {"MANtotaltblBOT", () => querys.MANtotalBOT("")}, 
     }; 

     foreach(var kvp in tables) 
     { 
      try 
      { 
       MyDataSet.Tables[kvp.Key].Merge(kvp.Value());//error occurs here 
       SetTxtBox1(String.Format("{0} ==== {1} has been Loaded\r\n", DateTime.Now.ToString(), kvp.Key)); 
      }catch(Exception e) 
      { 
       SetTxtBox1(String.Format("{0} ==== {1} has FAILED\r\n", DateTime.Now.ToString(), kvp.Key)); 
       MessageBox.Show("error:::" + e); 
      } 
     } 
     AutoRunApp(); 

어떤 도움이 될 것입니다.

UPDATE :

을 heres "bunchofquerys"에서 내 쿼리 호출 클래스

public DataTable BotMan(string order) 
    { 

      SqlConnection conn = new SqlConnection(myConnString32); 
      SqlCommand vrm = new SqlCommand(); 
      //BindingSource bindme = new BindingSource(); 
      SqlDataAdapter adapt1 = new SqlDataAdapter(vrm); 
      // DataSet dataSet1 = new DataSet(); 
      DataTable table1 = new DataTable(); 
      try 
      { 
      vrm.Connection = conn; 
      vrm.CommandType = CommandType.StoredProcedure; 
      if (order.Equals("DESC")) 
      { 
       vrm.CommandText = "dbo.TopManual"; 
      } 
      vrm.CommandText = "dbo.BotManual"; 
      vrm.CommandTimeout = 360; 

      vrm.Parameters.AddWithValue("@OrderBy", order); 
      adapt1.Fill(table1); 
      return table1; 
     } 
     catch (Exception e) 
     { 
      MessageBox.Show("eeror::zomg::: " + e); 

     } 
     return table1; 
    } 
+0

DataTable의 자연스러운 컬렉션은 데이터 집합입니다. http://msdn.microsoft.com/en-us/library/aeskbwf7.aspx –

+0

실제로 데이터 세트가 있고 빈 테이블을 추가했습니다. 그러나 데이터 세트의 각 테이블에 쿼리를 추가하는 방법을 잘 모릅니다. – lemunk

+0

현재 foreach (datatable tbl in myDataSet.tables)가 있지만 그 코드 컨텍스트를 통해 반복 할 필요가 있습니다. 구문 – lemunk

답변

2

당신은 이미 DataSet이 말했다. 모든 테이블을 채우는 쉬운 방법은 Merge을 사용하는 것입니다. 이 예에서

, 나는 테이블 이름 사이의 매핑합니다 ( DataSet에있는 테이블의 이름)을 만들고, 그들이 비슷한 스키마와 DataTable을 반환하는 해당 쿼리 기능 (가정, 그리고 DataSetds라는).

Key

DataSet에서 적절한 DataTable를 조회하는 데 사용되며, 그 방법은 Merge DataTable "채우기"위해 사용된다.

var tables = new SortedDictionary<string, Func<DataTable>>() //or use List of Tuples... 
{ 
    {"VRM_TOP", () => querys.TopVRM("DESC")}, 
    {"FooBar_TOP",() => querys.FooBar("DESC")}, 
    {"Something", () => querys.Something("ASC")}, 
}; 

foreach(var kvp in tables) 
    ds.Tables[kvp.Key].Merge(kvp.Value()); 

당신은 라운드 그것을 다른 방법을 당신 DataSet 각 테이블을 반복하고를 통해 적절한 로더 기능을 얻을 수있는 테이블의 TableName.

try/catch 블록을 foreach 루프에 쉽게 추가 할 수 있습니다.

foreach(var kvp in tables) 
{ 
    try 
    { 
     ds.Tables[kvp.Key].Merge(kvp.Value()); 
     SetTxtBox1(String.Format("{0} ==== {1} has ben loaded\r\n", DateTime.Now, kvp.Key)); 
    } 
    ... 
} 
+0

ive에서 솔루션을 사용했는데 같은 entery가 있다고하는 오류가 발생했습니다. 열쇠는 이미 존재하고, 어떤 아이디어가 있습니까? – lemunk

+0

사전에 키를 두 번 추가했을 것입니다. – sloth

+0

안녕, 예치 그것이있었습니다. 그러나 나는 새로운 문제를 가지고 있습니다. 나는 계속 진행되고있는 것을 보여주기 위해 제 질문을 업데이트 할 것입니다. – lemunk