Parameter DataAdapter
Berlaku untuk: .NET Framework .NET .NET Standard
DbDataAdapter memiliki empat properti yang digunakan untuk mengambil data dari dan memperbarui data ke sumber data: properti SelectCommand mengembalikan data dari sumber data; serta properti InsertCommand, UpdateCommand, dan DeleteCommand digunakan untuk mengelola perubahan di sumber data.
Catatan
Properti SelectCommand
harus diatur sebelum Anda memanggil metode Fill
dari DataAdapter
. Properti InsertCommand
, UpdateCommand
, atau DeleteCommand
harus diatur sebelum metode Update
dari DataAdapter
dipanggil, bergantung pada perubahan apa yang dibuat pada data di DataTable. Misalnya, jika baris telah ditambahkan, InsertCommand
harus diatur sebelum Anda memanggil Update
. Saat Update
memproses baris yang disisipkan, diperbarui, atau dihapus, DataAdapter
menggunakan masing-masing properti Command
untuk memproses tindakan. Informasi terkini tentang baris yang dimodifikasi diteruskan ke objek Command
melalui kumpulan Parameters
.
Saat Anda memperbarui baris di sumber data, Anda memanggil pernyataan UPDATE, yang menggunakan pengidentifikasi unik untuk mengidentifikasi baris dalam tabel yang akan diperbarui. Pengidentifikasi unik biasanya nilai bidang kunci utama. Pernyataan UPDATE menggunakan parameter yang berisi pengidentifikasi unik dan kolom serta nilai yang akan diperbarui, seperti yang diperlihatkan dalam pernyataan Transact-SQL berikut.
UPDATE Customers SET CompanyName = @CompanyName
WHERE CustomerID = @CustomerID
Catatan
Sintaks untuk tempat penampung parameter bergantung pada sumber data. Contoh ini menunjukkan tempat penampung untuk sumber data SQL Server.
Dalam contoh ini, bidang diperbarui CompanyName
dengan nilai @CompanyName
parameter untuk baris yang CustomerID
sama dengan nilai @CustomerID
parameter. Parameter mengambil informasi dari baris yang dimodifikasi menggunakan properti SourceColumn dari objek SqlParameter. Berikut ini adalah parameter untuk contoh pernyataan UPDATE sebelumnya. Kode mengasumsikan bahwa variabel adapter
mewakili objek SqlDataAdapter yang valid.
// 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;
Metode Add
dari kumpulan Parameters
mengambil nama parameter, jenis data, ukuran (jika berlaku untuk jenis), dan nama SourceColumn dari DataTable
. Perhatikan bahwa SourceVersion dari parameter @CustomerID
diatur ke Original
. Pengaturan ini menjamin bahwa baris yang ada di sumber data diperbarui jika nilai kolom atau kolom pengidentifikasi telah diubah di DataRow yang dimodifikasi. Dalam hal ini, nilai baris Original
akan cocok dengan nilai saat ini di sumber data, dan nilai baris Current
akan berisi nilai yang diperbarui. SourceVersion
untuk parameter @CompanyName
tidak diatur dan menggunakan nilai baris Current
default.
Catatan
Fill
Untuk operasi DataAdapter
dan Get
metode DataReader
, jenis .NET disimpulkan dari jenis yang dikembalikan dari Penyedia Data Microsoft SqlClient untuk SQL Server. Jenis .NET yang disimpulkan dan metode aksesor untuk jenis data Microsoft SQL Server dijelaskan dalam Pemetaan Tipe Data di ADO.NET.
Parameter.SourceColumn, Parameter.SourceVersion
SourceColumn
dan SourceVersion
dapat diteruskan sebagai argumen ke konstruktor Parameter
, atau ditetapkan sebagai properti dari Parameter
yang ada. SourceColumn
adalah nama DataColumn dari DataRow tempat nilai Parameter
akan diambil. SourceVersion
menentukan versi DataRow
yang digunakan DataAdapter
untuk mengambil nilai.
Tabel berikut menunjukkan DataRowVersion nilai enumerasi yang tersedia untuk digunakan dengan SourceVersion
.
Enumerasi DataRowVersion | Deskripsi |
---|---|
Current |
Parameter menggunakan nilai kolom saat ini. Ini adalah default. |
Default |
Parameter menggunakan DefaultValue kolom. |
Original |
Parameter menggunakan nilai asli kolom. |
Proposed |
Parameter menggunakan nilai yang diusulkan. |
Contoh kode SqlClient
di bagian berikutnya mendefinisikan parameter untuk UpdateCommand di mana kolom CustomerID
digunakan sebagai SourceColumn
untuk dua parameter: @CustomerID
(SET CustomerID = @CustomerID
), dan @OldCustomerID
(WHERE CustomerID = @OldCustomerID
). Parameter @CustomerID
digunakan untuk memperbarui kolom CustomerID ke nilai saat ini di DataRow
. Akibatnya, CustomerID
SourceColumn
dengan SourceVersion
yang digunakan Current
. Parameter @OldCustomerID
digunakan untuk mengidentifikasi baris saat ini di sumber data. Karena nilai kolom yang cocok ditemukan dalam versi Original
dari baris, SourceColumn
(CustomerID
) yang sama dengan SourceVersion
dari Original
digunakan.
Bekerja dengan parameter SqlClient
Contoh berikut menunjukkan cara membuat SqlDataAdapter dan mengatur MissingSchemaAction ke AddWithKey untuk mengambil informasi skema tambahan dari database. Kumpulan properti SelectCommand, InsertCommand, UpdateCommand, serta DeleteCommand dan objek SqlParameter yang sesuai ditambahkan ke kumpulan Parameters. Metode mengembalikan objek 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;
}