将一个数据库复制到另一个数据库,删除行重复
本文关键字:数据库 另一个 删除行 复制 一个 | 更新日期: 2023-09-27 18:01:30
我有一个名为"ovhidhan_e_word"的数据库,它有一个名为Table1
的表,其中包含行重复。但是我想将Table1
复制到另一个名为"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();
但是它显示了异常"已经有一个与这个命令相关联的打开的数据阅读器,必须先关闭它。"的" c.ExecuteNonQuery (); "
我怎么解决这个问题??另一个问题,我如何删除行重复从表在mssql??
这是因为mssql_cmd与您在第一个SQLReader中使用的SQLCommand相同。您可能需要调用SQLCommand c:
c.Parameters.AddWithValue("@k", english_w);
c.ExecuteNonQuery();
对于重复,您总是可以在读取数据时执行SELECT DISTINCT。参见以下链接的标题C:
http://msdn.microsoft.com/en-us/library/ms187731.aspx我认为应该是"c"而不是" mssql_cmd ",并且还建议在连接,命令和数据读取器对象周围使用"using"语句。
编辑
我没有测试代码,但试图重构它,并将数据读取器替换为执行标量。
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_cmnd
没有ExecuteNonQuery()
,如果是c
,在c.ExecuteNonQuery()
之后再尝试c.Dispose()
。试着删除重复的行
select * from table1 h1 where H1.ID in (select max(id) from table1 group by duplicate_row_id);