2010-12-07 7 views
0

Ich habe eine Funktion zum Zurückgeben der Liste der Tabellen mit Primärschlüssel in einer Datentabelle, aber jetzt ist es erforderlich, die Tabellenliste in der Zeichenfolge Rückgabetyp abrufen.Müssen den DataTable Rückgabetyp in Zeichenfolge konvertieren

Meine Methode ist wie folgt:

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; 
} 

Aber jetzt will ich diese Logik in der Funktion unten genannt zu werden ... Ich habe versucht, aber es ist nicht geschehen.

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

Ich brauche den Rückgabetyp der Funktion String-Typ und die gesamte Logik einzustellen in der RunAnalysis Methode

würde euch bitte helfen Sie mir abgedeckt werden !!!

+0

Wie ich die Tabelle vom Server binden und in einer Datentabelle speichern und dann in einem Datagrid befüllen – Srivastava

+0

Bitte zeigen Sie uns, was Sie versucht haben? – TalentTuner

Antwort

0

Um eine DataTable in eine Zeichenfolge zu konvertieren, können Sie die Fähigkeit der DataTable verwenden, sich in Xml zu schreiben und dann die Xml in eine Zeichenfolge zu konvertieren.

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

Bearbeiten: gibt Ihre Tabellennamen als IList-Auflistung zurück.

0

nicht sicher, ob ich 100% verstehe Ihre Frage, aber es scheint, dass alles, was Sie tun müssen, ist entweder:

  1. Führen Sie den Code, den Sie haben, und wandeln es in einen String
  2. Umgestalten der Code in Datenreader ein und geben Sie ihn direkt zurück, ohne DataSets/DataTables zu verwenden.

Ihre PrimaryKeyChecker Code anzupassen und eine Reihe von Tabellen zurückgeben, können Sie so etwas schreiben könnte:

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(); 
} 

Jedoch habe ich zumindest empfehlen würde, eine Liste zurückkehren, so dass es leicht durchsucht werden kann und gefiltert und für die Präsentation auf der Benutzeroberfläche verwendet.

Ich entschuldige mich, wenn ich Ihre Frage vollständig missverstanden habe.

0

Dies wird eine Zeichenfolge zurückgeben, die Ihre Tabellennamen getrennt durch ein Komma enthält.

EDIT

ich in Ihrer Frage sehen müssen Sie Ihre Methode mit dem Namen RunAnalysis. Fühlen Sie sich frei, den Methodennamen in meiner Antwort zu ändern, was auch immer Sie benötigen, sowie die Parameter. Der wichtige Teil ist die Zeichenfolge. Verbinden Sie sich mit LINQ.