如何读取ms访问数据库中的数据并将其显示在列表框中。我这里有代码但是我有错误。
private void button3_Click(object sender, EventArgs e)
{
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\Sisc-stronghold\mis!\wilbert.beltran\DataBase\DataStructure.accdb"))
using(OleDbCommand cmd = new OleDbCommand(" SELECT * from TableAcct", conn))
{
conn.Open();
OleDbDataReader Reader = cmd.ExecuteReader();
//if (Reader.HasRows)
if (Reader.HasRows)
{
Reader.Read();
listBox1.Text = Reader.GetString("FirstName");
}
}
错误在这里: 1.错误1'System.Data.Common.DbDataReader.GetString(int)'的最佳重载方法匹配具有一些无效参数。 2.错误2参数'1':无法从'string'转换为'int'
答案 0 :(得分:5)
尝试这个,
List<String> firstName = new List<String>();
List<String> lastName = new List<String>();
private void loadButton_Click(object sender, EventArgs e)
{
cn.Open();
OleDbDataReader reader = null;
cmd = new OleDbCommand("select* from Records", cn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
firstName.Add(reader["FirstName"].ToString());
lastName.Add(reader["LastName"].ToString());
}
cn.Close();
}
然后在搜索按钮中插入,
private void searchButton_Click(object sender, EventArgs e)
{
clearSearchResult();
try
{
int totalItems = FirstName.Count;
int count = 0;
while (count < totalItems)
{
if (textBox6.Text == FirstName[count].ToString())
{
listBox1.Items.Add(FirstName[count].ToString());
count = 100;
}
else
{
count++;
}
如果您想要在"FirstName"
中显示listBox1_SelectedIndexChanged
的信息,可以使用它。这是一个例子,
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
int totalItems = lastName.Count;
int count = 0;
while (count < totalItems)
{
if ((listBox1.SelectedItem.ToString()) == firstName[count].ToString()))
{
textBox1.Text = firstName[count].ToString();
textBox2.Text = lastName[count].ToString();
count = 100;
}
else
{
count++;
}
}
希望这有帮助,
答案 1 :(得分:1)
GetString()
将int作为参数而不是字符串。这意味着您必须使用列的索引。
在您的特定情况下,“FirstName”是第二列,索引将为1:
listBox1.Text = Reader.GetString(1);
http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbdatareader.getstring.aspx
答案 2 :(得分:1)
更改
listBox1.Text = Reader.GetString("FirstName");
到
listBox1.Text = Reader.GetString(0); // zero base ordinal of column
答案 3 :(得分:1)
你使用While循环
while(reader.Read())
{
listbox1.Items.Add(reader["FirstName"]);
}
这会移动您选择的所有行。如果没有更多行,reader.Read()
会返回false
。
另外:如果您想要从列中检索valmue,我建议您使用索引ónreader
实例来执行此操作。就像我的例子。
var value = reader["ColumnName"];
与
相比,这增加了可读性var value = reader.GetString(0);
更新
如果你只想显示第一个值 - 我建议你使用cmd.ExecuteScalar()
并调整你的sql只返回你需要的值:
using(OleDbCommand cmd = new OleDbCommand("SELECT firstname from TableAcct", conn))
{
conn.Open();
var firstName = cmd.ExecuteScalar();
}
请注意,这会在表格中为您提供 first “FirstName”。由于没有"order by firstname"
或"where someKey = 1"
- 这可能不会达到预期效果。
答案 4 :(得分:1)
如果您想创建MS Access数据库并访问它,并在某个组件中显示数据,就像这里我将向您展示如何连接MS Access数据库并显示Label中数据库的数据。 首先创建任何Access数据库,例如“PirFahimDataBase”。 现在在Visual Studio中转到菜单并执行此操作
现在在Button ClickEvent中粘贴这些代码,这些代码将从数据库中获取数据并将其显示在标签中
using System.Windows.Forms; //these two lines should be written before namespace at top of the program
using System.Data.OleDb;
private void button1_Click(object sender, EventArgs e)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
@"Data source= C:\Users\pir fahim shah\Documents\PirFahimDataBase.accdb";
try
{
conn.Open();
MessageBox.Show("connected successfuly");
OleDbDataReader reader = null; // This is OleDb Reader
OleDbCommand cmd = new OleDbCommand("select TicketNo from Table1 where Sellprice='6000' ", conn);
reader = cmd.ExecuteReader();
while (reader.Read())
{
label1.Text= reader["TicketNo"].ToString();
}
}
catch (Exception ex)
{
MessageBox.Show("Failed to connect to data source");
}
finally
{
conn.Close();
}
}//end of button click event
答案 5 :(得分:0)
您的错误就在这一行:
listBox1.Text = Reader.GetString("FirstName");
您必须在GetString()
函数中传递一个数字。
答案 6 :(得分:0)
DataColumn[] PrimaryKeyColumn = new DataColumn[1]; //Define Primary coloumn
DataSet dataSet = new DataSet();
DataTable dataTable = new DataTable();
ReadAndUpdateExcel.ReadExcel(strPath, sheetName, out dataSet);
dataSet.Tables.Add(dataTable);
PrimaryKeyColumn[0] = dataSet.Tables[0].Columns[0];
dataSet.Tables[0].PrimaryKey = PrimaryKeyColumn;
string num = dataSet.Tables[0].Rows[dataSet.Tables[0].Rows.IndexOf(dataSet.Tables[0].Rows.Find(strTCName))]["ACNO"].ToString();
//string country