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

У меня есть такая функция, определенная в одном классе:

using System;
using System.Collections.Generic;

using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;

using System.Windows.Forms;
using System.Configuration;
using System.Diagnostics;
using MFDBAnalyser;

namespace MFDBAnalyser

{

    public class DataAccessMaster:MFDBAnalyser

    {


        //        /// <summary>
        //        /// This function gets the list of all the databases present in the local server.
        //        /// </summary>
        //        /// <returns></returns>


        public static DataSet GetAllDataBaseNames()

        {

            SqlConnectionStringBuilder objConnectionString = new SqlConnectionStringBuilder();
            objConnectionString.DataSource = txtHost.Text;
            objConnectionString.UserID = txtUsername.Text;
            objConnectionString.Password = txtPassword.Text;

            SqlConnection sConnection = new SqlConnection(objConnectionString.ConnectionString);

            //If connected then give this message to user
            lblMessage.Visible = true;
            lblMessage.Text = "You are connected to the SQL Server....";

            try
            {
                //To Open the connection.
                sConnection.Open();

                //Query to select the list of databases.
                string selectDatabaseNames = @"SELECT 
                                                    NAME 
                                                 FROM 
                                                    [MASTER]..[SYSDATABASES]";

                //Create the command object
                SqlCommand sCommand = new SqlCommand(selectDatabaseNames, sConnection);

                //Create the data set 
                DataSet sDataset = new DataSet("master..sysdatabases");

                //Create the dataadapter object
                SqlDataAdapter sDataAdapter = new SqlDataAdapter(selectDatabaseNames, sConnection);
                sDataAdapter.TableMappings.Add("Table", "master..sysdatabases");

                //Fill the dataset
                sDataAdapter.Fill(sDataset);

                //Bind the database names in combobox
                DataViewManager dsv = sDataset.DefaultViewManager;

            }
            catch(Exception ex)
            {
                //All the exceptions are handled and written in the EventLog.
                EventLog logException = new EventLog("Application");
                logException.Source = "MFDBAnalyser";
                logException.WriteEntry(ex.Message);
                MessageBox.Show("Login Failed!!", "Error Occured");
            }
            finally
            {
                //If connection is not closed then close the connection
                if(sConnection.State != ConnectionState.Closed)
                {
                    sConnection.Close();
                }
            }
        }
    }
}

А потом я вызвал эту функцию в другом классе, например:

public void BindDBDropDown()

        {

 DataSet dsTablesWithoutForeignKeys = default(DataSet);

            try
            {
                //The function GetAllForeignKeyTables() is called from the class PluginManager.
                dsTablesWithoutForeignKeys = DataAccessMaster.GetAllDataBaseNames();

                cmbDatabases.DisplayMember = "TABLE_NAME";
                cmbDatabases.ValueMember = "";
                cmbDatabases.DataSource = dsTablesWithoutForeignKeys.Tables["master..sysdatabases"];
            }
            catch(Exception ex)
            {
                //All the exceptions are handled and written in the EventLog.
                EventLog logException = new EventLog("Application");
                logException.Source = "MFDBAnalyser";
                logException.WriteEntry(ex.Message);
            }
        }

Но появляется сообщение об ошибке: txtHost etx не существует, и когда я изменяю защищенный модификатор класса designer.cs на public, то также отображается ошибка ...

Может кто-нибудь сказать мне, что происходит ??

Ответы [ 3 ]

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

Предполагая, что ваши текстовые поля определены в классе MFDBAnayser, вы все равно не сможете получить к ним доступ в своей функции GetAllDataBaseNames.GetAllDataBaseNames является статической функцией и поэтому не сможет получить доступ к переменным экземпляра, таким как текстовые поля или другие элементы управления.

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

U не может получить значения для формы в другом классе.Попробуйте использовать параметры.Или используйте properties {get ;set;} для доступа к значениям.Я думаю, что вы можете использовать некоторые свойства и назначить значение текстового поля.Если вы делаете в winforms, это нормально, что вы можете использовать статические переменные. Но в случае web вы должны передать аргументы.

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

Убедитесь, что модификатор txtHost также защищен или общедоступен.

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