2011-05-27 67 views
1

我正在寻找一些关于如何最好地使用SqlDataAdapter来访问和更新我的应用程序中的数据的例子。 现在我有这样的事情:使用SqlDataAdapter读取和更新数据问题

SqlDataAdapter adapter; 
DataSet myData = MyDataAccessClass.GetData("Select * from Students", ref adapter); 
// change some data here and save changes 
adapter.Update(); 

所有这一切都发生在后面的代码,我真的不喜欢它。 所以,我试图找到一种方法,做这样的事情:

DataSet myData = MyDataAccessClass.GetStudents(); 
// change some data and save changes 
MyDataAccessClass.SaveStudents(myData); 

SaveStudents方法仍然使用的SqlDataAdapter更新数据库。

任何关于如何使这项工作的想法或一些指针做的 这样的最佳做法是高度赞赏。谢谢。

回答

0

这似乎是一个相当基本的数据访问层实现,对我来说。一般情况下,我做这样的事情:

public class MyDataAccessClass 
{ 
    private string ConnString; 

    public MyDataAccessClass() 
    { //Get connection string from configuration file } 

    public MyDataAccessClass(string connString) 
    { ConnString = connString; } 

    public DataSet GetAllStudents() 
    { 
     //your SQL Adapter code here... 
    } 
} 

一个说明,我想提出的是,有这么多的ORM解决方案(包括刚刚实体框架和LINQ2SQL)可用,您可能要考虑使用对象的集合,而不是数据表示的数据集。然后你可以有一个方法,如:

public void CreateUpdateStudent(Student student) 
{ 
    //update database 
} 

这是相当主观的,我承认,但我觉得最好是使用直的DataSets。

+0

您的示例与我所用的类似,只是GetAllStudents方法返回了用于获取数据的sqldataadapter的引用,然后将其用于我的UI代码中以进行更新。我试图改变它,所以我没有在我的代码隐藏中使用sqldataadapters,因为我不认为它适合他们。同时,我仍然必须使用sqldataadapter在我的DAL中进行更新。 – chiefanov 2011-05-27 16:58:35

+0

此外,我都是实体框架和对象而不是数据集,但不幸的是,在这个特定的项目中,我没有选择为我的DAL使用什么。 – chiefanov 2011-05-27 17:00:01

+0

在某些时候,你仍然必须有一个查询数据库的类。无论是直接在你的代码背后,还是在其他引用的程序集中,都不会改变一些代码要做的事实。我通常有一个名为SolutionName.DAL(或.DATA)的单独项目,我的业务层然后引用它。通常,我可以设置它,以便表示层甚至不知道数据库。 – AllenG 2011-05-27 17:01:24

0

如果你想使用SQL数据适配器,那么你可以使用这些

使用System.Data.SqlClient的获得更新数据;

 SqlConnection con = new SqlConnection("Data Source=abcd-pc;Initial Catalog=user_info;Integrated Security=True"); 
     SqlDataAdapter da = new SqlDataAdapter(); 
     try 
     { 

      da.UpdateCommand = new SqlCommand("Update logindemo set [email protected] where [email protected]",con); 
      da.UpdateCommand.Parameters.Add("@pswd", SqlDbType.VarChar).Value = txtpass.Text; 
      da.UpdateCommand.Parameters.Add("@uname", SqlDbType.VarChar).Value = txtusername.Text; 
      con.Open(); 
      da.UpdateCommand.ExecuteNonQuery(); 
      Label1.Text = "Data Updated"; 
      con.Close(); 

     } 
     catch 
     { 
      Label1.Text = "Unable To Connect"; 
     } 

我希望您能够理解如何轻松更新数据。它就像这个例子。您可以在插入到数据中使用这些类型的示例,并根据需要使用特定的命令和sql查询来删除数据。