我在.NET桌面应用程序中有一个包含200多个文本框的表单。我想将它们插入到各自的4个数据库表中。现在我应该如何使用Dataset& amp; DataAdapter要做到这一点吗?
我的意思通常是流程:
DataAdapter.Fill(Dataset,"DataTable");
DataAdapter.Update(Dataset,"DataTable")
将内容更新回数据库。但在这里我只想在3个不同的表格中插入新记录。
我认为方法是
dataAdapter.Update(dataSet, dataTable.TableName);
我是对的吗?
dataAdapter.Update(dataSet, dataTable.TableName);
如何运作?因为,我的每个dataTable只有一条记录。 (要插入的新记录。与表格的200个文本框绑定),其中数据库表将有数千条记录。如果我dataAdapter.Update(dataSet, dataTable.TableName);
它会删除所有其余的记录并单独插入这个记录吗?
我只想使用数据集在Database.Table中插入一条新记录(不将其他1000条记录读入我的数据集)。
答案 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();