C# .NET:OleDbDataReader 的读取方法 class 不会 运行

C# .NET: read method of OleDbDataReader class won't run

我正在使用 .NET 框架和 C# 语言在表单应用程序中为我的学校项目构建一个 Intranet。此函数填充表单内的数据网格。但是,while 结构中的代码不会 运行。我已经一步一步地使用调试器,我估计 "dr" 对象的 read() 方法不会通过我的两个内部连接表,但是当我按下一个按钮时,我已经设置为向我展示如何许多书都在数据库中注册,它有效。根据我在此站点上的搜索,我认为我的 SQL 声明有问题,但我没有设法解决该错误。 Carti.Nota 和 Carti.Stoc 是 Microsoft Access 2013 数据库中数字类型的列。

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);
            }
        }
    }

我想我找到了 - 你的参数是错误的,你不应该在 AddwithValue 中有一个@。

使用:

//Exclude the @ in the below. 
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 +  '%';

我建议更改 where 子句如下: "WHERE Titlu LIKE '%' + @titlu + '%'"