Parâmetros de DataAdapter
Aplicável a: .NET Framework .NET .NET Standard
O DbDataAdapter tem quatro propriedades que são usadas para recuperar dados da fonte de dados e atualizá-los nela: a propriedade SelectCommand retorna dados da fonte de dados; e as propriedades InsertCommand, UpdateCommand e DeleteCommand são usadas para gerenciar alterações na fonte de dados.
Observação
A propriedade SelectCommand
deve ser definida antes que você chame o método Fill
do DataAdapter
. A propriedade InsertCommand
, UpdateCommand
ou DeleteCommand
deve ser definida antes que o método Update
do DataAdapter
seja chamado, dependendo de quais alterações foram feitas nos dados da DataTable. Por exemplo, se as linhas tiverem sido adicionadas, o InsertCommand
deve ser definido antes de chamar Update
. Quando Update
estiver processando uma linha inserida, atualizada ou excluída, o DataAdapter
usará a respectiva propriedade Command
para processar a ação. As informações atuais sobre a linha modificada são passadas para o objeto Command
através da coleção Parameters
.
Ao atualizar uma linha da fonte de dados, você chama a instrução UPDATE, que usa um identificador exclusivo para identificar a linha da tabela a ser atualizada. O identificador exclusivo é geralmente o valor de um campo de chave primária. A instrução UPDATE usa os parâmetros que contêm o identificador exclusivo e as colunas e os valores a serem atualizados, conforme mostrado na declaração Transact-SQL a seguir.
UPDATE Customers SET CompanyName = @CompanyName
WHERE CustomerID = @CustomerID
Observação
A sintaxe para espaços reservados de parâmetro depende da fonte de dados. Este exemplo mostra os espaços reservados de uma fonte de dados do SQL Server.
Neste exemplo, o campo CompanyName
é atualizado com o valor do parâmetro @CompanyName
na linha em que CustomerID
é igual ao valor do parâmetro @CustomerID
. Os parâmetros recuperam informações da linha modificada usando a propriedade SourceColumn do objeto SqlParameter. Estes são os parâmetros da instrução UPDATE de exemplo anterior. O código assume que a variável adapter
representa um objeto SqlDataAdapter válido.
// Assumes that connection is a valid SqlAdapter object
adapter.UpdateCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 15, "CompanyName");
SqlParameter parameter = adapter.UpdateCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;
O método Add
da coleção Parameters
adota o nome do parâmetro, o tipo de dados, o tamanho (se aplicável ao tipo) e o nome da SourceColumn da DataTable
. Observe que SourceVersion do parâmetro @CustomerID
é definido como Original
. Isso garante que a linha existente na fonte de dados será atualizada se o valor da(s) coluna(s) de identificação tiverem sido alteradas na DataRow modificada. Nesse caso, o valor de linha Original
corresponderia ao valor atual na fonte de dados, e o valor de linha Current
conteria o valor atualizado. A SourceVersion
do parâmetro @CompanyName
não está definida e usa o padrão, o valor de linha Current
.
Observação
Para ambas as operações Fill
dos métodos DataAdapter
e Get
do DataReader
, o tipo .NET é inferido do tipo retornado do Provedor de Dados Microsoft SqlClient para SQL Server. Os tipos .NET inferidos e os métodos acessadores para tipos de dados do Microsoft SQL Server são descritos nos Mapeamentos do Tipo de Dados do ADO.NET.
Parameter.SourceColumn, Parameter.SourceVersion
A SourceColumn
e a SourceVersion
podem ser passadas como argumentos para o construtor Parameter
ou definidas como propriedades de um Parameter
existente. A SourceColumn
é o nome da DataColumn da DataRow, em que o valor do Parameter
será recuperado. A SourceVersion
especifica a versão da DataRow
que o DataAdapter
usa para recuperar o valor.
A tabela a seguir mostra os valores de enumeração DataRowVersion disponíveis para uso com a SourceVersion
.
Enumeração DataRowVersion | Descrição |
---|---|
Current |
O parâmetro usa o valor atual da coluna. Este é o padrão. |
Default |
O parâmetro usa o DefaultValue da coluna. |
Original |
O parâmetro usa o valor original da coluna. |
Proposed |
O parâmetro usa um valor proposto. |
O exemplo de código SqlClient
na seção a seguir define um parâmetro para um UpdateCommand em que a coluna CustomerID
é usada como SourceColumn
de dois parâmetros: @CustomerID
(SET CustomerID = @CustomerID
) e @OldCustomerID
(WHERE CustomerID = @OldCustomerID
). O parâmetro @CustomerID
é usado para atualizar a coluna CustomerID com o valor atual em DataRow
. Como resultado, a SourceColumn
CustomerID
com uma SourceVersion
de Current
é usada. O parâmetro @OldCustomerID
é usado para identificar a linha atual na fonte de dados. Como o valor de coluna correspondente é encontrado na versão Original
da linha, a mesma SourceColumn
(CustomerID
) com uma SourceVersion
de Original
é usada.
Trabalhar com parâmetros do SqlClient
O exemplo a seguir demonstra como criar um SqlDataAdapter e definir MissingSchemaAction para AddWithKey a fim de recuperar informações adicionais do esquema no banco de dados. O conjunto de propriedades SelectCommand, InsertCommand, UpdateCommand e DeleteCommand e os objetos SqlParameter correspondentes adicionados à coleção Parameters. O método retorna um objeto SqlDataAdapter
.
public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
// Assumes that connection is a valid SqlConnection object
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
// Create the commands.
adapter.SelectCommand = new SqlCommand(
"SELECT CustomerID, CompanyName FROM CUSTOMERS", connection);
adapter.InsertCommand = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", connection);
adapter.UpdateCommand = new SqlCommand(
"UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", connection);
adapter.DeleteCommand = new SqlCommand(
"DELETE FROM Customers WHERE CustomerID = @CustomerID", connection);
// Create the parameters.
adapter.InsertCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.InsertCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName");
adapter.UpdateCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID");
adapter.UpdateCommand.Parameters.Add("@CompanyName",
SqlDbType.VarChar, 40, "CompanyName");
adapter.UpdateCommand.Parameters.Add("@oldCustomerID",
SqlDbType.Char, 5, "CustomerID").SourceVersion =
DataRowVersion.Original;
adapter.DeleteCommand.Parameters.Add("@CustomerID",
SqlDbType.Char, 5, "CustomerID").SourceVersion =
DataRowVersion.Original;
return adapter;
}