2010-03-23 40 views
0

我正在寫一個程序,讓用戶:OleDb數據庫到DataSet和回到C#?

  1. 連接到用戶指定的獨立DataGridViews
  2. 編輯他們
  3. 查看所有的表在該數據庫中的(任意)數據庫該程序,生成隨機數據,並查看結果
  4. 選擇要提交這些更改或者恢復

於是我發現了DataSet類,它看起來像它的能夠保存數據庫的所有內容,並且我決定在此處做的最好的事情是將所有內容加載到一個數據集中,讓用戶編輯它,然後將數據集保存回數據庫。問題是,我能找到加載數據庫表中的唯一方法是這樣的:

set = new DataSet(); 
DataTable schema = connection.GetOleDbSchemaTable(
    OleDbSchemaGuid.Tables, 
    new string[] { null, null, null, "TABLE" }); 
foreach (DataRow row in schema.Rows) 
{ 
    string tableName = row.Field<string>("TABLE_NAME"); 
    DataTable dTable = new DataTable(); 
    new OleDbDataAdapter("SELECT * FROM " + tableName, connection).Fill(dTable); 
    dTable.TableName = tableName; 
    set.Tables.Add(dTable); 
} 

而它好像應該是考慮到數據集似乎是專爲正是這種目的的簡單的方法。當我試圖保存這些東西時,真正的問題是。爲了使用OleDbDataAdapter.Update()方法,我被告知必須提供有效的INSERT查詢。這種否定否定了爲我處理這些東西的整個階段?

無論如何,我希望有人能夠解釋如何將數據庫加載並保存到數據集中,或者讓我更好地瞭解如何執行我想要做的事情。我總是可以一起解析命令,但這似乎不是最好的解決方案。

回答

1

您可以創建一個OleDbAdapter,然後將其配置爲處理記錄,但是您應該提供Insert,Update和Delete語句,因爲DataSet本身不知道數據來自哪裏;它可能是Access數據庫或Xml或文本文件。

這將是這樣的(沒有明顯的測試)

DataSet ds = new DataSet("myData"); 
var da = new OleDbDataAdapter("SELECT * FROM employee", connection); 
// filling your dataset 
da.Fill(ds); 

// Setting up the dataAdapter, could be a stored procedure 
da.InsertCommand = new OleDbCommand("INSERT employee (id, name) VALUES (@id, @name)"); 
da.UpdateCommand = new OleDbCommand("UPDATE employee SET name = @name WHERE id = @id"); 

// Updating Database from data on DataSet 
da.Update(ds); 
+0

的問題是,他不針對特定的數據庫。這意味着人們可以打開他們想要的任何數據庫,並使用這些數據。 我想我唯一的選擇是通過並使用我的數據集中的表名建立INSERT命令。我想我明白爲什麼我必須這樣做,但似乎應該有一個快捷方式,如果從數據庫插入的表名與源數據集中的表名相同。 – Troy 2010-03-23 20:05:51

+0

也許OleDbCommandBuilder類可以對你有用。 http://msdn.microsoft.com/en-US/library/system.data.oledb.oledbcommandbuilder%28VS.80%29.aspx#Mtps_DropDownFilterText – 2010-03-23 20:14:19