using System;
using System.Collections.Generic;
using System.Text;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Data;namespace test
{
    class clExec
    {
        static void Update_Table(string nCmd_E, string nCmd_T, string nTable)
        {            
                SqlConnection nConn_Test = new SqlConnection();
                nConn_Test = clConnection.fConnection("SQLTest");
                nConn_Test.Open();
                SqlCommand nCmd_Test = new SqlCommand(nCmd_T, nConn_Test);
                SqlDataAdapter nDA_Test = new SqlDataAdapter(nCmd_Test);
                DataSet nDS_Test = new DataSet();
                nDA_Test.Fill(nDS_Test);
                SqlConnection nConn_ERP = new SqlConnection();
                nConn_ERP = clConnection.fConnection("ERP3");
                nConn_ERP.Open();
                SqlCommand nCmd_ERP = new SqlCommand(nCmd_E,nConn_ERP);
                SqlDataAdapter nDA_ERP = new SqlDataAdapter(nCmd_ERP);
                DataSet nDS_ERP = new DataSet();
                
                nDA_ERP.Fill(nDS_ERP);
                 if (nDS_ERP.Tables[0].Rows.Count > 0)
                {
                    try
                    {
                        foreach (DataRow nDR in nDS_ERP.Tables[0].Rows)
                        {
                            nDS_Test.Tables[0].Rows.Add(nDR.ItemArray);
                        }
                        if (nDS_Test.Tables[0].Rows.Count > 0)
                        {                       
                            nDA_Test.InsertCommand = new SqlCommand("insert into " + "SA_BillVouchs" + " select *from " + nDS_Test.Tables[0].TableName, nConn_Test);
                            nDA_Test.InsertCommand.ExecuteNonQuery();
                            SqlCommandBuilder nCommandBuilder = new SqlCommandBuilder(nDA_Test);
                            int nCount = nDA_Test.Update(nDS_Test, "SA_BillVouchs");
                            if (nCount > 0)
                            {
                        MessageBox.Show("更新成功");
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("出现异常:" + ex.Message);
                    }
                    finally
                    {
                        nConn_ERP.Close();
                        nConn_Test.Close();
                    }
                }
                else
                {
                    MessageBox.Show("没有更新");
                }          
        }
        public static void nExec()
        {
            clExec.Update_Table(clCmdERP.BillVouchs(), clCmdTest.BillVouchs(), "SA_BillVouchs");
                 
        }
    }
}
从源数据库中按条件搜索数据,填充到dataset中,再循环添加到目的数据库的dataset中,然后用dataadapter的update方法更新,但是写commandinsert语句的时候遇到select *from 数据集的情况,一直出现错误insert into SA_BillVouchs select *from Table --数据集在SQl查询中成了Table试了很多方法了都没有办法完成

解决方案 »

  1.   

     insert into SA_BillVouchs select * from [Table] 保留字要加方括号
      

  2.   

    insert into SA_BillVouchs select *from [Table]table是个关键字.
      

  3.   

    是 这样子的:insert into SA_BillVouchs select *from nDS_Test.Tables[0].TableName在SQL查询分析器中会变成insert into SA_BillVouchs select *from Table
    加【】也会发生错误,nDS_Test.Tables[0].TableName是数据集里头的表名
      

  4.   

    nDA_Test.InsertCommand = new SqlCommand("insert into SA_BillVouchs select * from [" + nDS_Test.Tables[0].TableName + "]", nConn_Test); 
      

  5.   

    这次SQL查询分析器里的语句是insert into SA_BillVouchs select *from [Table],但是还是提示对象名'Table'无效啊
      

  6.   

    哥哥,表名无效说明你当前库里没叫Table的表啊……你要查什么表,就把表名写在Table这地方~~……
      

  7.   

    Table表是否存在
    在查询分析器执行就可看到效果
      

  8.   

     nDA_Test.InsertCommand = new SqlCommand("insert into SA_BillVouchs select * from " + nDS_Test.Tables[0].TableName, nConn_Test); 然后在程序中看一下nDS_Test.Tables[0].TableName有值没有,写的insert 语句没有错,估计是nDS_Test.Tables[0].TableName这里有问题
    跟踪一下
      

  9.   

    那个Table是属于内存里头的dataset的,不是在数据库中的。
      

  10.   

       跟踪出来的结果就是nDS_Test.Tables[0].TableName在SQL中执行会变成Table。
      

  11.   

    那个表 是在dataset中,已经与数据库断开连接了
      

  12.   

    解决了,在dataset中用select应该用dataset.Tables[0].Select()这种方法