2015-05-11 3 views
-3

Я следил за учебником this, и я пытаюсь использовать базу данных Access в консольном приложении C#.Ссылка на объект требуется для нестатического поля

У меня есть 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(); 
     } 
    } 
} 

И я получаю «Ссылка на объект требуется для нестатическая поля, метода или свойства«accesstest.MainClass. е '». Я пытаюсь удалить статический, но не работаю, скажем, Main должен pe static.

Любые идеи для меня? Спасибо !

+3

Make '' f' статический статический Ac f = новый Ac(); '. –

+0

Большое спасибо! –

+0

Или переместите его внутри метода 'Main'. –

ответ

0

Вы не можете ссылаться на переменную экземпляра f без ссылки на объект в статическом контексте.

Согласно MSDN, метод Main - это точка входа программы; там начинается и заканчивается программный контроль.

  • Главная заявлена ​​внутри класса или структуры. Главное должно быть статичным, и оно не должно быть общедоступным. (В более раннем примере он получает доступ по умолчанию для частного доступа.) Вложенный класс или структура не обязательно должен быть статичным.
  • Main может иметь тип типа void или int.
  • Метод Main может быть объявлен с параметром string [] или без него, который содержит аргументы командной строки. При использовании Visual Studio для создания приложений Windows Forms вы можете добавить параметр вручную или использовать класс среды для получения аргументов командной строки. Параметры считываются как аргументы командной строки с нулевой индексацией. В отличие от C и C++, имя программы не рассматривается как первый аргумент командной строки.

Suggested Reading

+0

Да, я нашел все это, но я не мог понять, что он означает проблему со статикой. Я понял проблему с Main, это был просто пример, который я показывал несколько раз перед публикацией. Спасибо ! –

+0

'Environment.GetCommandLineArgs()' фактически содержит исполняемый файл в качестве первого параметра: https://msdn.microsoft.com/en-us/library/system.environment.getcommandlineargs%28v=vs.110%29.aspx –

0

Попробуйте это:

1) делают "класса Ас" общественность.

2) Сделать это просто

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

3) называют MainClass где-то еще

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

, если это работает, улучшить качество кода

Смежные вопросы