Pertanyaan Berparameter dengan Syarat LIKE dan IN
Satu halangan biasa dalam pertanyaan berparameter ialah mengendalikan keadaan kompleks yang melibatkan klausa IN dan LIKE. Dalam senario sedemikian, adalah penting untuk memastikan sintaks yang betul digunakan untuk mencapai parameterisasi dan keberkesanan.
Pertimbangkan senario berikut:
SqlCommand comm = new SqlCommand(@" SELECT * FROM Products WHERE Category_ID IN (@categoryids) OR name LIKE '%@name%' ", conn); comm.Parameters.Add("@categoryids", SqlDbType.Int); comm.Parameters["@categoryids"].Value = CategoryIDs; comm.Parameters.Add("@name", SqlDbType.Int); comm.Parameters["@name"].Value = Name;
Di sini, matlamatnya adalah untuk membina pertanyaan yang mendapatkan semula produk berdasarkan senarai ID kategori yang dipisahkan koma (CategoryIDs) dan rentetan (Nama) yang mungkin mengandungi aksara khas. Walau bagaimanapun, kod di atas tidak akan berfungsi dengan betul kerana:
Sintaks yang betul memerlukan pendekatan berbilang langkah:
Kod berikut menunjukkan pendekatan yang disemak:
string Name = "someone"; int[] categoryIDs = new int[] { 238, 1138, 1615, 1616, 1617, 1618, 1619, 1620, 1951, 1952, 1953, 1954, 1955, 1972, 2022 }; SqlCommand comm = conn.CreateCommand(); string[] parameters = new string[categoryIDs.Length]; for(int i=0;i<categoryIDs.Length;i++) { parameters[i] = "@p"+i; comm.Parameters.AddWithValue(parameters[i], categoryIDs[i]); } comm.Parameters.AddWithValue("@name",$"%{Name}%"); comm.CommandText = "SELECT * FROM Products WHERE Category_ID IN ("; comm.CommandText += string.Join(",", parameters) + ")"; comm.CommandText += " OR name LIKE @name";
Kod ini menghasilkan pertanyaan berparameter sepenuhnya yang memenuhi keperluan kedua-dua syarat IN dan LIKE.
Atas ialah kandungan terperinci Bagaimana untuk Mengparameterkan Pertanyaan SQL dengan Klausa LIKE dan IN dengan betul?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!