在表格控件Spread(类似DataGird)
有这样一组数据:
 
 字段  字段  字段
  1     A     a  
  2     B     b
  3     C     c
现在需要向 DataBase db1 的 Table1 和 DataBase db2 的 Table2 
中插入数据。插入结果如下:
Table1   Table2   
1 A       1 a
2 B       2 b
3 C       3 c 要求 用C# 将这组数据一次性插入, 有用SQL语句的时候改用存贮过程。       

解决方案 »

  1.   

    String a = "";
    for(int i = 0 ; i< datagrid.rows.count ; i ++ )
    {
        a += "insert into table1(aa)values(" + datagrid.rows[i][1].value ");"
        a += "insert into table2(bb)values(" + datagrid.rows[i][2].value ");"
    }
    差不多就这个意思了。
    调用你那个存储过程名字。
      

  2.   

    一次性插入?是指在一次数据库连接的过程中完成么? 但是是两个不同的数据库,要建两个sqlconnection才行吧?如果是同一个数据库中的两个表的话倒挺容易实现的
     
      

  3.   

    谢谢回复!可能我写的不够清楚吧:
    要是写循环来逐条插入的话:
    要保证:
           1:  1  A  a  在1 A 插入 Table1 的同时将 1 a 插入 Table2  (事务处理)
          2 :  还要同时将这3条数据插入到2各表中,如果一条出错,其他全部删除。
      

  4.   

    StringBuilder sb=new StringBuilder();
    sb.Append("1 c1,'A' c2,'a' c3")
    sb.Append("2,'B','b'")
    sb.Append("3,'C','c'")string sql="INSERT db1..table1(f1,f2) SELECT c1,c2 FROM (" + sb.ToString() + ") x;"
    sql += "INSERT db2..table2(f1,f2) SELECT c1,c3 FROM (" + sb.ToString() + ") x;"cmd.Exe..(sql);
      

  5.   

    事务开始
      try
      {
        链接数据库1
        插入数据1
        连接数据库2
        插入数据2
      }
     catch
     {rollback();}
    事务结束
      

  6.   

    敲忘了
    StringBuilder sb=new StringBuilder();
    sb.Append("SELECT 1 c1,'A' c2,'a' c3")
    sb.Append("UNION ALL SELECT 2,'B','b'")
    sb.Append("UNION ALL SELECT 3,'C','c'")string sql="INSERT db1..table1(f1,f2) SELECT c1,c2 FROM (" + sb.ToString() + ") x;"
    sql += "INSERT db2..table2(f1,f2) SELECT c1,c3 FROM (" + sb.ToString() + ") x;"cmd.Exe..(sql);
      

  7.   

    在表格控件Spread(类似DataGird) 
    有这样一组数据: 
      TableBase:
      字段1     字段2     字段3 
        1           A           a     
        2           B           b 
        3           C           c 
    现在需要向   DataBase   db1   的   Table1   和   DataBase   db2   的   Table2   
    中插入数据。插入结果如下: 
    Table1       Table2       
    1   A               1   a 
    2   B               2   b 
    3   C               3   c   要求   用C#   将这组数据一次性插入,   有用SQL语句的时候改用存贮过程
    ================================================================
    insert into Table1 select 字段1,字段2 from TableBase
    go
    insert into Table1 select 字段1,字段3 from TableBase
      

  8.   

    谢谢:回feiyu0805:这个方法我也想过:先从程序中将数据插入一个临时的 TableBase(引用下)然后 
    insert   into   Table1   select   字段1,字段2   from   TableBase 
    go 
    insert   into   Table1   select   字段1,字段3   from   TableBase这样应该会在数据库中必须有这样一个TableBase做为中转有更好的方法没?
      

  9.   

    那你可以后台处理:
    string sql="";
    for(int   i   =   0   ;   i <   datagrid.rows.count   ;   i   ++   ) 

    sql +="insert into table1 select '"+datagrid.rows[i]["字段1"].value+"','" datagrid.rows[i]["字段1"].value+"' go";
    sql +="insert into table1 select '"+datagrid.rows[i]["字段2"].value+"','" datagrid.rows[i]["字段2"].value+"' go";     
    }
      

  10.   

    回feiyu0805: 但是在后台处理 不能保证一次能插入所有数据,如果在循环的过程中出现了异常,怎么办?能把已插入的删除?
      

  11.   

    可以的,因为最后执行的是 string sql;
    只执行了一个sql语句,
    你怕出异常的话  加一个事务就没问题了.
      

  12.   

    这样好不好,会出现什么问题,
    大家帮忙看下。
    branches.xml中存有branches,taxrates的数据,
    通过下面程序对branches,taxrates进行更新。SqlConnection conn=new SqlConnection(strcon);
    SqlTransaction st;
    conn.Open();
    st=conn.BeginTransaction();

    SqlCommand comm=conn.CreateCommand();
    comm.Transaction=st;
    comm.CommandText="selectFrombranches"; //存储过程名
    comm.CommandType=CommandType.StoredProcedure; DataSet ds =new DataSet();
    ds.ReadXml("branches.xml");
    SqlDataAdapter da=new SqlDataAdapter(comm);
    SqlCommandBuilder scb=new SqlCommandBuilder(da);
    da.Update(ds,"branches");
                            comm.CommandText="selectFromTable";
    comm.CommandType=CommandType.StoredProcedure;
    da=new SqlDataAdapter(comm);
    scb=new SqlCommandBuilder(da);
    da.Update(ds,"taxrates");
    st.Commit();