您的位置:首页 > 数据库

利用SqlDataAdapter复制数据行

2009-12-15 16:21 387 查看
项目中需要实现一个数据行的复制功能,也就是有些数据信息,大部分内容都是一样的,只有少数几个参数不同,实现这个功能以简化用户的输入。



按理说,这种功能实现起来非常简单,但是这里有个问题,表的字段非常多,超过100,以前,都是习惯于手写SQL,这时麻烦就来了,SQL还真长,虽然可以利用工具生成,但参数的设置还得手工调整,总之字段太多,看着头就晕。



这时,我想到了SqlCommandBuilder。“SqlDataAdapter不会自动实现生成DataSet的更改与关联的SQL Server实例之间的协调所需的SQL语句。但是,如果设置了SqlDataAdapter的SelectCommand属性,则可以创建一个SqlCommandBuilder对象来自动生成用于单表更新的T-SQL语句。”



根据MSDN的示例,我得到下面的一段代码:



static private DataSet CreateCommandAndUpdate(
    string connectionString,
    string queryString)
    {
        DataSet dataSet = new DataSet();
        using (SqlConnection connection =
                   new  SqlConnection(connectionString))
        {
            connection.Open();
            SqlDataAdapter dataAdapter =
                new SqlDataAdapter();
            //1
            dataAdapter.SelectCommand =
                new SqlCommand(queryString, connection);
            SqlCommandBuilder commandBuilder =
                new SqlCommandBuilder(dataAdapter);
            dataAdapter.Fill(dataSet);
            if (dataSet.Tables[0].Rows.Count > 0)
            {
                DataRow dr = dataSet.Tables[0].Rows[0];
                //2
                dataSet.Tables[0].ImportRow(dr);
                dataSet.Tables[0].AcceptChanges();
                DataRow row = dataSet.Tables[0].Rows[dataSet.Tables[0].Rows.Count - 1];
                //3
                row.SetAdded();
                row["txt1"] = "ttt";
            }
            // Code to modify data in the DataSet here.
            //Without the OleDbCommandBuilder this line would fail.
            dataAdapter.Update(dataSet);
        }
        return dataSet;
    }





在注释“1”处,创建了一个SqlCommandBuilder对象。



在注释“2”处,利用ImportRow方法,在DataSet中导入一条新记录,然后需要做一下AcceptChanges(),接收这个变化。



在注释“3”处,对新添加的这条记录应用SetAdded()方法,改变其状态为Added,这时就可以根据需要改变某字段的值了。



最后利用SqlDataAdapter的Update方法,就能将数据更新到数据库了。



--------------------------------------------------------------

【附】DataRowState枚举成员



Added

该行已添加到 DataRowCollection 中,AcceptChanges 尚未调用。

Deleted

该行已通过 DataRow 的 Delete 方法被删除。

Detached

该行已被创建,但不属于任何 DataRowCollection。DataRow 在以下情况下立即处于此状态:创建之后添加到集合中之前;或从集合中移除之后。

Modified

该行已被修改,AcceptChanges 尚未调用。

Unchanged 该行自上次调用 AcceptChanges 以来尚未更改。



******
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: