Looking for c# Answers? Try Ask4KnowledgeBase
Looking for c# Keywords? Try Ask4Keywords

C# Language Использование утверждений и подключений к базам данных


пример

Ключевое слово using гарантирует, что ресурс, определенный внутри оператора, существует только в пределах самой инструкции. Любые ресурсы, определенные в инструкции, должны реализовывать интерфейс IDisposable .

Они невероятно важны при работе с любыми соединениями, реализующими интерфейс IDisposable поскольку он может гарантировать, что соединения не только закрыты должным образом, но и освобождаются из-за того, что их ресурсы освобождены после того, как оператор using выходит за рамки.

Общие классы данных IDisposable

Многие из следующих относятся к классам, связанным с данными, которые реализуют интерфейс IDisposable и являются идеальными кандидатами для using оператора:

  • SqlConnection , SqlCommand , SqlDataReader и т. Д.
  • OleDbConnection , OleDbCommand , OleDbDataReader и т. Д.
  • MySqlConnection , MySqlCommand , MySqlDbDataReader и т. Д.
  • DbContext

Все они обычно используются для доступа к данным через C # и обычно встречаются во всех приложениях, ориентированных на данные. Многие другие классы, которые не упомянуты, которые реализуют те же FooConnection , FooCommand , FooDataReader можно ожидать, что они будут вести себя одинаково.

Общий шаблон доступа для подключений ADO.NET

Общая схема, которая может использоваться при доступе к вашим данным через соединение ADO.NET, может выглядеть следующим образом:

// This scopes the connection (your specific class may vary)
using(var connection = new SqlConnection("{your-connection-string}")
{
    // Build your query
    var query = "SELECT * FROM YourTable WHERE Property = @property");
    // Scope your command to execute
    using(var command = new SqlCommand(query, connection))
    {
         // Open your connection
         connection.Open();

         // Add your parameters here if necessary

         // Execute your query as a reader (again scoped with a using statement)
         using(var reader = command.ExecuteReader())
         {
               // Iterate through your results here
         }
    }
}

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

using(var connection = new SqlConnection("{your-connection-string}"))
{
     var query = "UPDATE YourTable SET Property = Value WHERE Foo = @foo";
     using(var command = new SqlCommand(query,connection))
     {
          connection.Open();
          
          // Add parameters here
          
          // Perform your update
          command.ExecuteNonQuery();
     }
}

Использование выражений с DataContexts

Многие ORM, такие как Entity Framework, выставляют классы абстракции, которые используются для взаимодействия с базовыми базами данных в виде классов, таких как DbContext . Эти контексты, как правило, также реализуют интерфейс IDisposable и должны воспользоваться этим, using возможные возможности:

using(var context = new YourDbContext())
{
      // Access your context and perform your query
      var data = context.Widgets.ToList();
}