Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O DbDataAdapter tem quatro propriedades que são usadas para recuperar dados e atualizar dados para a fonte de dados: a SelectCommand propriedade retorna dados da fonte de dados e as propriedades , InsertCommande UpdateCommand e DeleteCommand são usadas para gerenciar alterações na fonte de dados. A SelectCommand propriedade deve ser definida antes de chamar o Fill método do DataAdapter. As propriedades InsertCommand, UpdateCommand ou DeleteCommand devem ser definidas antes que o método Update do DataAdapter seja chamado, dependendo de quais alterações foram feitas nos dados no DataTable. Por exemplo, se linhas foram adicionadas, o InsertCommand deve ser definido antes de chamar Update. Quando Update está processando uma linha inserida, atualizada ou excluída, o DataAdapter usa a respetiva Command propriedade para processar a ação. As informações atuais sobre a linha modificada são passadas para o Command objeto através da Parameters coleção.
Ao atualizar uma linha na fonte de dados, você chama a instrução UPDATE, que usa um identificador exclusivo para identificar a linha na tabela a ser atualizada. O identificador exclusivo é normalmente o valor de um campo de chave primária. A instrução UPDATE usa parâmetros que contêm o identificador exclusivo e as colunas e valores a serem atualizados, conforme mostrado na instrução Transact-SQL a seguir.
UPDATE Customers SET CompanyName = @CompanyName
WHERE CustomerID = @CustomerID
Nota
A sintaxe dos espaços reservados para parâmetros depende da fonte de dados. Este exemplo mostra espaços reservados para uma fonte de dados do SQL Server. Use pontos de interrogação (?) como espaços reservados para os parâmetros System.Data.OleDb e System.Data.Odbc.
Neste exemplo do Visual Basic, o campo CompanyName é atualizado com o valor do parâmetro @CompanyName para a linha onde CustomerID é igual ao valor do parâmetro @CustomerID. Os parâmetros recuperam informações da linha modificada usando a propriedade SourceColumnSqlParameter do objeto. A seguir estão os parâmetros para a instrução UPDATE de exemplo anterior. O código pressupõe que a variável adapter representa um objeto válido SqlDataAdapter .
adapter.Parameters.Add( _
"@CompanyName", SqlDbType.NChar, 15, "CompanyName")
Dim parameter As SqlParameter = _
adapter.UpdateCommand.Parameters.Add("@CustomerID", _
SqlDbType.NChar, 5, "CustomerID")
parameter.SourceVersion = DataRowVersion.Original
O método Add da coleção Parameters recebe o nome do parâmetro, o Parameters tipo de dados, o tamanho (se aplicável ao tipo) e o nome do SourceColumn a partir de DataTable. Note que o SourceVersion do parâmetro @CustomerID está definido como Original. Isso garante que a linha existente na fonte de dados seja atualizada se o valor da coluna ou colunas de identificação tiver sido alterado no arquivo DataRowmodificado. Nesse caso, o valor da Original linha corresponderia ao valor atual na fonte de dados e o valor da Current linha conteria o valor atualizado. O parâmetro @CompanyName para o SourceVersion não está definido e usa o valor de linha padrão, Current.
Nota
Para as Fill operações do DataAdapter e os Get métodos do DataReader, o tipo .NET Framework é inferido a partir do tipo retornado pelo provedor de dados do .NET Framework. Os tipos de .NET Framework inferidos e métodos de acessador para tipos de dados Microsoft SQL Server, OLE DB e ODBC são descritos em Mapeamentos de tipo de dados no ADO.NET.
Parameter.SourceColumn (coluna de origem), Parameter.SourceVersion (versão de origem)
O SourceColumn e SourceVersion pode ser passado como argumentos para o Parameter construtor, ou definido como propriedades de um existente Parameter. O SourceColumn é o nome do DataColumn do qual o valor de Parameter será recuperado de DataRow. O SourceVersion especifica a DataRow versão que o DataAdapter usa para recuperar o valor.
A tabela a seguir mostra os valores de enumeração disponíveis para uso com DataRowVersionSourceVersion.
| Enumeração DataRowVersion | Descrição |
|---|---|
Current |
O parâmetro usa o valor atual da coluna. Esta é a predefiniçã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 SqlClient exemplo de código na próxima seção define um parâmetro para um UpdateCommand no qual a CustomerID coluna é usada como um SourceColumn para dois parâmetros: @CustomerID (SET CustomerID = @CustomerID), e @OldCustomerID (WHERE CustomerID = @OldCustomerID). O @CustomerID parâmetro é usado para atualizar a CustomerID coluna para o valor atual no DataRow. Como resultado, o CustomerIDSourceColumn com um SourceVersion de Current é usado. O @OldCustomerID parâmetro é usado para identificar a linha atual na fonte de dados. Como o valor correspondente da coluna é encontrado na versão Original da linha, usa-se o mesmo SourceColumn (CustomerID) com um SourceVersion de Original.
Trabalhar com parâmetros do SqlClient
O exemplo a seguir demonstra como criar um SqlDataAdapter e definir o MissingSchemaAction como AddWithKey para recuperar informações adicionais de esquema do banco de dados. As propriedades SelectCommand, InsertCommand, UpdateCommand e DeleteCommand são definidas e os seus objetos correspondentes SqlParameter são adicionados à coleção Parameters. O método retorna um SqlDataAdapter objeto.
public static SqlDataAdapter CreateSqlDataAdapter(SqlConnection connection)
{
SqlDataAdapter adapter = new()
{
MissingSchemaAction = MissingSchemaAction.AddWithKey,
// Create the commands.
SelectCommand = new SqlCommand(
"SELECT CustomerID, CompanyName FROM CUSTOMERS", connection),
InsertCommand = new SqlCommand(
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", connection),
UpdateCommand = new SqlCommand(
"UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", connection),
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;
}
Public Function CreateSqlDataAdapter( _
ByVal connection As SqlConnection) As SqlDataAdapter
Dim adapter As 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
End Function
Espaços reservados para parâmetros OleDb
Para os objetos OleDbDataAdapter e OdbcDataAdapter, deve-se usar espaços reservados de ponto de interrogação (?) para identificar os parâmetros.
Dim selectSQL As String = _
"SELECT CustomerID, CompanyName FROM Customers " & _
"WHERE CountryRegion = ? AND City = ?"
Dim insertSQL AS String = _
"INSERT INTO Customers (CustomerID, CompanyName) VALUES (?, ?)"
Dim updateSQL AS String = _
"UPDATE Customers SET CustomerID = ?, CompanyName = ? " & _
WHERE CustomerID = ?"
Dim deleteSQL As String = "DELETE FROM Customers WHERE CustomerID = ?"
string selectSQL =
"SELECT CustomerID, CompanyName FROM Customers " +
"WHERE CountryRegion = ? AND City = ?";
string insertSQL =
"INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (?, ?)";
string updateSQL =
"UPDATE Customers SET CustomerID = ?, CompanyName = ? " +
"WHERE CustomerID = ? ";
string deleteSQL = "DELETE FROM Customers WHERE CustomerID = ?";
As instruções de consulta parametrizadas definem quais parâmetros de entrada e saída devem ser criados. Para criar um parâmetro, use o Parameters.Add método ou o Parameter construtor para especificar o nome da coluna, o tipo de dados e o tamanho. Para tipos de dados intrínsecos, como Integer, não é necessário incluir o tamanho ou especificar o tamanho padrão.
O exemplo de código a seguir cria os parâmetros para uma instrução SQL e depois preenche um DataSet.
Exemplo de OleDb
' Assumes that connection is a valid OleDbConnection object.
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter
Dim selectCMD AS OleDbCommand = New OleDbCommand(selectSQL, connection)
adapter.SelectCommand = selectCMD
' Add parameters and set values.
selectCMD.Parameters.Add( _
"@CountryRegion", OleDbType.VarChar, 15).Value = "UK"
selectCMD.Parameters.Add( _
"@City", OleDbType.VarChar, 15).Value = "London"
Dim customers As DataSet = New DataSet
adapter.Fill(customers, "Customers")
// Assumes that connection is a valid OleDbConnection object.
OleDbDataAdapter adapter = new OleDbDataAdapter();
OleDbCommand selectCMD = new OleDbCommand(selectSQL, connection);
adapter.SelectCommand = selectCMD;
// Add parameters and set values.
selectCMD.Parameters.Add(
"@CountryRegion", OleDbType.VarChar, 15).Value = "UK";
selectCMD.Parameters.Add(
"@City", OleDbType.VarChar, 15).Value = "London";
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
Parâmetros ODBC
' Assumes that connection is a valid OdbcConnection object.
Dim adapter As OdbcDataAdapter = New OdbcDataAdapter
Dim selectCMD AS OdbcCommand = New OdbcCommand(selectSQL, connection)
adapter.SelectCommand = selectCMD
' Add Parameters and set values.
selectCMD.Parameters.Add("@CountryRegion", OdbcType.VarChar, 15).Value = "UK"
selectCMD.Parameters.Add("@City", OdbcType.VarChar, 15).Value = "London"
Dim customers As DataSet = New DataSet
adapter.Fill(customers, "Customers")
// Assumes that connection is a valid OdbcConnection object.
OdbcDataAdapter adapter = new OdbcDataAdapter();
OdbcCommand selectCMD = new OdbcCommand(selectSQL, connection);
adapter.SelectCommand = selectCMD;
//Add Parameters and set values.
selectCMD.Parameters.Add("@CountryRegion", OdbcType.VarChar, 15).Value = "UK";
selectCMD.Parameters.Add("@City", OdbcType.VarChar, 15).Value = "London";
DataSet customers = new DataSet();
adapter.Fill(customers, "Customers");
Nota
Se um nome de parâmetro não for fornecido para um parâmetro, o parâmetro receberá um nome padrão incremental de ParâmetroN, começando com "Parâmetro1". Recomendamos que você evite a convenção de nomenclatura do parâmetroN ao fornecer um nome de parâmetro, porque o nome fornecido pode entrar em conflito com um nome de parâmetro padrão existente no ParameterCollection. Se o nome fornecido já existir, uma exceção será lançada.