2012-06-22 151 views
2

如果我運行此查詢蟾蜍:爲什麼我的Like查詢被Toad喜歡,但不被C#喜歡?

SELECT BANDID, BANDNAME 
FROM WOODSTOCK 
WHERE BANDNAME LIKE '%THE%' 

..它工作得花花公子,並返回了一堆行。但是,推測等效代碼如下:

const string sql = @"SELECT BANDID, BANDNAME 
      FROM WOODSTOCK 
      WHERE BANDNAME LIKE '%:BANDNAMEPORTION%'"; 
. . . 
ocmd.Parameters.Add("BANDNAMEPORTION", BandNamePortion); 
. . . 

...不返回任何記錄。

+0

不知道是肯定的,但你有沒有逃跑的''%? – vol7ron

+0

如果%= madhouse,是的。 –

回答

9

那麼,「可能相當於」顯然是不等價的,因爲它不起作用。您的參數名稱位於引號內,因此不會將其視爲參數。我懷疑你想:

const string sql = @"SELECT BANDID, BANDNAME 
      FROM WOODSTOCK 
      WHERE BANDNAME LIKE :BANDNAMEPORTION"; 
. . . 
ocmd.Parameters.Add("BANDNAMEPORTION", "%" + BandNamePortion + "%"); 
+0

+1。你仍然可能有額外的單引號... –

+0

我是一個String.Format()迷戀,所以我做了它(在更改sql後「...... upper(BANDNAME)...」:\t \t \t \t \t \t \t ocmd.Parameters.Add(「BANDNAMEPORTION」,String.Format(「%{0}%」,BandNamePortion.ToUpper())); –

+0

提示:你在SQL中的參數有一個尾隨引號 - nevermind I 'll fix it – vol7ron

5

另一種選擇是

const string sql = @"SELECT BANDID, BANDNAME 
     FROM WOODSTOCK 
     WHERE BANDNAME LIKE '%' + @BANDNAMEPORTION + '%';"; 
. . . 
ocmd.Parameters.Add("BANDNAMEPORTION", BandNamePortion);