Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aplikasi yang melakukan tugas tetap biasanya berisi pernyataan SQL yang dikodekan secara permanen. Misalnya, sistem entri pesanan mungkin menggunakan panggilan berikut untuk mencantumkan pesanan penjualan terbuka:
SQLExecDirect(hstmt, "SELECT OrderID FROM Orders WHERE Status = 'OPEN'", SQL_NTS);
Ada beberapa keuntungan dari pernyataan SQL yang dikodekan secara permanen: Mereka dapat diuji ketika aplikasi ditulis; mereka lebih mudah diimplementasikan daripada pernyataan yang dibangun pada waktu proses; dan mereka menyederhanakan aplikasi.
Menggunakan parameter pernyataan dan pernyataan persiapan memberikan cara yang lebih baik untuk menggunakan pernyataan SQL yang dikodekan secara permanen. Misalnya, tabel Bagian berisi kolom PartID, Deskripsi, dan Harga. Salah satu cara untuk menyisipkan baris baru ke dalam tabel ini adalah dengan membuat dan menjalankan pernyataan INSERT :
#define DESC_LEN 51
#define STATEMENT_LEN 51
SQLUINTEGER PartID;
SQLCHAR Desc[DESC_LEN], Statement[STATEMENT_LEN];
SQLREAL Price;
// Set part ID, description, and price.
GetNewValues(&PartID, Desc, &Price);
// Build INSERT statement.
sprintf_s(Statement, 100, "INSERT INTO Parts (PartID, Description, Price) "
"VALUES (%d, '%s', %f)", PartID, Desc, Price);
// Execute the statement.
SQLExecDirect(hstmt, Statement, SQL_NTS);
Cara yang lebih baik adalah menggunakan pernyataan berparameter yang dikodekan secara permanen. Ini memiliki dua keunggulan daripada pernyataan dengan nilai data yang dikodekan secara permanen. Pertama, lebih mudah untuk membuat pernyataan berparameter karena nilai data dapat dikirim dalam jenis aslinya, seperti bilangan bulat dan angka floating-point, daripada mengonversinya menjadi string. Kedua, pernyataan seperti itu dapat digunakan lebih dari sekali hanya dengan mengubah nilai parameter dan mengeksekusinya kembali; tidak perlu membangunnya kembali.
#define DESC_LEN 51
SQLCHAR * Statement = "INSERT INTO Parts (PartID, Description, Price) "
"VALUES (?, ?, ?)";
SQLUINTEGER PartID;
SQLCHAR Desc[DESC_LEN];
SQLREAL Price;
SQLINTEGER PartIDInd = 0, DescLenOrInd = SQL_NTS, PriceInd = 0;
// Bind the parameters.
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,
&PartID, 0, &PartIDInd);
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, DESC_LEN - 1, 0,
Desc, sizeof(Desc), &DescLenOrInd);
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 7, 0,
&Price, 0, &PriceInd);
// Set part ID, description, and price.
GetNewValues(&PartID, Desc, &Price);
// Execute the statement.
SQLExecDirect(hstmt, Statement, SQL_NTS);
Dengan asumsi pernyataan ini akan dijalankan lebih dari sekali, pernyataan ini dapat disiapkan untuk efisiensi yang lebih besar:
#define DESC_LEN 51
SQLCHAR *Statement = "INSERT INTO Parts (PartID, Description, Price) "
"VALUES (?, ?, ?)";
SQLUINTEGER PartID;
SQLCHAR Desc[DESC_LEN];
SQLREAL Price;
SQLINTEGER PartIDInd = 0, DescLenOrInd = SQL_NTS, PriceInd = 0;
// Prepare the INSERT statement.
SQLPrepare(hstmt, Statement, SQL_NTS);
// Bind the parameters.
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,
&PartID, 0, &PartIDInd);
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, DESC_LEN - 1, 0,
Desc, sizeof(Desc), &DescLenOrInd);
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 7, 0,
&Price, 0, &PriceInd);
// Loop to continually get new values and insert them.
while (GetNewValues(&PartID, Desc, &Price))
SQLExecute(hstmt);
Mungkin cara paling efisien untuk menggunakan pernyataan adalah dengan membuat prosedur yang berisi pernyataan, seperti yang ditunjukkan dalam contoh kode berikut. Karena prosedur dibangun pada waktu pengembangan dan disimpan pada sumber data, prosedur tidak perlu disiapkan pada waktu proses. Kelemahan dari metode ini adalah bahwa sintaks untuk membuat prosedur adalah khusus DBMS dan prosedur harus dibangun secara terpisah untuk setiap DBMS tempat aplikasi dijalankan.
#define DESC_LEN 51
SQLUINTEGER PartID;
SQLCHAR Desc[DESC_LEN];
SQLREAL Price;
SQLINTEGER PartIDInd = 0, DescLenOrInd = SQL_NTS, PriceInd = 0;
// Bind the parameters.
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, 5, 0,
&PartID, 0, &PartIDInd);
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, DESC_LEN - 1, 0,
Desc, sizeof(Desc), &DescLenOrInd);
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, 7, 0,
&Price, 0, &PriceInd);
// Loop to continually get new values and insert them.
while (GetNewValues(&PartID, Desc, &Price))
SQLExecDirect(hstmt, "{call InsertPart(?, ?, ?)}", SQL_NTS);
Untuk informasi selengkapnya tentang parameter, pernyataan yang disiapkan, dan prosedur, lihat Menjalankan Pernyataan.