在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();
}
}
}
当我需要查询数据库时,每次都需要执行所有这些过程吗?
如果您只是为一个查询手动设置一个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();
}
}
现在,这可能不完全符合您的需求,我相信人们可能会争论这种方法,但这意味着更多的是一个例子,您可以如何精简您的数据访问,使其更易于维护和可扩展的道路