2012-06-11 6 views
0

쿼리가 있습니다 - "SELECT PK1 FROM users";C# sqldataadapter 데이터 테이블 매핑

또한 int 유형의 세 필드가있는 myTable이라는 데이터 테이블이 있습니다.

----------- 
| myTable | 
----------- 
| field1 | 
| field2 | 
| field3 | 
----------- 

내 쿼리에서 반환 된 각 행에 대해, 나는 필드 1과 FIELD3 널 떠나 myTable에 FIELD2에 PK1 값을 넣고 싶습니다.

여기까지 시도한 샘플 코드가 있지만 작동하지 않는 것 같습니다. 대신 새 필드로 myTable 끝에 PK1 필드가 추가됩니다.

class Program 
    { 
     static void Main(string[] args) 
     { 
      string SQL = "SELECT PK1 FROM users"; 
      SqlConnection connection = new SqlConnection([my connection string]); 
      DataTable myTable = new DataTable(); 
      SqlDataAdapter adapter = new SqlDataAdapter(); 

      adapter.SelectCommand = new SqlCommand(SQL, connection); 
      myTable.Columns.Add("field1", typeof(Int32)); 
      myTable.Columns.Add("field2", typeof(Int32)); 
      myTable.Columns.Add("field3", typeof(Int32)); 
      DataTableMapping dataMapping = adapter.TableMappings.Add("myTable", "users"); 
      dataMapping.ColumnMappings.Add("PK1", "field2"); 

      adapter.Fill(myTable); 

      foreach (DataRow row in myTable.Rows) 
      { 
       Console.WriteLine("------------"); 
       foreach (DataColumn column in myTable.Columns) 
       { 
        Console.WriteLine(column.ColumnName + " : " + row[column]); 
       } 
      } 


      Console.ReadKey(); 
     } 
    } 

내 코드에 문제가 있습니까? 아니면 다른 방법으로 필드를 매핑 할 수 있습니까?

이것은 주어진 위치에 값을 삽입하는 대신 필드 이름을 매핑하는 것이 이상적 일 수 있으므로이 질문의 단순한 예입니다.

+0

왜 'DataTable'을 사용하고 있습니까? –

+1

나는 데이터를 메모리에 저장하고 두 번째 DB에 지속하기 전에 더 조작 할 수 있기를 원하기 때문에. 더 좋은 제안이 있습니까? – user469453

+0

나는 이것이 내 첫 번째 C# 프로젝트이므로 모든 팁/대안이 환영받는 것 이상을 의미한다. – user469453

답변

0

나는 그것이 당신의 요구 사항이라면이 접근법에는 아무런 문제가 없다고 생각합니다. 쿼리를 다음과 같이 변경하면 매핑이 필요하지 않습니다.

string SQL = "SELECT PK1 as field2 FROM users"; 
+0

안녕하세요 Asif, 고마워요 - 그러나 문제는 내가 PK1의 값을 field2에 삽입하고 싶습니다. 그러나 내 코드는 세 필드를 모두 null로두고 내 DataTable – user469453

+0

끝 부분에 PK1의 새 필드를 추가하여 업데이트 된 답변을 확인합니다. –

+0

감사합니다. Asif - 해결 방법으로 사용하면 좋습니다. 감사 – user469453

0

당신이 말하고 있기 때문에 그것은 열을 추가하고 있습니다. datamappingColumn 기능이나 table.column.add 기능을 둘 다 사용하지 않아야하며 중복되거나 필요하지 않을 수도 있습니다.

당신은 table.column.add (를)

당신이 테이블에 설정된 열에 "바인딩"열 이름, 당신은 당신이 원하는 순서를 지정합니다 방법의 예입니다 떠날 그래서 경우 표시하려면, 큰 따옴표를 비워 두거나 NULL을 사용하여 null로 설정할 수 있습니다.

this.table.AutoSetDataBoundColumnHeaders = true; this.table.SetDataBinding (table, null, "PK1", null);

+0

DataTable에 이러한 방법 중 하나가없는 것 같습니까? – user469453