看板 C_Sharp 關於我們 聯絡資訊
HI 我正在練習用 sql parameter 去組裝查詢條件 前一個程式有成功,條件頗複雜,但這個看似簡單的小程式一直沒有成功 想破頭找遍資料還是不行 還請高手幫忙解惑 .. @ @ 部份程式碼如下: strSql = @" SELECT CAST(LIFNR AS INT) as 供應商編號, NAME1 as 名稱, ORT01 as 城市, PSTLZ as 郵遞區號, STRAS as 地址, TELF1 as 聯絡人, TELFX as 電話, ADR6.SMTP_ADDR as eMail from prd.LFA1 left join prd.ADR6 on LFA1.ADRNR = ADR6.ADDRNUMBER "; if (!string.IsNullOrEmpty(txtVendor.Text)) { //cmd.CommandText = strSql + "WHERE NAME1 LIKE N'%"+ txtVendor.Text.Trim() + "%'"; // 這樣寫可以 cmd.CommandText = strSql + "WHERE NAME1 LIKE '%@prName%'"; cmd.Parameters.Add("@prName", SqlDbType.VarChar).Value = txtVendor.Text.Trim(); // 這樣寫不行 cmd.Parameters.AddWithValue("@prName", txtVendor.Text.Trim()); //這樣寫一樣不行 } else cmd.CommandText = strSql; DataTable dtResult = tp.getData(cmd); getData()部份就這樣而已 conn.Open(); dr = comm.ExecuteReader(); if (dr.HasRows) dt.Load(dr); conn.Close(); return dt; 這段程式只要沒有 cmd.Parameters 那一段就一定可以成功取回所有資料 相反,有 cmd.Parameters 那一段就一定不行 (不行指的是沒有資料,空的) 我用這一段把 cmd 組裝的 sql foreach (SqlParameter p in cmd.Parameters) { cmd.CommandText = cmd.CommandText.Replace(p.ParameterName, p.Value.ToString()); } Response.Write(cmd.CommandText); 還原如下 SELECT CAST(LIFNR AS INT) as 供應商編號, NAME1 as 名稱, ORT01 as 城市, PSTLZ as 郵遞區號, STRAS as 地址, TELF1 as 聯絡人, TELFX as 電話, ADR6.SMTP_ADDR as eMail from prd.LFA1 left join prd.ADR6 on LFA1.ADRNR = ADR6.ADDRNUMBER WHERE NAME1 LIKE N'%泉%' 在 sql server management studio 中確定語法是對的... 但是搞不懂為什麼在 c# 組裝時就出問題 @ @ 爬文本版 #1Mswq2pb 好像症狀很像? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.20.129.1 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1469005893.A.44E.html ※ 編輯: aeolus0829 (211.20.129.1), 07/20/2016 17:14:32
CrazyAngel: http://goo.gl/QkvCO8 07/20 20:23
lucky1lk: " WHERE NAME1 LIKE '%'"+"@prName"+"'%' " 這樣? 07/20 20:37
J002: like @prName, 然後addWithValue(@prName, "%"+str+"%") 07/20 20:55
aeolus0829: 實測上述的方法都可以用~ 大感謝 07/21 08:45
aeolus0829: 搞不懂 like 的部份為什麼要特殊處理... = =a 07/21 08:46