想把一个SQL的查询结果写到新的目标数据里。代码如下:
其中command.text 就是 Select * from Region;
然后目标数据库里,表结构与源表一样,只有一行记录,然后设置了主键自动增加。
但是现在的代码不能把源数据写进去。
求教如何改正?
private void btnSave_Click(object sender, EventArgs e)
{
string serverName = textBoxTargetServer.Text;
var dbName = comboBoxTargetDatabase.SelectedItem as string;
string conStr= "Data Source= " + serverName + ";Initial Catalog=" + dbName + ";Integrated Security=True";
SqlCommand cmd = new SqlCommand();
using (SqlConnection conn = new SqlConnection(conStr))
{
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = textBox1.Text;
cmd.Connection.Open();
SqlDataAdapter sda = new SqlDataAdapter(textBox1.Text, conn);
SqlCommandBuilder cb = new SqlCommandBuilder(sda);
sda.InsertCommand = cb.GetInsertCommand();
sda.DeleteCommand = cb.GetDeleteCommand();
sda.UpdateCommand = cb.GetUpdateCommand();
targetDataSet = new DataSet();
sda.Fill(targetDataSet);
DataTable dtTarget = targetDataSet.Tables[0];
DataTable dtSource = sourceDataSet.Tables[0];
for (int i = 0; i < sourceDataSet.Tables[0].Rows.Count; i++)
{
DataRow sourceRow = sourceDataSet.Tables[0].Rows[i];
dtTarget.ImportRow(sourceRow);
}
sda.Update(targetDataSet);
}
cmd.Parameters.Clear();
cmd.Connection.Close();
在 dtTarget.ImportRow(sourceRow); 之后加上:
dtTarget.Rows(i).SetAdded();
这句话加上之后还是提示:Violation of PRIMARY KEY constraint, Cannot insert duplicate key in Object 'dbo.region'
是不是还要加些主键的判断啊?
搞定了,谢谢dudu!
我认为 在原表Region查询时 排出主键就没问题了