首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于保护级别而无法访问的地址?

由于保护级别而无法访问的地址?
EN

Stack Overflow用户
提问于 2015-01-18 15:32:23
回答 2查看 427关注 0票数 0

在某个地方,由于保护级别,cb.Items.AddRange(数据库)是不可访问的,但是所有变量都被设置为public。这里写着:

C:\Users\Shulz\exer3\showdb.cs\MySql\Oliver exer3\showdb.cs(77,18):error CS0122:‘`Sys CS0122由于其保护级别C:\PROGRA~2\MONO-3~1.3\lib\mono\4.5\System.Windows.Forms.dll (与先前错误相关的sy mbol的位置)而无法访问:1错误,0警告

代码语言:javascript
复制
    public ComboBox cb;
    public Label label;
    public object[] databases;

    public MForm() {

       string connectionString =
          "Server=localhost;" +
          "Database=information_schema;" +
          "User ID=root;" +
          "Password=root;" +
          "Pooling=false";
       IDbConnection dbcon;
       dbcon = new MySqlConnection(connectionString);
       dbcon.Open();
       IDbCommand dbcmd = dbcon.CreateCommand();

        string sql = "SELECT COUNT(*) as count FROM information_schema.SCHEMATA"; //count the databases(string) and names it count
        dbcmd.CommandText = sql;                        //sends the string to sql
        IDataReader reader = dbcmd.ExecuteReader();     //assign the function to reader
        reader.Read();                                  //uses its getter(Read)
        int count = Convert.ToInt32(reader["count"]);   //converts the "count"(column) to integer

        reader.Close();
        reader = null;
        dbcmd.Dispose();
        dbcmd = null;



        dbcmd = dbcon.CreateCommand();
        sql = "show databases";
        dbcmd.CommandText = sql;
        reader = dbcmd.ExecuteReader();

        var databases = new List<string>();

        var excludeDatabases = new List<string> { "information_schema","sakila","enrollmentsystem","mysql","world","performance_schema" };

        while(reader.Read())
        {
            var data = reader["Database"].ToString();

            if(!excludeDatabases.Contains(data)){
            databases.Add(data);
            }
        }

       reader.Close();
       reader = null;
       dbcmd.Dispose();
       dbcmd = null;
       dbcon.Close();
       dbcon = null;




        Text = "School Year";
        Size = new Size(340, 240);

        cb = new ComboBox();
        cb.Parent = this;
        cb.Location = new Point(50, 30);

        cb.Items.AddRange(databases);

        cb.SelectionChangeCommitted += new EventHandler(OnChanged);

        label = new Label();
        label.Location = new Point(80, 170);
        label.Parent = this;
        label.Text = "...";

        CenterToScreen();




    }

    void OnChanged(object sender, EventArgs e) {
         ComboBox combo = (ComboBox) sender;
         label.Text = combo.Text;
    }
}
EN

回答 2

Stack Overflow用户

发布于 2015-01-18 15:47:38

List<string>不是object[],因此它与AddRange不兼容,您将得到一个编译器错误。

在.net上,此错误是:

'System.Windows.Forms.ComboBox.ObjectCollection.AddRange(object[])'的最佳重载方法匹配有一些无效的参数 参数1:无法从'System.Collections.Generic.List<string>'转换为'object[]'

Mono似乎有另一个内部重载,需要一个IList。如果这个过载是可以访问的,它将与你的呼叫相匹配。因此,建议的错误原因有点不同。

一般来说,编译器首先注意到没有匹配的重载。为了帮助你,它试图猜测可能的原因。这种猜测可能会受到内部方法存在的影响。

票数 1
EN

Stack Overflow用户

发布于 2015-01-18 23:44:19

我想出了解决这个问题的办法。因此,我所做的是db.ToArray(),然后对我的数据库进行分析,这是一个对象。就这么简单。

代码语言:javascript
复制
    var db = new List<string>();

    var excludeDatabases = new List<string> { "information_schema","sakila","enrollmentsystem","mysql","world","performance_schema" };

    while(reader.Read())
    {
        var data = reader["Database"].ToString();

        if(!excludeDatabases.Contains(data)){
        db.Add(data);

        }
    }

   reader.Close();
   reader = null;
   dbcmd.Dispose();
   dbcmd = null;
   dbcon.Close();
   dbcon = null;




    Text = "School Year";
    Size = new Size(340, 240);

    cb = new ComboBox();
    cb.Parent = this;
    cb.Location = new Point(50, 30);


    databases = db.ToArray();
    cb.Items.AddRange(databases);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28011432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档