我在SQL Server 2008的同一数据库中有两个表。我想将一个表的内容复制到另一个具有相同架构的空表中,但是在执行该语句时

OleDbDataAdapter da = new OleDbDataAdapter("select * into dbo.leadmastersnew from dbo.leadmasters", myConnection);


它引发错误,表明该表已存在于数据库中。

我希望如果该表已经存在,则应删除该表,因为上述SQL查询创建了该表并将其内容复制到该表中。

请建议

我的代码是

private void button5_Click(object sender, EventArgs e)
{
     OleDbConnection myConnection = new OleDbConnection("File Name=E:\\Vivek\\ImplementUdl\\ImplementUdl\\new.udl");

     try
     {
         myConnection.Open();

         if (myConnection.State == ConnectionState.Open)
            MessageBox.Show("Connection opened successfully!");
         else
            MessageBox.Show("Connection could not be established");

         DataSet ds = new DataSet();

         OleDbDataAdapter da = new OleDbDataAdapter("select * into dbo.leadmastersnew from dbo.leadmasters", myConnection);

         da.Fill(ds);

         MessageBox.Show("Data Copied!!");
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
     finally
     {
           myConnection.Close();
     }

     return;
}

最佳答案

我将创建一个空表(如果尚不存在),然后将其复制到数据中。如果可能的话,请勿使用udl文件进行连接,而应将连接字符串存储在其他位置

using(var conn = new SqlConnection("<connectionstring>"))
using(var cmd = new SqlCommand(@"
                if object_id('dbo.leadmastersnew') is null
                  begin
                      select * into dbo.leadmastersnew from dbo.leadmasters where 1=2
                      alter table dbo.leadmastersnew add primary key (<key>)
                  end
                insert into dbo.leadmastersnew
                select *
                from dbo.leadmasters lm
                where not exists(select * from dbo.leadmastersnew lmn where lm.<key> = lmn.<key>)", conn))
{
    conn.Open();
    cmd.ExecuteNonQuery();
}


请注意,在where子句中,您需要填写正确的<key>列。我还向新表添加了主键约束,因为select into不会复制源表的主键/索引。

关于c# - C#检查数据库中是否存在表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26119637/

10-10 00:44
查看更多