Необходимо преобразовать тип возвращаемых данных в строку - PullRequest
0 голосов
/ 07 декабря 2010

У меня есть функция для возврата списка таблиц с первичным ключом в таблицу данных, но теперь необходимо получить список таблиц в виде возвращаемого типа строки.

Мой метод следующий:

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

Не могли бы вы, ребята, помогите мне !!!

Ответы [ 4 ]

0 голосов
/ 07 декабря 2010
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());
}

Это вернет строку, содержащую имена вашей таблицы, разделенные запятой.

EDIT

Я вижу, что в вашем вопросе у вас есть метод с именем RunAnalysis.,Не стесняйтесь изменить имя метода в моем ответе на то, что вам нужно, а также параметры.Важной частью является строка. Присоединяйтесь к LINQ.

0 голосов
/ 07 декабря 2010
return (from rowItem in dt.AsEnumerable()
               select Convert.ToString(rowItem["TABLES"])).ToList();

Редактировать: возвращает имена таблиц в виде коллекции IList.

0 голосов
/ 07 декабря 2010

Не уверен, что я на 100% понимаю ваш вопрос, но, похоже, все, что вам нужно сделать, это либо:

  1. Запустите полученный код и преобразуйте его в строку
  2. Измените код на устройства чтения данных и просто передайте его обратно напрямую, не используя DataSets / DataTables.

Чтобы адаптировать код PrimaryKeyChecker и вернуть строку таблиц, вы можете написать что-то вроде этого:

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

Однако я бы рекомендовал, по крайней мере, вернуть список, чтобы его можно было легко искать, фильтровать и использовать для представления в пользовательском интерфейсе.

Я прошу прощения, если ясовершенно неправильно понял ваш вопрос.

0 голосов
/ 07 декабря 2010

Чтобы преобразовать DataTable в строку, вы можете использовать способность DataTable записать себя в Xml, а затем преобразовать Xml в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...