C# 将一个数据库复制到另一个数据库,删除重复的行

C# 将一个数据库复制到另一个数据库,删除重复的行,c#,sql-server,database,C#,Sql Server,Database,我有一个名为ovhidhan_e_word的数据库,它有一个名为Table1的表,其中包含重复的行。但我想将该表1复制到另一个名为ovidhan的数据库下另一个名为dic的表中。但这次我不想重复行。我使用了以下代码: string english_w = ""; SqlConnection mssql_con = new System.Data.SqlClient.SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilena

我有一个名为ovhidhan_e_word的数据库,它有一个名为Table1的表,其中包含重复的行。但我想将该表1复制到另一个名为ovidhan的数据库下另一个名为dic的表中。但这次我不想重复行。我使用了以下代码:

  string english_w = "";

        SqlConnection mssql_con = new System.Data.SqlClient.SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Imon-Bayazid\Documents\ovhidhan_e_word.mdf;MultipleActiveResultSets=true;Integrated Security=True;Connect Timeout=30;User Instance=True");
        SqlConnection con2 = new System.Data.SqlClient.SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Imon-Bayazid\Documents\ovidhan.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");

        mssql_con.Open();

        SqlCommand mssql_cmnd = new System.Data.SqlClient.SqlCommand("SELECT * from Table1", mssql_con);

        SqlDataReader rd = mssql_cmnd.ExecuteReader();
        while (rd.Read())
        {
            english_w = rd.GetString(0);

            con2.Open();

            SqlCommand cmnd2 = new System.Data.SqlClient.SqlCommand("select * from dic where english=@h",con2);
            cmnd2.Parameters.AddWithValue("@h",english_w);

            SqlDataReader r = cmnd2.ExecuteReader();
            if (r.Read())
            { }
               else {
                    SqlCommand c = new System.Data.SqlClient.SqlCommand("insert into dic values(@k)", con2); ;
                    c.Parameters.AddWithValue("@k", english_w);
                    c.ExecuteNonQuery();
                 }

            con2.Close();      
        }

        mssql_con.Close();
但它显示了一个例外,即已经有一个与此命令关联的打开的DataReader,必须先关闭它。在c.ExecuteOnQuery行上

我怎样才能解决这个问题???
另一个问题是如何在mssql中删除表中重复的行???

这是因为mssql\u cmnd与第一个SQLReader使用的SQLCommand相同。您可能需要调用SQLC命令:

c.Parameters.AddWithValue("@k", english_w);
c.ExecuteNonQuery();
至于重复,当您读取数据时,您始终可以执行SELECT DISTINCT。见以下链接中的标题C:


我认为它应该是c而不是mssql_cmnd,并且还建议在连接、命令和datareader对象周围使用语句

编辑

我没有测试代码,但尝试重构代码,并将数据读取器替换为执行标量

        string english_w = string.Empty;
        using (SqlConnection mssql_con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Imon-Bayazid\Documents\ovhidhan_e_word.mdf;MultipleActiveResultSets=true;Integrated Security=True;Connect Timeout=30;User Instance=True"))
        {
            using (SqlCommand mssql_cmnd = new SqlCommand("SELECT * from Table1", mssql_con))
            {
                mssql_con.Open();
                using (SqlDataReader rd = mssql_cmnd.ExecuteReader())
                {
                    while (rd.Read())
                    {
                        english_w = rd.GetString(0);
                        using (SqlConnection con2 = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\Imon-Bayazid\Documents\ovidhan.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"))
                        {
                            con2.Open();
                            using (SqlCommand cmnd2 = new SqlCommand("select top 1 * from dic where english=@h", con2))
                            {
                                cmnd2.Parameters.AddWithValue("@h", english_w);
                                object obj = cmnd2.ExecuteScalar();
                                if (obj == null)
                                {
                                    using (SqlCommand c = new SqlCommand("insert into dic values(@k)", con2))
                                    {
                                        c.Parameters.AddWithValue("@k", english_w);
                                        c.ExecuteNonQuery();
                                    }
                                }
                            }
                            con2.Close();
                        }
                    }
                    rd.Close();
                }
            }
            mssql_con.Close();
        }

你从哪里得到的错误?mssql\u cmnd没有ExecuteOnQuery如果它是c,请在c.ExecuteOnQuery之后尝试c.Dispose。尝试此操作以删除重复的行

select * from table1 h1 where H1.ID in (select max(id) from table1 group by duplicate_row_id);

你从哪里得到的错误?mssql_cmnd没有ExecuteOnQueryI认为此异常是因为SqlDataReader r打开但未关闭,请在else语句之后关闭它,并在while语句之后关闭SqlDataReader rd。行对象obj=cmnd2.ExecuteScalar上关键字“from”附近的语法不正确@meo,修改了密码。它应该是select top 1*from,而不是select top 1 from。尝试一步一步地调试代码并发布发生的任何错误。您遇到了什么错误?此外,要删除重复行,请使用此SQL。从table1 h1中选择*其中h1.ID在通过重复的行ID从table1组中选择maxid;