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, CustomerIDSourceColumn dengan SourceVersion dari Current digunakan. 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 diberikan untuk parameter, parameter tersebut 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.

Lihat juga