[英]Record and Table locking in C# WinForms with PostgreSql and ADO.NET
[英]Inserting just a new record using DataSet (.net c# ado.net )
我有一個.NET桌面應用程序中包含200多個文本框的表單。 我想將它們插入各自的4個數據庫表中。 現在,我應該如何使用Dataset和DataAdapter做到這一點?
我的意思是通常這是流程:
DataAdapter.Fill(Dataset,"DataTable");
填充DataAdapter.Fill(Dataset,"DataTable");
DataAdapter.Update(Dataset,"DataTable")
將內容更新回數據庫。 代碼: http : //dev.mysql.com/doc/refman/5.1/en/connector-net-tutorials-intro.html#connector-net-tutorials-data-adapter
但是在這里,我只想在3個不同的表中插入一條新記錄。
我認為方法是
dataAdapter.Update(dataSet, dataTable.TableName);
我對嗎?
如何dataAdapter.Update(dataSet, dataTable.TableName);
工作? 因為,我的每個dataTable將只有一個記錄。 (將要插入的新記錄。與表格的這200個TextBox綁定),其中,數據庫表將具有數千條記錄。 如果我做dataAdapter.Update(dataSet, dataTable.TableName);
它將刪除所有其余記錄並單獨插入其中一條嗎?
我只想使用Dataset將一個新記錄(不將其他1000條記錄提取到我的Dataset中)插入Database.Table中。
每行都有一個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();
備注:如果定義的數據庫中存在約束,則將不起作用。
只需執行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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.