使用DataSet(.net c#ado.net)仅插入新记录

时间:2009-10-26 07:06:18

标签: c# .net ado.net

我在.NET桌面应用程序中有一个包含200多个文本框的表单。我想将它们插入到各自的4个数据库表中。现在我应该如何使用Dataset& amp; DataAdapter要做到这一点吗?

我的意思通常是流程:

  1. 使用DataAdapter.Fill(Dataset,"DataTable");
  2. 填充数据集
  3. 操纵DataSet的数据
  4. DataAdapter.Update(Dataset,"DataTable")将内容更新回数据库。
  5. 代码:http://dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html#connector-net-tutorials-data-adapter

    但在这里我只想在3个不同的表格中插入新记录。

    我认为方法是

    1. 以编程方式创建包含3个数据表的数据集。
    2. 将200个文本框绑定到这些数据库的各个列
    3. dataAdapter.Update(dataSet, dataTable.TableName);
    4. 我是对的吗?

      dataAdapter.Update(dataSet, dataTable.TableName);如何运作?因为,我的每个dataTable只有一条记录。 (要插入的新记录。与表格的200个文本框绑定),其中数据库表将有数千条记录。如果我dataAdapter.Update(dataSet, dataTable.TableName);它会删除所有其余的记录并单独插入这个记录吗?

      我只想使用数据集在Database.Table中插入一条新记录(不将其他1000条记录读入我的数据集)。

2 个答案:

答案 0 :(得分:1)

每一行都有一个RowState属性,dataAdapter将使用它。因此,如果您的数据集只有一个新行,则行状态将为DataRowState.Added。 DataAdapter将插入行并将行状态更改为DataRowState.Unchanged。数据库中的所有其他行都将保持不变。

IDbTransaction dbTransaction = dbConnection.BeginTransaction();
try
{
  foreach (DataTable dataTable in dataSet.Tables)
  {
    string sql = "SELECT * FROM " + dataTable.TableName + " WHERE 0 = 1";
    SqlDataAdapter dataAdapter = new SqlDataAdapter (sql, dbConnection);
    dataAdapter.Update(dataSet, dataTable.TableName);
  }
}
catch
{
  dbTransaction.Rollback();
  throw;
}
dbTransaction.Commit();

备注:如果定义的数据库存在约束,则无效。

答案 1 :(得分:0)

只需编写SQL插入命令并执行它们:

string cmd="insert into myTable(column1, column2, etc) values (@text1,@text2, etc)";
SqlCommand sqlcmd=new SqlCommand(cmd,mySqlConnection);
sqlcmd.Parameters.Add("@text1",SqlDbType.NChar,textbox1.Text);
sqlcmd.Parameters.Add("@text2",SqlDbType.NChar,textbox2.Text);
sqlcmd.ExecuteNonQuery();