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 + '%'"
我正在使用 .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 + '%'"