標籤:style ar color sp strong 資料 on 問題 bs
1. 模糊查詢 like的參數化寫法
string keyword="value"; // 要模糊比對的值
錯誤示範:
sql: string strSql="select * from [Table] where [Field] like %@Field%";
參數: System.Data.SqlClient.SqlParameter[] parms = new[] {
new System.Data.SqlClient.SqlParameter("@Field",System.Data.SqlDbType.VarChar,400)
};
parms[0].Value = keyWord ;
輸出: ado.net 給我們輸出的參數 SQL語句 還是原原本本的 select * from [Table] where [Field] like %@Field% SQL語句錯誤
解決辦法(1):
sql : string strSql="select * from [Table] where [Field] like ‘%‘+@Field+‘%‘ "
這樣ado.net 就能將參數正確的輸入了
解決辦法(2):
sql: string strSql="select * from [Table] where [Field] like @Field";
參數: System.Data.SqlClient.SqlParameter[] parms = new[] {
new System.Data.SqlClient.SqlParameter("@Field",System.Data.SqlDbType.VarChar,400)
};
parms[0].Value = "%"+keyWord +"%";
分析:
我們期望最後傳輸到資料庫的 like語句應該是: select * from [Table] like [Field] like ‘%value%‘ ;
直接%@Field%,汙染了ado.net的參數標示@符號導致無法正確替換參數;
方法一在sql語句中拼接字串的方式來得到如 ‘%value%‘的值; 註:sql語句中 字串用單引號來作為字串的起始符, 而sql server中以 + 號 拼接字串.所以‘%value%‘等同於 ‘%‘+value‘%‘,
方法二則直接在指派陳述式中加入模糊比對符;
C# 平時碰見的問題【4】