【问题标题】:Reading and Updating Data Using SqlDataAdapter Question使用 SqlDataAdapter 读取和更新数据问题
【发布时间】:2011-09-03 13:19:24
【问题描述】:

我正在寻找一些关于如何最好地使用 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来更新db。

关于如何完成这项工作的任何想法或一些关于最佳实践的建议 像这样的东西受到高度赞赏。谢谢。

【问题讨论】:

    标签: data-access-layer sqldataadapter


    【解决方案1】:

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

    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
    }
    

    这是相当主观的,我承认,但我发现它比直接使用 DataSet 更可取。

    【讨论】:

    • 您的示例与我的示例类似,除了 GetAllStudents 方法返回一个用于获取数据的 sqldataadapter 的引用,然后在我的 UI 代码中使用它来进行更新。我正在尝试更改它,因此我的代码隐藏中没有 sqldataadapter,因为我认为它不适合它们。同时我仍然必须使用 sqldataadapter 在我的 DAL 中进行更新。
    • 另外,我完全支持实体框架和对象而不是数据集,但不幸的是,在这个特定项目中,我没有选择用于我的 DAL 的内容。
    • 在某些时候,您仍然需要有一个查询数据库的类。无论是直接在您后面的代码中,还是在其他一些引用的程序集中,都不会改变某些代码将执行此操作的事实。我通常有一个名为 SolutionName.DAL(或 .DATA)的单独项目,然后我的业务层会引用它。通常,我可以设置它,使表示层甚至不知道数据库。
    • 对,我的代码隐藏确实引用了另一个类,该类执行所有数据库交互,但通过代码隐藏中的 sqldataadapter 完成的更新除外。也许我试图做的太多了,但在我看来 UI 代码隐藏不是 sqldataadapter 的正确位置,它应该进入我的数据库访问类。
    • 你找到更好的答案了吗?
    【解决方案2】:

    如果您想使用 sql-data-adapter 获取更新数据,那么您可以使用这些

    使用 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 password=@pswd where username=@uname",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 查询来删除数据。

    【讨论】:

      猜你喜欢
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多