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

Cara menggunakan parameter dengan LIKE di Sql Server Compact Edition

Jawaban singkatnya adalah Anda harus meletakkan wildcard di Nilai parameter, bukan di CommandText. yaitu

bukan itu:sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode%"

ini:

sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode";
sqlCommand.Parameters.Add("@postcode", SqlDbType.NVarChar).Value = postCode + "%";

Jawaban panjang di sini:

Saya kembali dan melucuti kode saya sampai ke intinya sehingga saya bisa mempostingnya di sini, dan saat melakukan itu saya menemukan bahwa metode terakhir yang saya coba dalam pertanyaan awal saya benar-benar berfungsi. Pasti ada yang salah dalam pengujian saya. Jadi, inilah ringkasannya, dengan kode lengkap yang telah dijalankan:

Sql dinamis asli, rentan terhadap injeksi sql:

//Dynamic sql works, returns 2 results as expected, 
//but I want to use parameters to protect against sql injection

string postCode = "G20";
sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE '" 
                         + postCode + "%'";
return Database.fGetDataSet(sqlCommand, 
                            iiStartRecord, 
                            iiMaxRecords, 
                            "JOBVISIT");

Percobaan pertama menggunakan parameter memberikan kesalahan:

//This syntax with a parameter gives me an error 
//(note that I've added the NVarChar length as suggested:
//System.FormatException : @postcode : G20 - 
//Input string was not in a correct format.
//at System.Data.SqlServerCe.SqlCeCommand.FillParameterDataBindings()
//at System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr& pCursor,
// Boolean& isBaseTableCursor)

string postCode = "G20";
sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode 
                         + '%'";
sqlCommand.Parameters.Add("@postcode", 
                          SqlDbType.NVarChar, 
                          10).Value = postCode;
return Database.fGetDataSet(sqlCommand, iiStartRecord, iiMaxRecords, "JOBVISIT");

Teknik kedua benar-benar berhasil:

///This syntax with a parameter works, returns 2 results as expected
string postCode = "G20";
sqlCommand.CommandText = "SELECT * FROM JOB WHERE JOB_POSTCODE LIKE @postcode";
sqlCommand.Parameters.Add("@postcode", SqlDbType.NVarChar).Value = postCode 
                                                                   + "%";
return Database.fGetDataSet(sqlCommand, iiStartRecord, iiMaxRecords, "JOBVISIT");

Terima kasih atas semua masukannya, dan maaf tentang pertanyaan awal yang menyesatkan...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Representasi DateTime dalam milidetik?

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

  3. Memulai SQL Server 2017 di Linux di portal Azure

  4. ATN2() Contoh di SQL Server

  5. Bagaimana Mengenalinya jika Kolom yang Dihitung adalah Deterministik di SQL Server