在某个地方,由于保护级别,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警告
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;
}
}发布于 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。如果这个过载是可以访问的,它将与你的呼叫相匹配。因此,建议的错误原因有点不同。
一般来说,编译器首先注意到没有匹配的重载。为了帮助你,它试图猜测可能的原因。这种猜测可能会受到内部方法存在的影响。
发布于 2015-01-18 23:44:19
我想出了解决这个问题的办法。因此,我所做的是db.ToArray(),然后对我的数据库进行分析,这是一个对象。就这么简单。
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);https://stackoverflow.com/questions/28011432
复制相似问题