Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Pro dan Kontra menggunakan SqlCommand Siapkan di C#?

Dari Dokumentasi MSDN:

"Sebelum Anda memanggil Siapkan, tentukan tipe data dari setiap parameter dalam pernyataan yang akan disiapkan. Untuk setiap parameter yang memiliki tipe data panjang variabel, Anda harus mengatur properti Ukuran ke ukuran maksimum yang diperlukan. Persiapan mengembalikan kesalahan jika kondisi ini tidak terpenuhi.

Jika Anda memanggil metode Execute setelah memanggil Siapkan, nilai parameter apa pun yang lebih besar dari nilai yang ditentukan oleh properti Ukuran secara otomatis dipotong ke ukuran parameter asli yang ditentukan, dan tidak ada kesalahan pemotongan yang dikembalikan.

Parameter keluaran (disiapkan atau tidak) harus memiliki tipe data yang ditentukan pengguna. Jika Anda menentukan tipe data panjang variabel, Anda juga harus menentukan Ukuran maksimum."

Selanjutnya, "Jika CommandTypeproperty diatur ke TableDirect,Prepare tidak melakukan apa-apa. Jika CommandTypediset ke StoredProcedure, panggilan kePrepare akan berhasil, ..."

Ini secara umum digunakan untuk memastikan bahwa pengguna akhir tidak menggunakan teknik SQL Injection untuk menambah atau menghapus informasi yang tidak Anda inginkan juga dari database.

Saya melihat ke dalamnya dan memeriksa artikel ini http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.prepare.aspx. Masalah Anda adalah Anda perlu menentukan parameter sebelum menjalankan .Prepare() dan kemudian menyetel parameter setelah menjalankan .Prepare(). Sekarang Anda melakukan keduanya sebelumnya. Saya akan mencoba sesuatu seperti ini (Perhatikan saya tidak mengujinya sehingga sintaks saya mungkin sedikit salah).

public static decimal pobierzBenchmarkKolejny(string varPortfelID, DateTime data, decimal varBenchmarkPoprzedni, decimal varStopaOdniesienia) {
    const string preparedCommand = @"SELECT [dbo].[ufn_BenchmarkKolejny](@varPortfelID, @data, @varBenchmarkPoprzedni,  @varStopaOdniesienia) AS 'Benchmark'";
    using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) //if (varConnection != null) {
    using (var sqlQuery = new SqlCommand(preparedCommand, varConnection)) {

        sqlQuery.Parameters.Add("@varPortfelID");
        sqlQuery.Parameters.Add("@varStopaOdniesienia");
        sqlQuery.Parameters.Add("@data");
        sqlQuery.Parameters.Add("@varBenchmarkPoprzedni");

        sqlQuery.Prepare();
        sqlQuery.ExecuteNonQuery();//This might need to be ExecuteReader()

        sqlQuery.Parameters[0].Value = varPortfelID;
        sqlQuery.Parameters[1].Value = varStopaOdniesienia;
        sqlQuery.Parameters[2].Value = data;
        sqlQuery.Parameters[3].Value = varBenchmarkPoprzedni;

        using (var sqlQueryResult = sqlQuery.ExecuteReader())
            if (sqlQueryResult != null) {
                while (sqlQueryResult.Read()) {

                }
            }
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan kolom urutan pengurutan dalam tabel database

  2. 3 Cara Mengekstrak Bulan dari Tanggal di SQL Server (T-SQL)

  3. Apa batasan SQL Server Compact? (Atau - bagaimana cara memilih database untuk digunakan pada platform MS?)

  4. Ekspor data tabel dari satu SQL Server ke yang lain

  5. SQL Server Melarikan Diri dari Garis Bawah