如何在MS Access中显示gridview中的数据?

时间:2012-10-20 19:05:17

标签: c# asp.net database ms-access

我想显示存储在MS Access数据库中的用户的信息。用户输入他的用户ID并在点击按钮后跟随功能被调用。但是没有显示数据。我究竟做错了什么 ?

System.Data.OleDb.OleDbConnection con;
System.Data.OleDb.OleDbDataAdapter da;

protected void Button1_Click(object sender, EventArgs e)
{        
    con = new System.Data.OleDb.OleDbConnection();
    con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" 
       + "Data Source=C:\\Users\\sam\\Desktop\\mydb.mdb";
    con.Open();
    string sql = "SELECT * From Leave where userid="+Textbox1.Text;
    da = new System.Data.OleDb.OleDbDataAdapter(sql, con);
    DataTable t = new DataTable();
    da.Fill(t);
    GridView1.DataSource = t;
    con.Close();
}

3 个答案:

答案 0 :(得分:1)

您需要致电GridView1.DataBind()

 GridView1.DataSource = t;
 GridView1.DataBind();

请注意,最好将您的连接与using

打包在一起
using(con = new System.Data.OleDb.OleDbConnection())
{
   con = new System.Data.OleDb.OleDbConnection();
   con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" 
   + "Data Source=C:\\Users\\sam\\Desktop\\mydb.mdb";
   con.Open();
   ...
   ...
}

这可确保您的connection is properly disposed after use

答案 1 :(得分:0)

你应该使用绑定功能:

 protected void Button1_Click(object sender, EventArgs e)
    {        
       con = new System.Data.OleDb.OleDbConnection();
       con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" 
       + "Data Source=C:\\Users\\sam\\Desktop\\mydb.mdb";
       con.Open();
       string sql = "SELECT * From Leave where userid="+Textbox1.Text;
       da = new System.Data.OleDb.OleDbDataAdapter(sql, con);
       DataTable t = new DataTable();
       da.Fill(t);
       GridView1.DataSource = t;
       GridView1.DataBind();
       con.Close();
    }

答案 2 :(得分:0)

首先,请不要在SQL中连接WHERE参数。使用参数。其次,在模块顶部添加“using System.Data.OleDb”语句,这样您就不必输入如下内容:

System.Data.OleDb.OleDbDataAdapter

一遍又一遍。

尝试以下代码。就个人而言,当我不得不使用数据表等时,我宁愿避免所有DataAdapter的废话,并保持尽可能简单。

请注意以下代码:

  1. “使用”块。这些变量将在其中创建的变量放在自己的范围内,并为您处理。

  2. 我使用了OleDb参数而不是连接标准。这是一种更安全的方法,并且可以创建更清晰,更易读的代码,尤其是在WHERE子句中有多个条件的情况下。

  3. 我假设您的UserID输入是一个字符串,因为您从文本框中获取值。如果它实际上是一个int值(例如MS Access中的自动递增id),则需要使用int数据类型。你可能不得不惹一点。当你还在想出这些东西时,可能会有点痛苦。但是,使用参数可提高安全性和可维护性。

  4. 获取数据表作为MyUsers方法的返回后,您应该能够简单地设置Gridview的数据源。如果您仍然遇到困难,请按照Steve的建议并检查设计器中的Autogenerate columns属性,或者在代码中进行设置。

    1. 不是说我已将连接字符串移动到项目属性/设置。您应该在解决方案设计器中找到它。将连接字符串放在一个位置,您可以从代码中的任何位置获取它。如果您以后更改连接字符串(例如将Db移动到另一台计算机,服务器共享等),则只需在一个位置更改它。
    2. 示例代码:

      using System;
      using System.Collections.Generic;
      using System.ComponentModel;
      using System.Data;
      using System.Drawing;
      using System.Text;
      using System.Windows.Forms;
      using System.Data.OleDb;  // put this here, and stop writing long namespaces inline
      
      namespace WindowsFormsApplication3
      {
          public partial class Form1 : Form
          {
              public Form1()
              {
                  InitializeComponent();
              }
      
      
              private void button1_Click(object sender, EventArgs e)
              {
                  // Where possible, move code out of specific event handlers
                  // into methods which can be re-used from other client code. 
      
                  // Here, I pulled the actual data access out into separate methods, 
                  // and simply call it from the event handler:
                  this.LoadGridView(textBox1.Text);
              }
      
      
              private void LoadGridView(string UserID)
              {
                  // Now we can load the gridview from other places in our
                  // code if needed:
                  this.dataGridView1.DataSource = this.MyUsers(UserID);
              }
      
      
              private DataTable MyUsers(string UserID)
              {
                  var dt = new DataTable();
      
                  // Use a SQL Paramenter instead of concatenating criteria:
                  string SQL = "SELECT * FROM Leave WHERE userid = @UserID";
      
      
                  // The "using" statement limits the scope of the connection and command variables, and handles disposal
                  // of resources. Also note, the connection string is obtained from the project properties file:
                  using(OleDbConnection cn = new OleDbConnection(Properties.Settings.Default.MyConnectionString))
                  {
                      using (var cmd = new OleDbCommand(SQL, cn))
                      {
                          // For simpler things, you can use the "AddWithValue" method to initialize a new parameter, 
                          // add it to the Parameters collection of the OleDBCommand object, and set the value:
                          cmd.Parameters.AddWithValue("@UserID", UserID);
      
                          // Get in, get out, get done:
                          cn.Open();
                          dt.Load(cmd.ExecuteReader());
                          cn.Close();
                      }
                  }
      
                  return dt;
              }
          }
      }
      

      希望有所帮助。这并不是每个人都可以这样做的,但我发现当你必须使用MS Access时,它提供了最大的灵活性。