现在我花了几个小时试图解决问题,谷歌搜索和阅读论坛,但我没有找到答案!
我需要制作某种商业应用程序"作为我学校的一个项目,我需要对公司的客户进行概述。 我正在使用Microsoft Visual C#2010 Express和Access 2010,并使用OleDb在C#中编写。
我的问题是:
如何为应用程序创建搜索框/表单以搜索访问数据库(.accdb)中的信息。 我想使用一个文本框,我从我的数据库中写一些东西,例如公司的名字,然后按下搜索按钮。现在它应该写下所有与公司名称相关的信息,可以在DataGrid的数据库中找到。
也许这个项目太大了,所以如果有人做了一个不那么复杂的搜索功能,我也会很感激。
这里是代码,填写错误.Fill(数据集," Food");. InvalidOperationException未处理。填充:SelectCommand.Connection尚未初始化。 只需使用一个名为" Food"的表来测试一个简单的访问数据库。食物ID,食物名称和价格。
private void button1_Click(object sender, RoutedEventArgs e)
{
GetCustomers(textBox1.Text);
}
// Load Data from the DataSet into the DataGridView
private void GetCustomers(string searchTerm)
{
DataSet dataset = new DataSet();
using (OleDbConnection connection =
new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Niclas\Desktop\Skole\Programmering\Database\Food.accdb;Persist Security Info=False;"))
{
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(
"select * from Food where FoodID like ('" + searchTerm + "', connection");
adapter.Fill(dataset, "Food");
}
// Get the table from the data set and bind the data to the grid
this.dataGrid1 = new System.Windows.Controls.DataGrid();
dataGrid1.DataContext = dataset.Tables[0];
}
}
答案 0 :(得分:1)
您可以发布不起作用的代码吗?
基本上在搜索按钮的单击事件上,您将调用一个函数来填充DataGridView,例如:
GetCustomers(textBox1.Text);
// Load Data from the DataSet into the DataGridView
private void GetCustomers(string searchTerm)
{
DataSet dataset = new DataSet();
using (OleDbConnection connection =
new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccess2007file.accdb;Persist Security Info=False;"))
{
OleDbDataAdapter adapter = new OleDbDataAdapter();
adapter.SelectCommand = new OleDbCommand(
"select * from customer where name like %" + searchTerm + "%", connection);
adapter.Fill(dataset, "Customers");
}
// Get the table from the data set and bind the data to the grid
DataGridView.DataSource = dataset.Tables[0];
}
我在这台电脑上没有Visual Studio,因此可能存在语法错误,但这应该可以帮助您入门。
答案 1 :(得分:1)
我有一个像这样的方法(这已经从VB转换):
private void Search()
{
string[] strSplitString = null;
string strSearchString = "";
strSplitString = Strings.Split(txtSearch.Text.Trim);
// Check to see if there are any strings
if (strSplitString.Count == 1) {
// Construct the search string
strSearchString = "FirstName Like '%" + strSplitString[0] + "%' Or MiddleName Like '%" + strSplitString[0] + "%' Or LastName Like '%" + strSplitString[0] + "%'";
} else if (strSplitString.Count > 1) {
// Construct the string
strSearchString = "(FirstName Like '%" + strSplitString[0] + "%' Or MiddleName Like '%" + strSplitString[0] + "%' Or LastName Like '%" + strSplitString[0] + "%')";
// For each word add it to the search string
for (intWord = 1; intWord <= (strSplitString.Count - 1); intWord++) {
strSearchString += " And (FirstName Like '%" + strSplitString[intWord] + "%' Or MiddleName Like '%" + strSplitString[intWord] + "%' Or LastName Like '%" + strSplitString[intWord] + "%')";
}
}
// Filter the binding source
BindingSource.Filter = strSearchString;
}
可能有更好的方法,但这个项目也反对一个相当大的访问数据库,似乎工作得很好