非静态字段需要对象引用

时间:2015-05-11 17:47:02

标签: c# static

我遵循了this教程,尝试在C#控制台应用程序中使用Access数据库。

我有2个班级:

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();
                }
            }
        }
    }

而且,

namespace accesstest
{
    public class MainClass
    {
        Ac f = new Ac();

        public static void Main()
        {
            f.Insert("ab", "ac");

            Console.WriteLine("\n\nPress enter to close...");
            Console.ReadLine();
        }
    }
}

我得到"非静态字段,方法或属性&accessae.MainClass.f'"需要对象引用。 我尝试去除静电,但不能正常工作,比如Main必须静电。

对我有什么想法?谢谢!

2 个答案:

答案 0 :(得分:0)

在静态上下文中,您无法在没有对象引用的情况下引用实例变量f。

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

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

Suggested Reading

答案 1 :(得分:0)

试试这个:

1)公开“等级Ac”。

2)简单明了

    public string whateverFunction()
    {
    f.Insert("ab", "ac"); 
    return "OK";}
    }

3)在其他地方调用MainClass

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

如果可行,请提高代码质量