使用WPF成功连接后无法从Access数据库获取数据

时间:2016-10-14 13:58:36

标签: c# wpf ms-access combobox

我正在用WPF项目编写C#代码。我有一个ComboBox1下拉列表,用户从我的计算机上的Microsoft Access数据库中选择一个项目。在用户选择某些内容之后,我想从用户刚刚选择进入文本块的同一行中检索某个值。

我收到了3个完全相同的错误,并说出" 名称' connect'在当前上下文中不存在。"我不知道如何解决这个问题。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.Data;
using System.ComponentModel;

namespace bundlecalc
{

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            MainWindow_Load();
        }

        private void MainWindow_Load()
        {   
            OleDbConnection connect = new OleDbConnection();
            connect.ConnectionString =  @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Projects\Database.accdb;
            Persist Security Info = False; ";
            connect.Open();

            OleDbCommand command = new OleDbCommand();
            command.Connection = connect;
            command.CommandText = "SELECT Column1 FROM Table1";

            OleDbDataReader reader = command.ExecuteReader();

            while(reader.Read())
            {
                ComboBox1.Items.Add(reader["Column1"].ToString());
            }
            connect.Close();

        }

        private void ComboBox1_SelectedIndexChanged(object sender, RoutedEventArgs e)
        {
            connect.Open();

            OleDbCommand command = new OleDbCommand();
            command.Connection = connect;
            string query = "select * from Table1 where Column1 ='" + ComboBox1.Text + "'";
            command.CommandText = query;

            OleDbDataReader reader = command.ExecuteReader();

            while (reader.Read())
            {
                BetaAnswer.Text = reader["ValueFromRow"].ToString();
            }

            connect.Close();
        }
    }
}

1 个答案:

答案 0 :(得分:5)

MainWindow_Load中,您声明了connect变量:

OleDbConnection connect = new OleDbConnection();

但在ComboBox1_SelectedIndexChanged你不是。只需在该方法中声明它。

您还可以查看using块以获取数据库连接等可支配资源。类似的东西:

using (OleDbConnection connect = new OleDbConnection())
{
    // use the connection
}

(你可能会试图让connect变量成为类级成员,可以被类中的所有内容重用。不要。这是一个应该在很小的范围内创建,使用和销毁数据库连接。连接池会为您重复使用。尝试自己处理重用会导致问题。)