分享

当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。

 长江黄鹤 2017-05-23
SqlConnection con = GetCon();
if (con.State.Equals(ConnectionState.Closed))
{
    con.Open();
}
SqlDataAdapter myAdapter = new SqlDataAdapter("SELECT * FROM " + table, con);
//直接使用上面的myAdapter重载方法赋值SELECT命令,所以注释下面两行
//SqlCommand myCommand = new SqlCommand("SELECT * FROM " + table, con);
//myAdapter.SelectCommand = myCommand;
SqlTransaction myTrans = con.BeginTransaction();//添加一个事务
//因为没有新建myCommand,而使用myAdapter.SelectCommand,所以注释并替换下面一行
//myCommand.Transaction = myTrans;
myAdapter.SelectCommand.Transaction = myTrans;
SqlCommandBuilder SCB = new SqlCommandBuilder(myAdapter);
//添加下面两行来指定UpdateCommand和InsertCommand命令
myAdapter.UpdateCommand = SCB.GetUpdateCommand();
myAdapter.InsertCommand = SCB.GetInsertCommand();
myAdapter.Fill(ds, table);
try
{
    myAdapter.Update(ds, table);
    ds.AcceptChanges();
    myTrans.Commit();                           //事务正常提交
    return true;
}
catch (SqlException ex)
{
    try
    {
        myTrans.Rollback();                                 //事务回滚
        throw new Exception("SQL数据库连接失败,操作数据库产生错误: " + ex.Message);
    }
    catch (SqlException ey)                                 //回滚失败
    {
        if (myTrans.Connection != null)
        {
            throw new Exception("数据回滚事务遇到一个异常类型 : " + ey.GetType());
        }
         
    }
    return false;
}
finally
{
    con.Close();
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多