2010-12-03 93 views
0

继承我有这样的函数在一个类中定义:控件不从其他类

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时,它也显示错误...

C有人告诉我最新情况怎么样?

回答

1

假设您的文本框是在MFDBAnayser类中定义的,您仍然无法在GetAllDataBaseNames函数中访问它们。 GetAllDataBaseNames是一个静态函数,因此它将无法访问实例变量,如文本框或其他控件。

0

验证txtHost的修饰符是否也受保护或公开。

0

U无法获取另一个类中表单的值。尝试使用参数。或者使用properties {get ;set;}来获取这些值。我想你可以使用一些属性并分配文本框的值。如果你在WinForms中做,你可以使用静态变量。但是在web的情况下,你必须传递参数。