2013-07-25 2 views
2

Я новичок в C#, и я начал учиться только вчера.C# - общедоступное глобальное подключение к SQL Server 2005

Я создал класс для подключения к SQL Server:

namespace Exchange_Ofiice.Classes 
{ 
    public class sqlConn 
    { 
     public void connectionMethod() 
     { 
      SqlConnection myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;"); 
      try 
      { 
       myConnection.Open(); 
      } 
      catch 
      { 
       MessageBox.Show("Невозможно подключиться к Базе данных. Пожалуйста обратитесь к программистам!", "Ошибка подключения к Базе данных", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      finally 
      { 
       myConnection.Close(); 
      }   
     } 
    } 
} 

и другой класс для пользователя аутентификации:

namespace Exchange_Ofiice.Classes 
{ 
    public class auth:sqlConn 
    { 

     public void authMethod() 
     { 
      SqlCommand myCommand = new SqlCommand("Command String", myConnection);       
     } 

    } 
} 

Как получить (использование) результат соединения SQL (myConnection) во втором классе ?

P.S. line SqlCommand myCommand = new SqlCommand("Command String", myConnection); не работает.

P.S.S. Извините, если у меня ошибка, мой английский не идеален.

+1

Лучше всего использовать соединение * string * вокруг приложения, но не делайте этого с подключением. Там, где вам нужно соединение, вы должны создать новый, «открыть» его, использовать его для текущей части работы и «закрыть» (или, что то же самое, использовать его внутри блока 'using'). Не пытайтесь обмениваться объектами подключения. –

+0

@Damien_The_Unbeliever ok – Abdukhafiz

ответ

1

Попробуйте это. Таким образом, у вас есть SQLConnection в классе, а не в функции. Если вы объявите что-то в функции, он будет доступен только в этой функции.

public class sqlConn 
{ 
    public SqlConnection myConnection; 
    public void connectionMethod() 
    { 
     myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;"); 
     try 
     { 
      myConnection.Open(); 
     } 
     catch 
     { 
      MessageBox.Show("Невозможно подключиться к Базе данных. Пожалуйста обратитесь к программистам!", "Ошибка подключения к Базе данных", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
     finally 
     { 
      myConnection.Close(); 
     } 
    } 
} 

О вы, возможно, захотите рассмотреть вопрос о создании SQLConnection частного

private SqlConnection myConnection; 

А затем сделать функцию для получения значения.

public SqlConnection GetConnection() 
    { 
     return myConnection; 
    } 

А в другом классе будет:

SqlCommand myCommand = new SqlCommand("Command String", GetConnection()); 
1

Прежде всего, соединение должно быть открытым полем вашего класса, не работает переменным. И, во-вторых, вы, наконец, закрываете свое соединение, поэтому у вас нет шансов заставить его работать позже.

public class sqlConn 
{ 
     public SqlConnection myConnection = new SqlConnection("user id=ID;password=PASS;server=SERVER;database=DB;"); 

     public void connectionMethod() 
     {   
      try 
      { 
       myConnection.Open(); 
      } 
      catch 
      { 
       //Here goes error handling... 
      }     
    } 
} 

И, конечно, в вашем authMethod вы должны сделать проверку на состояние соединения, чтобы предотвратить исключения, если соединение не был инициализирован.

Кроме того, как хорошая практика, убедитесь, что вы реализуете интерфейс IDisposable (http://msdn.microsoft.com/en-us/library/system.idisposable.aspx) для вашего класса соединений, в противном случае вы можете иметь некоторые проблемы позже.

+0

Спасибо. Я понял свою ошибку. – Abdukhafiz

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