【问题标题】:Is it possible to update/insert data into dataset with SqlCommand?是否可以使用 SqlCommand 将数据更新/插入数据集中?
【发布时间】:2010-10-27 04:09:21
【问题描述】:

我使用此代码更新数据库表中的数据。 可以重复使用相同的代码来更新数据集吗? 谢谢。

 using (SqlConnection cn =  new SqlConnection(ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString))
        {
            string sql = "UPDATE tbh_Categories SET Title = @Title, 
                           Description = @Description 
                           WHERE CategoryID = @CategoryID";
            SqlCommand cmd = new SqlCommand(sql, cn);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add("@CategoryID", SqlDbType.Int).Value = category.ID;
            cmd.Parameters.Add("@Title", SqlDbType.NVarChar).Value = category.Title;
            cmd.Parameters.Add("@Description", SqlDbType.NVarChar).Value = category.Description;

            cn.Open();
            int ret = cmd.ExecuteNonQuery();

            return (ret == 1);
        }

【问题讨论】:

    标签: asp.net sql dataset


    【解决方案1】:

    您必须稍微更改您的代码。您应该使用SqlDataAdapter 的实例并使用它的Update 方法。来自 MSDN 的小 code sample

    public DataSet CreateCmdsAndUpdate(string connectionString,
        string queryString) 
    {
        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            OleDbDataAdapter adapter = new OleDbDataAdapter();
            adapter.SelectCommand = new OleDbCommand(queryString, connection);
            OleDbCommandBuilder builder = new OleDbCommandBuilder(adapter);
    
            connection.Open();
    
            DataSet customers = new DataSet();
            adapter.Fill(customers);
    
            //code to modify data in dataset here
    
            adapter.Update(customers);
    
            return customers;
        }
    }
    

    【讨论】:

      【解决方案2】:

      答案是否定的。但是,您可以使用 DataTable.Select 来标识 DataTable 中要更新的行。但是随后您将不得不“手动”修改实际表本身。

      我必须问一下您要做什么...例如,您是否要尝试使用可更新的 DataSet 缓存一些数据?或者您是否试图避免额外的数据库访问?如果您让我们知道,可能会有更好的方法来做您想做的事情。如果你想要一个内存数据库,有are lots out there

      每条评论:查看SQLite。有.NET Wrappers 可以让你为所欲为。

      【讨论】:

      • 正如我在上面的评论中所写。我想为我的应用程序创建一个临时演示,而不让人们实际删除和更新表记录。因此,为此我决定使用数据集并将其保持在会话中,因此所有操作都将在此数据集上完成(不用担心内存浪费,因为它会受到限制)
      【解决方案3】:

      不,我不这么认为。循环遍历 DataTable 的行,或者更新数据库并重新加载。

      【讨论】:

      • 我需要在内存中存储和操作数据库,作为演示展示(我不希望人们更改我的数据库)。所以每次会话数据都会“恢复”。
      【解决方案4】:

      完全相同的代码?不。SqlConnection(和 SqlCommand)是特定于 SqlServer 的。 DataSet 存在于该上下文之外,因此您必须重写代码以适应更新 DataSet。

      【讨论】:

      • 我的意思是使用 SQL 语法,如果可以的话怎么做?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 2011-02-26
      • 2011-03-09
      • 2018-03-25
      • 1970-01-01
      相关资源
      最近更新 更多