DataAdapter Parameters
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. 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. Gunakan tempat penampung tanda tanya (?) untuk parameter System.Data.OleDb dan System.Data.Odbc.
Dalam contoh Visual Basic ini, bidang CompanyName
diperbarui dengan nilai parameter @CompanyName
untuk baris di mana CustomerID
sama dengan nilai parameter @CustomerID
. 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.
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
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
Untuk kedua operasi Fill
dari DataAdapter
dan metode Get
dari DataReader
, jenis .NET Framework disimpulkan dari jenis yang dikembalikan dari penyedia data .NET Framework. Jenis .NET Framework dan metode pengakses yang disimpulkan untuk jenis data Microsoft SQL Server, OLE DB, dan ODBC dijelaskan dalam Pemetaan Jenis 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)
{
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
Placeholder Parameter OleDb
Untuk objek OleDbDataAdapter dan OdbcDataAdapter, Anda harus menggunakan tempat penampung tanda tanya (?) untuk mengidentifikasi parameter.
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 = ?";
Pernyataan kueri berparameter menentukan parameter input dan output mana yang harus dibuat. Untuk membuat parameter, gunakan metode Parameters.Add
atau konstruktor Parameter
untuk menentukan nama kolom, jenis data, dan ukuran. Untuk jenis data intrinsik, seperti Integer
, Anda tidak harus menyertakan ukuran, atau Anda dapat menentukan ukuran default.
Contoh kode berikut membuat parameter untuk pernyataan SQL dan kemudian mengisi DataSet
.
Contoh 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");
Parameter 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");
Catatan
Jika nama parameter tidak disediakan untuk parameter, parameter diberi nama default tambahan parameterN , dimulai dengan "Parameter1". Sebaiknya hindari konvensi penamaan ParameterN saat memberikan nama parameter, karena nama yang Anda berikan mungkin bertentangan dengan nama parameter default yang ada di ParameterCollection
. Jika nama yang diberikan sudah ada, pengecualian akan ditampilkan.