2010-12-07 3 views
0

데이터 테이블에 기본 키가있는 테이블의 목록을 반환하는 함수가 있지만 이제는 반환 형식으로 테이블 목록을 가져와야합니다.DataTable 반환 형식을 문자열로 변환해야합니다.

public DataTable GetAllPrimaryKeyTables 
    (string localServer, string userName, string password, string selectedDatabase) 
{ 

    // Create the datatable 
    DataTable dtListOfPrimaryKeyTables = new DataTable("tableNames"); 

    SqlConnectionStringBuilder objConnectionString = new SqlConnectionStringBuilder(); 
    objConnectionString.DataSource = localServer; ; 
    objConnectionString.UserID = userName; 
    objConnectionString.Password = password; 
    objConnectionString.InitialCatalog = selectedDatabase; 

    // Query to select primary key tables. 
    string selectPrimaryKeyTables = @"SELECT 
              TABLE_NAME 
              AS 
              TABLES 
             FROM 
              INFORMATION_SCHEMA.TABLE_CONSTRAINTS 
             WHERE 
              CONSTRAINT_TYPE = 'PRIMARY KEY' 
            ORDER BY 
              TABLE_NAME"; 

    // put your SqlConnection and SqlCommand into using blocks! 
    using(SqlConnection sConnection = new SqlConnection(objConnectionString.ConnectionString)) 
    using(SqlCommand sCommand = new SqlCommand(selectPrimaryKeyTables, sConnection)) 
    { 
     try 
     { 
      // Create the dataadapter object 
      SqlDataAdapter sDataAdapter = new SqlDataAdapter(selectPrimaryKeyTables, sConnection); 

      // Fill the datatable - no need to open the connection, the SqlDataAdapter will do that all by itself 
      // (and also close it again after it is done) 
      sDataAdapter.Fill(dtListOfPrimaryKeyTables); 

     } 
     catch(Exception ex) 
     { 
      //All the exceptions are handled and written in the EventLog. 
      EventLog log = new EventLog("Application"); 
      log.Source = "MFDBAnalyser"; 
      log.WriteEntry(ex.Message); 
     } 
    } 

    // return the data table to the caller 
    return dtListOfPrimaryKeyTables; 
} 

를하지만 지금 내가 시도 ...이 논리는 아래의 함수를 호출 할 싶어하지만 그렇게하지 다음과 같이

내 방법입니다.

너희들이 좀 도와 주시겠습니까

public class PrimaryKeyChecker : IMFDBAnalyserPlugin 
{ 
    public string RunAnalysis(string ConnectionString) 
    { 
     return "string"; 
    } 
} 

은 내가 RunAnalysis 방법에 포함되는 문자열 유형과 전체 논리 함수의 returntype의를 조정해야합니다!

+0

마찬가지로 서버에서 테이블을 바인딩하고 데이터 테이블에 저장하고 데이터 격자에 채우는 것 같습니까? – Srivastava

+0

시도해 보셨습니까? – TalentTuner

답변

0

DataTable을 문자열로 변환하려면 DataTable에서 자체를 Xml에 쓰고 Xml을 문자열로 변환하는 기능을 사용할 수 있습니다.

0
return (from rowItem in dt.AsEnumerable() 
       select Convert.ToString(rowItem["TABLES"])).ToList(); 

편집 : 테이블 이름을 IList 컬렉션으로 반환합니다.

0

나는 100 %는 질문을 확실히 이해하지,하지만 당신이 할 필요가 있음을 표시 중 하나

  1. 당신이있어 코드를 실행하고 문자열
  2. 팩터로를 변환하려면 코드를 데이터 보관함에 넣고 DataSets/DataTables의 사용을 생략하고 바로 다시 전달하십시오. 이 될 수 있도록 쉽게 검색 목록을 반환

    public string RunAnalysis(string localServer, string userName, string password, string selectedDatabase) 
    { 
        DataTable dt = GetAllPrimaryKeyTables(localServer, userName, password, selectedDatabase); 
        StringBuilder sb = new StringBuilder(); 
        foreach (DataRow dr in dt.Rows) 
        { 
         sb.AppendLine(dr.IsNull(0) ? "" : dr[0].ToString()); 
        } 
        return sb.ToString(); 
    } 
    

    나는 적어도 추천 할 것입니다 그러나 :

당신이 뭔가를 쓸 수, 당신의 PrimaryKeyChecker 코드를 적응하고 테이블의 문자열을 반환하려면 필터링되고 UI에 표시하기 위해 사용됩니다.

귀하의 질문에 완전히 오해 한 경우 사과드립니다.

0
using System.Linq; 
... 

public string GetAllPrimaryKeyTableNames(string localServer, string userName, string password, string selectedDatabase) { 
    DataTable table = GetAllPrimaryKeyTables(localServer, userName, password, selectedDatabase); 

    return string.Join(",", table.AsEnumerable().Select(r => r.ItemArray[0]).ToArray()); 
} 

이렇게하면 테이블 이름이 쉼표로 구분 된 문자열이 반환됩니다.

편집 나는 당신의 질문에 참조

당신은 RunAnalysis라는 이름의 방법이있다. 내 대답에서 메서드 이름을 원하는대로 변경하고 매개 변수도 자유롭게 변경하십시오. 중요한 부분은 문자열입니다 .LINQ와 함께 사용하십시오.

관련 문제