我有两个从同一个SQL代码生成的数据库和两个从这个数据库创建的数据集。我想从这两个数据集创建一个数据集,我想我可以这样做:
public void MergeGatunek()
{
DB1.DataSetGatunek.Tables[0].Merge(DB2.DataSetGatunek.Tables[0], true);
DataSetGatunek.Tables[0].Merge(DB1.DataSetGatunek.Tables[0], true);
//DataSetGatunek is the final DataSet
}
这就是结果:
应用程序是波兰语,但它不应该是一个问题。
每个下一个新行只会将之前添加的结果相乘。我的目标是在一个DataGridView中显示来自两个数据库的数据,并添加缺失的行(如果有的话)。
我正在使用此方法填充数据集,添加新行等。
public void SelectGatunek(string SQL)
{
try
{
Connection.Open();
DataAdapter = new SqlDataAdapter(SQL, Connection);
commandBuilder = new SqlCommandBuilder(DataAdapter);
DataSetGatunek.Clear();
DataAdapter.Fill(DataSetGatunek);
Connection.Close();
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
}
SelectGatunek("Select * FROM t_gatunek");
SelectGatunek("INSERT INTO t_gatunek (gatunek) VALUES ('" + DG.GetGatunek + "')");
答案 0 :(得分:1)
为避免重复'id_gatunek'字段,请在数据库中创建列作为标识字段。
http://support.microsoft.com/kb/313540
If e.StatementType = StatementType.Insert Then e.Status = UpdateStatus.SkipCurrentRow
答案 1 :(得分:0)
我认为这是因为您需要指定DataTable.PrimaryKey
,以便它们正确合并。
如果该字段是数据库中的主键,则应该为您完成。
答案 2 :(得分:0)
使用TGadfly的解决方案我得到了这个工作:
public void FillGatunek()
{
try
{
Connection.Open();
GatunekDataAdapter = new SqlDataAdapter("SELECT * FROM t_gatunek", Connection);
commandBuilder = new SqlCommandBuilder(GatunekDataAdapter);
GatunekDataAdapter.FillSchema(DataSetGatunek, SchemaType.Mapped, "t_gatunek");
DataSetGatunek.Tables["t_gatunek"].Columns["id_gatunek"].AutoIncrement = true;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
Connection.Close();
}
}
public void InsertGatunek(string Gatunek)
{
try
{
Connection.Open();
DataRow R = DataSetGatunek.Tables["t_gatunek"].NewRow();
R["gatunek"] = Gatunek;
DataSetGatunek.Tables["t_gatunek"].Rows.Add(R);
DataSetGatunek.GetChanges();
GatunekDataAdapter.Update(DataSetGatunek, "t_gatunek");
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
}
finally
{
Connection.Close();
}
}