Idioma

Como se conectar a um banco de dados

Importante

Não use System.Data.SqlClient para desenvolvimento novo. Use o Microsoft.Data.SqlClient para novo código de acesso a dados SQL Server. Esses exemplos mantêm System.Data.SqlClient porque o provedor interno LINQ to SQL do .NET Framework exige isso. Alterar o tipo de conexão sozinho não migra LINQ para SQL.

O DataContext é o canal principal pelo qual você se conecta a um banco de dados, recupera objetos dele e envia alterações de volta para ele. Você usa o DataContext assim como usaria um ADO.NET SqlConnection. Na verdade, o DataContext é inicializado com uma conexão ou cadeia de conexão que você fornece. Para obter mais informações, consulte Métodos DataContext (Designer O/R).

A finalidade do DataContext é converter suas solicitações de objetos em consultas SQL a serem feitas no banco de dados e, em seguida, montar objetos a partir dos resultados. O DataContext habilita Language-Integrated Query (LINQ) implementando o mesmo padrão de operador que os Operadores de Consulta Padrão, como Where e Select.

Importante

Manter uma conexão segura é de maior importância. Para obter mais informações, consulte Segurança no LINQ to SQL.

Exemplo 1

No exemplo a seguir, o DataContext é usado para se conectar ao banco de dados de exemplo Northwind e recuperar linhas de clientes cuja cidade é Londres.

// Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
// LINQ to SQL's built-in provider requires System.Data.SqlClient.
// DataContext takes a connection string.
DataContext db = new DataContext(@"c:\Northwind.mdf");

// Get a typed table to run queries.
Table<Customer> Customers = db.GetTable<Customer>();

// Query for customers from London.
var query =
    from cust in Customers
    where cust.City == "London"
    select cust;

foreach (var cust in query)
    Console.WriteLine("id = {0}, City = {1}", cust.CustomerID, cust.City);
' Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
' LINQ to SQL's built-in provider requires System.Data.SqlClient.
' DataContext takes a connection string.
Dim db As New DataContext("…\Northwind.mdf")

' Get a typed table to run queries.
Dim Customers As Table(Of Customer) = db.GetTable(Of Customer)()

' Query for customer from London.
Dim Query = _
    From cust In Customers _
    Where cust.City = "London" _
    Select cust

For Each cust In Query
    Console.WriteLine("id=" & cust.CustomerID & _
        ", City=" & cust.City)
Next

Cada tabela de banco de dados é representada como uma Table coleção disponível por meio do GetTable método, usando a classe de entidade para identificá-la.

Exemplo 2

A melhor prática é declarar um DataContext fortemente tipado em vez de depender da classe básica DataContext e do método GetTable. Um DataContext fortemente tipado declara todas as coleções Table como membros do contexto, como no exemplo a seguir.

// Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
// LINQ to SQL's built-in provider requires System.Data.SqlClient.
public partial class Northwind : DataContext
{
    public Table<Customer> Customers;
    public Table<Order> Orders;
    public Northwind(string connection) : base(connection) { }
}
' Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
' LINQ to SQL's built-in provider requires System.Data.SqlClient.
Partial Public Class Northwind
    Inherits DataContext
    Public Customers As Table(Of Customer)
    Public Orders As Table(Of Order)
    Public Sub New(ByVal connection As String)
        MyBase.New(connection)
    End Sub
End Class

Em seguida, você pode expressar a consulta para clientes de Londres de forma mais simples, assim:

// Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
// LINQ to SQL's built-in provider requires System.Data.SqlClient.
Northwnd db = new Northwnd(@"c:\Northwnd.mdf");
var query =
    from cust in db.Customers
    where cust.City == "London"
    select cust;
foreach (var cust in query)
    Console.WriteLine("id = {0}, City = {1}", cust.CustomerID,
        cust.City);
' Do not use System.Data.SqlClient for new development; use Microsoft.Data.SqlClient.
' LINQ to SQL's built-in provider requires System.Data.SqlClient.
Dim db As New Northwind("...\Northwnd.mdf")

Dim query = _
    From cust In db.Customers _
    Where cust.City = "London" _
    Select cust

For Each cust In query
    Console.WriteLine("id=" & cust.CustomerID & _
        ", City=" & cust.City)
Next

Consulte também