2016-09-14 91 views
0

我想插入到表中使用select *从datatable到表中的特定列。但它给了我一个数组..有没有什么办法可以得到插入工作。Datatable选择所有行

all I want to do is 
Insert into table1 (id,name,status) select * from datatable 



query += "Insert into " + tableName.ToLower() + ""; 

query += "("; 
for (int i = 0; i < dt.Columns.Count; i++) 
{ 
    if (i != dt.Columns.Count - 1) 
     query += dt.Columns[i].ColumnName.ToLower() + ","; 
    else 
     query += dt.Columns[i].ColumnName.ToLower(); 
} 
query += ")"; 


DataRow[] result = dt.Select(); 

query += "select * from " + result 
+0

尝试生成一个表值构造]发表声明(https://msdn.microsoft.com/en-us/library/dd776382在得到每个单元格的值。 ASPX)。 –

回答

0

你不能一次一样,你必须将它们在两个不同的对象或变量分开使用两个SQL语句(当你用分号结束每它有时也被允许,但不是在你的情况) 试该行

     query += "Insert into " + tableName.ToLower() + ""; 

          query += "("; 
          for (int i = 0; i < dt.Columns.Count; i++) 
          { 
           if (i != dt.Columns.Count - 1) 
            query += dt.Columns[i].ColumnName.ToLower() + ","; 
           else 
            query += dt.Columns[i].ColumnName.ToLower(); 
          } 
          query += ")"; 
          query += "values ("; 

          string temQry=query;//you need it more than once 

          DataRow[] result = dt.Select(); 

          for (int i = 0; i < dt.Rows.Count; i++){ 

           for (int j = 0; j < dt.Columns.Count; j++){ 
             if ((j+1)<dt.Columns.Count){ 
              query += result[i].item(j) +"," ; 
              } 
              else { 
              query += result[i].item(j);} 
          } 
             query=temQry; //recover the query for each new row 

}

+0

我现在正在通过每一行的循环..正如你所说..如果我有更多的数据,它需要大量的时间来建立插入..所以我想直接从数据表中插入 – user1046415

+0

嗯,我不真的很多时候你的意思是什么,但是复制表格有更快的方法。阅读** SqlBulkCopy ** [链接](https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy(v = vs.110).aspx) –

+0

同意但我的专栏可能不是相同的..我需要映射他们并相应地插入数据..是否有可能与大量copy.Please提供任何样品,如果你得到..源可能有8列,但我在目的地表中有10 ..我必须映射它们并相应地插入。 – user1046415