Элементы управления не наследуются в winforms - PullRequest
0 голосов
/ 09 декабря 2010

У меня есть функция типа возвращаемых данных

public DataTable GetAllPrimaryKeyTables(string ConnectionString)
{ 
    // Create the datatable 
    DataTable dtListOfPrimaryKeyTables = new DataTable("tableNames");

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

    // put your SqlConnection and SqlCommand into using blocks! 
    using(SqlConnection sConnection = new SqlConnection(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);
            //using(StringWriter sw = new StringWriter())
            //{
            //    dtListOfPrimaryKeyTables.WriteXml(sw);
            //    sw.WriteLine();
            //    result = sw.ToString();
            //}
        }
        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 DataTable RunAnalysis(string ConnectionString)
    {
        return GetAllPrimaryKeyTables(ConnectionString);
    }

В IMFDBAnalyserPlugin у меня есть

namespace MFDBAnalyser
{
    public interface IMFDBAnalyserPlugin
    {
        DataTable RunAnalysis(string ConnectionString);
    }

и на фоне основного проекта у меня

private void btnStartAnalysis_Click(object sender, EventArgs e)
{
    SqlConnectionStringBuilder objConnectionString = new SqlConnectionStringBuilder();
    objConnectionString.DataSource = txtHost.Text;
    objConnectionString.UserID = txtUsername.Text;
    objConnectionString.Password = txtPassword.Text;
    string[] arrArgs = {objConnectionString.ConnectionString};

    string assemblyName = "PrimaryKeyChecker.dll";
    Assembly assembly = Assembly.LoadFrom(assemblyName);
    Type local_type = assembly.GetType("PrimaryKeyChecker.PrimaryKeyChecker");
    MethodInfo objMI = local_type.GetMethod("RunAnalysis");
    ConstructorInfo ci = local_type.GetConstructor(Type.EmptyTypes);
    object responder = ci.Invoke(null);
    object response = objMI.Invoke(responder, arrArgs);

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

Надеюсь, вопрос частично понятен вам, ребята ... Он должен дать список всех таблиц при отладке, но он не переносит сетку данных dgResultView, чтобы предоставить ему источник данных ...

1 Ответ

1 голос
/ 09 декабря 2010

Это не имеет ничего общего с наследованием;похоже, вы ловите и регистрируете исключения:

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

Я бы начал с поиска там;Скорее всего, что-то бросает и говорит вам, почему ... Если бы я должен был догадаться, похоже, что вам не хватает:

sConnection.Open();

Тот факт, что что-либо возвращается мне говоритэто всего лишь исключение.

Лично Я бы просто позволил пузырю непредвиденное исключение в UI, и позволил бы UI реагировать, регистрируя его и показывая соответствующий#fail page.

Также, если возможно, приведите плагин к интерфейсу:

string assemblyName = "PrimaryKeyChecker.dll";
Assembly assembly = Assembly.LoadFrom(assemblyName);
Type local_type = assembly.GetType("PrimaryKeyChecker.PrimaryKeyChecker");
IMFDBAnalyserPlugin analyser =
   (IMFDBAnalyserPlugin)Activator.CreateInstance(local_type);
DataTable response = analyser.RunAnalysis(objConnectionString.ConnectionString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...