![](/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.