2009-10-26 33 views
0

我在.NET桌面應用程序中包含200多個文本框。我想將它們插入到它們各自的4個數據庫表中。現在我應該如何使用數據集& DataAdapter來做到這一點?使用DataSet插入新記錄(.net c#ado.net)

我的意思是通常這將是流:

  1. 填充使用DataAdapter.Fill方法(數據集, 「數據表」)數據集;
  2. 操縱DataSet的數據
  3. DataAdapter.Update(Dataset,「DataTable」)將內容更新回數據庫。

代碼: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);

我對不對?

dataAdapter.Update(dataSet,dataTable.TableName);工作?因爲,我的每個dataTable將只有一個記錄。 (將插入的新記錄與表單的200個文本框結合在一起),其中數據庫表將具有數千條記錄。如果我做dataAdapter.Update(dataSet,dataTable.TableName);它會刪除所有其他記錄並單獨插入這一個嗎?

我只是想插入一個新的記錄(沒有取得其他1000個記錄到我的數據集)到Database.Table使用數據集。

回答

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(); 

備註:如果定義的數據庫中存在約束條件,則不起作用。

+0

我覺得我的查詢是不明確的。我編輯它。我想插入一條新記錄(不需要將其他1000條記錄提取到我的數據集中)。 所以,當我做dataAdapter.Update(dataSet,dataTable.TableName);我會造成問題,我猜。 – claws 2009-10-26 08:27:18

+0

這是否 foreach(dataTable dataTable in dataSet.Tables) dataAdapter.Update(dataSet,dataTable.TableName);有用嗎?我沒有嘗試,但通過看它,我覺得它不會工作,因爲。使dataAdapter.Update()語句可以工作。必須有相應的插入,更新,刪除查詢。但是當我們實例化dataAdapter時,我們使用SELECT查詢單個表的權利?所以,它只適用於該表,而不適用於其他表。 – claws 2009-10-27 20:04:13

+0

你是對的:我錯過了dataAdapter的定義。 – andreas 2009-10-27 21:49:27

0

簡單地使SQL INSERT命令並執行:

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();