最近使用SqlDataAdapter 来进行批量的insert 和 update现在问题是,如果我自己创建了一个相对应的datatable,并且添加了10条数据。
这个时候用的是insert,可是问题是如何判断这10条数据在数据库里面是不是存在的。
总不能根据key一条一条的去搜索,不知道有没有什么思路来解决这个问题。
我原来是一条一条更新的,先update 然后根据返回值的大小来判断是不是进行insert的。这里先谢谢,谢谢,再谢谢了。

解决方案 »

  1.   


    比如有没有给个datatable,然后一个sql问,最好返回那条数据在数据库存在。呵呵估计是没有办法了,看来只能一条一条for过去了。
      

  2.   

    那也不一定要用FOR,检查有多种写法。
      

  3.   


    比如说呢?
    我10条数据,现在不知道那条数据在数据库里面已经存在了。
    最理想的办法自然是一句一个方法就能知道那条数据已经存在了。
    如果上面的办法根本不存在的话,就只有for 10次一次一次的根据key去检索。
    总部能用IN()把,那样不就全表搜索了。
      

  4.   

    直接用SqlDataAdapter 批量更新 会自动检查 执行insert 或者update语句
    比如:string constr = "server=localhost\\sqlserver2008;initial catalog=test;uid=sa;pwd=123456;";
    SqlConnection conn = new SqlConnection(constr);
    //设置select查询命令,SqlCommandBuilder要求至少有select命令
    SqlCommand selectCMD = new SqlCommand("select top 0 SNo,SName,SAge from Student", conn);
    DataTable dt = new DataTable();
    SqlDataAdapter sda = new SqlDataAdapter(selectCMD);
    //上面的语句中使用select 0,不是为了查询出数据,而是要查询出表结构以向DataTable中填充表结构
    sda.Fill(dt);
    //给DataTable添加10条记录
    for(int i=1;i<=10;i++)
    dt.Rows.Add(new object[] { i, "aaa"+i, 20+i });
    SqlCommandBuilder scb = new SqlCommandBuilder(sda);
    //执行更新
    sda.Update(dt.GetChanges());
    //使DataTable保存更新
    dt.AcceptChanges();
      

  5.   

    以上办法似乎没有用,还是会报key重复。看来是没有办法了,只能一条一条for过去了。