我正在使用.NET框架和C#语言在表单应用程序中为我的学校项目构建一个Intranet。此函数填充表单内的数据网格。但是,while结构中的代码不会运行。我已经一步一步地使用调试器,我认为" dr"的read()方法。对象不会通过我的两个内连接表,但当我按下一个按钮,我已经设置向我显示在数据库中注册了多少本书,它的工作原理。我认为我的SQL语句有问题,我在这个网站上搜索过,但我没有设法解决这个bug。 Carti.Nota和Carti.Stoc是Microsoft Access 2013数据库中具有Number类型的列。
private void PopulateGridBooks()
{
dataGridView1.Rows.Clear();
using (OleDbConnection connect = new OleDbConnection(ConfigurationManager.ConnectionStrings["LibrarieConectare"].ConnectionString))
{
OleDbCommand command = connect.CreateCommand();
command.Parameters.AddWithValue("@titlu", cautaTitlu.Text);
command.CommandText =
" SELECT Carti.IDCarte, Carti.Titlu, Carti.Editie, Carti.An, Carti.ISBN, Carti.Nota, Carti.IDAutor, Carti.Stoc, Edituri.NumeEditura " +
" FROM (Carti INNER JOIN Edituri ON Carti.IDEditura = Edituri.IDEditura) " +
" WHERE Titlu LIKE '%@titlu%'";
try
{
connect.Open();
OleDbDataReader dr = command.ExecuteReader();
if (dr.HasRows)
{
while (dr.Read())
{
dataGridView1.Rows.Add(dr["IDCarte"], dr["Titlu"], dr["NumeEditura"], dr["Stoc"]);
}
}
}
catch (Exception ex)
{
MessageBox.Show("Eroare la populare data grid carti: " + ex.Message);
}
}
}
答案 0 :(得分:1)
想想我发现了 - 你的参数错了,你不应该在AddwithValue中有@。
使用:
//Exclude the @ in the below.
command.Parameters.AddWithValue("titlu", cautaTitlu.Text);
也可以将参数添加行移到命令文本之后。
答案 1 :(得分:1)
试试这个,
command.CommandText =
" SELECT Carti.IDCarte, Carti.Titlu, Carti.Editie, Carti.An, Carti.ISBN, Carti.Nota, Carti.IDAutor, Carti.Stoc, Edituri.NumeEditura " +
" FROM Carti INNER JOIN Edituri ON Carti.IDEditura = Edituri.IDEditura " +
" WHERE Titlu LIKE '%' + @titlu + '%';
答案 2 :(得分:0)
我建议将where子句更改为以下内容: “在哪里Titlu喜欢'%'+ @titlu +'%'”