![](/img/trans.png)
[英]Best practices to Minimize/Manage SQL string blobs in data access code (e.g. Dapper)
[英]SQL Query delivers no results despite working in e.g. Access?
這是問題所在:
我正在使用 Visual Studio 並制作了一個 Winforms 應用程序。 這應該與數據庫一起使用。 使用 SQL 查詢讀取數據庫工作正常,沒有任何問題。
cmd.CommandText =
"SELECT Buecher.Bu_ISBN AS ISBN,
Buecher.Bu_Titel AS Titel,
Buecher.Bu_Originaltitel AS Originaltitel,
Buecher.Bu_Buchreihe AS Buchreihe,
Buecher.Bu_Genre AS Genre,
Autor.Au_Vorname AS [Autor-Vorname],
Autor.Au_Nachname AS[Autor-Nachname],
Verlag.Ve_Name AS Verlag
FROM ((((Buecher
INNER JOIN [Buch-Autor]
ON Buecher.Bu_ID = [Buch-Autor].Bu_ID)
INNER JOIN Autor
ON [Buch-Autor].Au_ID = Autor.Au_ID)
INNER JOIN [Buch-Verlag]
ON Buecher.Bu_ID = [Buch-Verlag].Bu_ID)
INNER JOIN Verlag
ON [Buch-Verlag].Ve_Name = Verlag.Ve_Name)";
ausgabe();
(它是德語,ausgabe() 是一種將 Query 傳輸到 DataGridView 的方法 - 工作正常)
稍后在程序中,用戶將使用文本框使用各種條件進行搜索,這就是它不再起作用的地方,只是不執行查詢。
if (optBuch.Checked == true)
{
cmd.CommandText =
"SELECT Buecher.Bu_ISBN AS ISBN,
Buecher.Bu_Titel AS Titel,
Buecher.Bu_Originaltitel AS Originaltitel,
Buecher.Bu_Buchreihe AS Buchreihe,
Buecher.Bu_Genre AS Genre,
Autor.Au_Vorname AS [Autor-Vorname],
Autor.Au_Nachname AS [Autor-Nachname],
Verlag.Ve_Name AS Verlag
FROM ((((Buecher
INNER JOIN [Buch-Autor]
ON Buecher.Bu_ID = [Buch-Autor].Bu_ID)
INNER JOIN Autor
ON [Buch-Autor].Au_ID = Autor.Au_ID)
INNER JOIN [Buch-Verlag]
ON Buecher.Bu_ID = [Buch-Verlag].Bu_ID)
INNER JOIN Verlag
ON [Buch-Verlag].Ve_Name = Verlag.Ve_Name)
WHERE (Buecher.Bu_ISBN = '%" + txtOpt1.Text + "%')
AND (Buecher.Bu_Titel = '%" + txtOpt2.Text + "%')
AND (Buecher.Bu_Originaltitel = '%" + txtOpt3.Text + "%')
AND (Buecher.Bu_Buchreihe = '%" + txtOpt4.Text + "%')
AND (Buecher.Bu_Genre = '%" + txtOpt5.Text + "%')
AND (Autor.Au_Vorname = '%" + txtOpt6.Text + "%')
AND (Autor.Au_Nachname = '%" + txtOpt7.Text + "%')
AND (Verlag.Ve_Name = '%" + txtOpt8.Text + "%')";
我嘗試了各種形式的查詢,但直到現在都沒有人工作。 當我刪除整個“ Where ”部分時,它完全正常......
我希望我能用一種可以理解的方式表達自己。
如果要使用通配符,則不能使用操作數“=”。 將“=”替換為“喜歡”。
所以它看起來像這樣:
WHERE(Buecher.Bu_ISBN like '%" + txtOpt1.Text + "%') AND
(Buecher.Bu_Titel like '%" + txtOpt2.Text + "%')
除了@The Integrator 建議的LIKE
使用之外,您可能需要OR
而不是AND
否則該行必須匹配所有要返回的條件。
WHERE (Buecher.Bu_ISBN = '%" + txtOpt1.Text + "%')
OR (Buecher.Bu_Titel = '%" + txtOpt2.Text + "%')
OR (Buecher.Bu_Originaltitel = '%" + txtOpt3.Text + "%')
OR (Buecher.Bu_Buchreihe = '%" + txtOpt4.Text + "%')
OR (Buecher.Bu_Genre = '%" + txtOpt5.Text + "%')
OR (Autor.Au_Vorname = '%" + txtOpt6.Text + "%')
OR (Autor.Au_Nachname = '%" + txtOpt7.Text + "%')
OR (Verlag.Ve_Name = '%" + txtOpt8.Text + "%')";
還需要使用參數,否則容易受到Sql Injection 攻擊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.