在visual studio 2012中添加和查询数据库

本文关键字:查询 数据库 添加 visual studio 2012 | 更新日期: 2023-09-27 18:12:45

我已经将我的数据库作为数据源添加到我的visual studio c#项目中。现在,我想查询数据库。我需要手动设置与数据库的连接字符串吗?

public void setSQL()
{
    string ConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:''Users''jasper''Desktop''AutoReg''AutoReg.accdb;";
    OleDbConnection MyConn = new OleDbConnection(ConnStr);
    MyConn.Open();
    DataSet ds = new DataSet();
    //query to ask
    string query = "SELECT * FROM Student";
    using (OleDbCommand command = new OleDbCommand(query, MyConn))
    {
        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
        {
            adapter.Fill(ds);
            dataGridView1.DataSource = ds;
            MyConn.Close();
        }
    }
}

当我需要查询数据库时,每次都需要执行所有这些过程吗?

在visual studio 2012中添加和查询数据库

如果您只是为一个查询手动设置一个db连接,那么没有更简单的方法可以做到这一点。不过,我建议对代码进行一些清理。正如在您的示例中所写的那样,如果查询期间出现错误,MyConn将保持打开状态。这可以通过切换它并将其放在using:

来修复。
public void setSQL()
{
    string ConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:'Users'jasper'Desktop'AutoReg'AutoReg.accdb;";
    DataSet ds = new DataSet();
    //query to ask
    string query = "SELECT * FROM Student";
    using (OleDbConnection MyConn = new OleDbConnection(ConnStr))
    {
        MyConn.Open();
        using (OleDbCommand command = new OleDbCommand(query, MyConn))
        {
            using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
            {
                adapter.Fill(ds);                           
            }
        }
    }
    dataGridView1.DataSource = ds; 
}

如果你想改变这一点,使它更容易,如果你需要在未来添加更多的查询,那么我建议移动到3层架构与业务逻辑层(BLL)和数据访问层(DAL)。在这里,您可以有一个基本的DAL类,它为Fill(), ExecuteScalar(), ExecuteNonQuery()等定义一些标准方法。

你可以在互联网上找到无数的这种设置的例子,但我把一个相当简单的例子放在一起:

这是一个可能的DAL基类的草图。注意它是如何根据传入的DB命令管理到数据库的实际连接的:

public abstract class DALBase
{
    private const string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:'Users'jasper'Desktop'AutoReg'AutoReg.accdb;";
    protected DataSet Fill(OleDbCommand command)
    {
        DataSet ds = new DataSet();
        using (OleDbConnection myConn = new OleDbConnection(connStr))
        {
            command.Connection = myConn;
            myConn.Open();
            using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
            {                                    
                adapter.Fill(ds);                                    
            }
        }
        return ds;
    }
    protected void ExecuteNonQuery(OleDbCommand command)
    {
        using (OleDbConnection myConn = new OleDbConnection(connStr))
        {
            command.Connection =  myConn;                            
            myConn.Open();
            command.ExecuteNonQuery();
        }
    }
    // put any other methods you need here    
}

然后可以为Student表创建一个特定于表的DAL类来处理查询和命令。这使您的查询逻辑都在一个地方:

public class StudentDAL : DALBase
{
    public DataSet GetAllStudents()
    {
        DataSet ds = null;
        //query to ask
        string query = "SELECT * FROM Student";
        using (OleDbCommand command = new OleDbCommand(query))
        {
            ds = Fill(command);            
        }   
        return ds;     
    }
    public void UpdateStudentName(int studentID, string name)
    {            
        string query = "UPDATE Student SET Name = @Name WHERE StudentID = @StudentID";
        using (OleDbCommand command = new OleDbCommand(query))
        {
            command.Parameters.AddWithValue("@Name", name);
            command.Parameters.AddWithValue("@StudentID", studentID);
            ExecuteNonQuery(command);            
        }        
    }
}

然后,您将创建一个特定于表的BLL类来处理需要发生在DAL和需要从数据库获取信息的类之间的任何中间逻辑:

public class StudentBLL
{
    private _studentDAL = new StudentDAL();
    public DataSet GetAllStudents()
    {        
        return _studentDAL.GetAllStudents();                    
    }
    public void UpdateStudentName(Student student)
    {        
        _studentDAL.UpdateStudentName(student.StudentID, student.Name);                    
    }
}

在这种特殊情况下,这些方法几乎只是调用相应的DAL。但是,如果您需要执行任何其他逻辑(类型转换、某种公式等),则可以在这里执行。我想我假设的UpdateStudentName方法是一个小例子。如果你看一下它,你会看到它只是接受一个Student对象,并将其拆分发送到DAL。这防止了UI层(或其他调用类)需要担心这个。

最后,您将通过从需要信息的类中调用一个BLL对象来调用数据库:

public class SomeOtherClass
{
    DataGridView dataGridView1;        
    public void PopulateDataGridView1()
    {
        dataGridView1.DataSource = new StudentBLL().GetAllStudents();
    }        
}

现在,这可能不完全符合您的需求,我相信人们可能会争论这种方法,但这意味着更多的是一个例子,您可以如何精简您的数据访问,使其更易于维护和可扩展的道路