C# 非静态字段需要对象引用

C# 非静态字段需要对象引用,c#,static,C#,Static,我已经学习了本教程,并尝试在C#控制台应用程序中使用Access数据库 我有两门课: class Ac { OleDbConnection connection; OleDbCommand command; private void ConnectTo() { connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.15.0;D

我已经学习了本教程,并尝试在C#控制台应用程序中使用Access数据库

我有两门课:

class Ac
    {
        OleDbConnection connection;
        OleDbCommand command;

        private void ConnectTo()
        {
            connection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.15.0;Data Source=D:\Info\csharp\socket\ef\accesstest\accesstest\bin\Debug\Database.accdb;Persist Security Info=False");
            command = connection.CreateCommand();
        }

        public Ac()
        {
            ConnectTo();
        }

        public void Insert(string a, string b)
        {
            try
            {
                command.CommandText = "INSERT INTO Persons (nName, nNamee) VALUES (\"" + a + "\", \"" + b + "\");";
                command.CommandType = System.Data.CommandType.Text;
                connection.Open();

                command.ExecuteNonQuery();
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
            }
        }
    }
以及

我得到“非静态字段、方法或属性'accesstest.MainClass.f'需要对象引用”。 我试图从中移除静电,但不起作用,说主设备必须pe静电


对我有什么想法吗?谢谢大家!

在静态上下文中,如果没有对象引用,就不能引用实例变量f

根据MSDN,主要方法是程序的入口点;它是程序控制开始和结束的地方

  • Main在类或结构中声明。Main必须是静态的,不应该是公共的。(在前面的示例中,它接收private的默认访问。)封装类或结构不要求是静态的
  • Main可以具有void或int返回类型
  • 可以使用或不使用包含命令行参数的string[]参数来声明Main方法。使用Visual Studio创建Windows窗体应用程序时,可以手动添加参数,或者使用环境类获取命令行参数。参数被读取为零索引命令行参数。与C和C++不同,程序的名称不被当作第一个命令行参数。
试试这个:

1) 公开“Ac级”

2) 简单点

    public string whateverFunction()
    {
    f.Insert("ab", "ac"); 
    return "OK";}
    }
3) 给别的地方的MainClass打电话

    accesstest.MainClass obj = new accesstest.MainClas(); 
    string result = obj.whateverFunction();

如果有效,则提高代码的质量

Make
f
static
static Ac f=new Ac()
。或者将其移动到
Main
方法中。我想说,将
f
的实例创建移动到
Main
中会更有意义-它似乎在其他任何地方都没有任何用途。好的,我会的。谢谢你的建议。是的,我找到了所有这些,但我不明白他说的静电问题是什么意思。我理解Main的问题,这只是一个例子,说明我在发布之前搜索了很多次。谢谢大家!<代码>环境。GetCommandLineArgs()实际上包含可执行文件作为第一个参数:
    accesstest.MainClass obj = new accesstest.MainClas(); 
    string result = obj.whateverFunction();