C# 不一致的可访问性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/10069538/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Inconsistent accessibility
提问by user1312412
I am getting the following error
我收到以下错误
Inconsistent accessibility: parameter type 'Db.Form1.ConnectionString' is less accessible than method 'Db.Form1.BuildConnectionString(Db.Form1.ConnectionString)'
不一致的可访问性:参数类型“Db.Form1.ConnectionString”的可访问性低于方法“Db.Form1.BuildConnectionString(Db.Form1.ConnectionString)”
//Name spaces
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic;
using System.Collections;
using System.Diagnostics;
using System.Data.OleDb;
using System.IO;
using System.Drawing.Printing;
//
namespace Db
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void SetBusy()
{
this.Cursor = Cursors.WaitCursor;
Application.DoEvents();
}
public void SetFree()
{
this.Cursor = Cursors.Default;
Application.DoEvents();
}
//connection string into parts
struct ConnectionString
{
public string Provider;
public string DataSource;
public string UserId;
public string Password;
public string Database;
}
//Declare
public string BuildConnectionString(ConnectionString connStr) ------> getting error here
{
string[] parts = new string[5];
parts[0] = "Provider=" + connStr.Provider;
parts[1] = "Data Source=" + connStr.DataSource;
parts[2] = "User Id=" + connStr.UserId;
parts[3] = "Password=" + connStr.Password;
parts[4] = "Initial Catalog=" + connStr.Database;
return string.Join(";", parts);
}
// settings
public bool IsValidConnectionForPrinting()
{
SetBusy();
ConnectionString connStr = new ConnectionString();
connStr.Provider = cboProvider.Text;
connStr.DataSource = cboDataSource.Text;
connStr.UserId = txtUserId.Text;
connStr.Password = txtPassword.Text;
connStr.Database = cboDatabase.Text;
//connection string to database
string connectionString = BuildConnectionString(connStr);
OleDbConnection conn = new OleDbConnection(connectionString);
try
{
conn.Open();
OleDbCommand cmd = conn.CreateCommand;
cmd.CommandType = CommandType.TableDirect;
cmd.CommandText = "vw_pr_DL";
cmd.ExecuteScalar();
cmd.CommandText = "vw_pr_VR";
cmd.ExecuteScalar();
//cmd.CommandText = "vw_pr_VR"
//cmd.ExecuteScalar()
conn.Close();
}
//Exception messages
catch (Exception ex)
{
SetFree();
if (ex.Message.StartsWith("Invalid object name"))
{
MessageBox.Show(ex.Message.Replace("Invalid object name", "Table or view not found"), "Connection Test");
}
else
{
MessageBox.Show(ex.GetBaseException().Message, "Connection Test");
}
return false;
}
SetFree();
return true;
}
// when user click testbutton
// 当用户点击测试按钮时
private void btnConnTest_Click(object sender, EventArgs e)
{
if (IsValidConnectionForPrinting())
{
MessageBox.Show("Connection succeeded", "Connection Test");
}
}
回答by Coincoin
Your ConnectionStringtype is not public, yet, a public method of a public class is using it as a parameter. You must also make the type public, for instance:
您的ConnectionString类型public还不是,公共类的公共方法将其用作参数。您还必须创建 type public,例如:
// If it's a class
public class ConnectionString { ... }
回答by Malice
As described here, classes and structs are private by default if no access modifier is specified. Where you have defined your struct as:
如上所述这里,如果没有指定访问修饰符的类和结构是专用默认情况下。您已将结构定义为:
struct ConnectionString
{
public string Provider;
public string DataSource;
public string UserId;
public string Password;
public string Database;
}
you need to instead define it as:
您需要将其定义为:
public struct ConnectionString
{
public string Provider;
public string DataSource;
public string UserId;
public string Password;
public string Database;
}

