⑴ 請教: 以下是我個人的理解 1.dataset對象:官方網站說是數據的內存駐留表示形式 如果它屬於內存資料庫,
1,首先內存不是共享的,一個用戶擁有自己獨立的一塊內存,在一般情況下,別的程序是無法查看的【因此沒有什麼並發的問題,我是這么理解你的意思的】
2,緩存而已,一個用戶搜到了100條數據,這100條數據放在dataset中,如果還需要此數據,直接從dataset中取,不需要連接資料庫了
// 資料庫才要早御考慮並發,dataset只是緩存,它是當前用戶內存中模擬的資料庫,不是真正的資料庫,它本身沒有處理數據的能力
3,都是伺服器控制項,沒啥大的區別,asp.net伺服器控制項的存在意義就是跟C#完美結合襪襪,快速敏捷開發web項陸好岩目;html伺服器控制項存在的意義就是,html本身的那些控制項,可以讓你在伺服器端進行處理了,兩者都是伺服器端處理,所以除了內部機制稍有不同,沒有區別
=====================
我聽你的意思還想在資料庫中的數據更改後通知dataset?這顯然是不可能的,因為連接已經斷開了,資料庫怎麼通知你的程序?要想維持dataset 的數據是最新的, 就應該每隔一段時間(5分鍾什麼的)訪問一次資料庫,來保證你的數據是最新的。
如果你說你不讓連接斷開,這顯然是不對的程序設計,因為資料庫連接是有限的,你不放開連接,別人怎麼用?
⑵ 深入分析ADO.NET中的DataSet對象
ADO NET是Net FrameWork SDK中用以操作資料庫的類庫的總稱 而DataSet類則是ADO NET中最核心的成員之一 也是各種開發基於 Net平台程序語言開發資料庫應用程序最常接觸的類 之所以DataSet類在ADO NET中具有特殊的地位 是因為DataSet在ADO NET實現從資料庫抽取數據中起到關鍵作用 在從資料庫完成數據抽取後 DataSet就是數據的存放地 它是各種數據源中的數據在計算機內存中映射成的緩存 所以有時說DataSet可以看成是一個數據容器 同時它在客戶端實現讀取 更新資料庫等過程中起到中間部件的作用(DataReader只能檢索資料庫中的數據)各種 Net平台開發語言開發資料庫應用程序 一般並不直接對資料庫操作(直接在程序中調用存儲過程等除外) 而是先完成數據連接和通過數據適配器填充DataSet對象 然後客戶端再通過讀取DataSet來獲得需要的數據 同讓段晌樣更新資料庫中數據 也是首先更新DataSet 然後再通過DataSet來更新資料庫中對應的數據的 可見了解 掌握ADO NET 首先必須了解 掌握DataSet DataSet主要有三個特性
獨立性 DataSet獨立於各種數據源 微軟公司在推出DataSet時就考慮到各種數據源的多樣性 復雜性 在 Net中 無論什麼類型數據源 它都會提供一致的關系編程模型 而這就是DataSet
離線(斷開)和連接 DataSet既可以以離線方式 也可以以實時連接來操作資料庫中的數據 這一點有點像ADO中的RecordSet
DataSet對象是一個可以用XML形式表示的數據視圖 是一種數據關系視圖
一 DataSet對象的結構模型及和RecordSet的比較
雖說ADO NET是 ADO在 Net平台下得後繼版本 但二者的區別是很大的 突出表現在ADO中的RecordSet對象和ADO NET中的DataSet對象 RecordSet其實也是非常靈活的一個對象 微軟公司推出它也是煞費苦心 如 RecordSet可以離線操作資料庫 性能優良 效率較高等等這些都讓當時的程序員為之一振 RecordSet雖然已經很復雜 但DataSet卻比RecordSet復雜的多 我們知道每一DataSet往往是一個或多個DataTable 對象的集合 這些對象由數據燃磨行和數據列以及主鍵 外鍵 約束和有關DataTable對象中數據的關系信息組成 而RecordSet只能存放單張數據表 雖然這張數據坦鋒表可以由幾張數據表JOIN生成 所以有些時候說 RecordSet更類似於DataSet中的DataTable DataSet對象的結構模型如圖 所示
圖 DataSet對象的結構模型圖通過圖 可見在DataSet對象結構還是非常復雜的 在DataSet對象的下一層中是DataTableCollection對象 DataRelationCollection對象和ExtendedProperties對象 上文已經說過 每一個DataSet對象是由若干個DataTable對象組成 DataTableCollection就是管理DataSet中的所有DataTable對象 表示DataSet中兩個DataTable對象之間的父/子關系是DataRelation對象 它使一個DataTable 中的行與另一個DataTable中的行相關聯 這種關聯類似於關系資料庫中數據表之間的主鍵列和外鍵列之間的關聯 DataRelationCollection對象就是管理DataSet中所有DataTable之間的DataRelation關系的 在DataSet中DataSet DataTable和DataColumn都具有ExtendedProperties屬性 ExtendedProperties其實是一個屬性集(PropertyCollection) 用以存放各種自定義數據 如生成數據集的SELECT語句等
二.使用DataSet
DataSet其實就是數據集 上文已經說過DataSet是把資料庫中的數據映射到內存緩存中的所構成的數據容器 對於任何數據源 它都提供一致的關系編程模型 在DataSet中既定義了數據表的約束關系以及數據表之間的關系 還可以對數據表中的數據進行排序等 DataSet使用方法一般有三種
把資料庫中的數據通過DataAdapter對象填充DataSet
通過DataAdapter對象操作DataSet實現更新資料庫
把XML數據流或文本載入到DataSet
下面就來詳細探討以上DataSet使用方法的具體實現 使用語言是C#
把資料庫中的數據通過DataAdapter對象填充DataSet
掌握DataSet使用方法必須掌握ADO NET另外一個核心常用成員 數據提供者(Data Provider) 數據提供者(也稱為託管提供者Managed Provider)是一個類集合 在 Net FrameWork SDK 中數據提供者分為二種 The SQL Server NET Data Provider和The OLE DB NET Data Provider 而到了 Net FrameWork SDK 時 ADO NET中又增加了The ODBC NET Data Provider和 The Oracle NET Data Provider二個數據提供者 The SQL Server NET Data Provider的操作資料庫對象只限於Sql Server 及以上版本 Oracle NET Data Provider的操作資料庫對象只限於Oracle 及以上版本 而The OLE DB NET Data Provider和The ODBC NET Data Provider可操作的資料庫類型就相對多了許多 只要它們在本地分別提供Ole Db提供程序和ODBC提供程序
在這些數據提供者中都有一個DataAdapter類 如 OLE DB NET Framework 數據提供者中是 OleDbDataAdapter類 The SQL Server NET Framework 數據提供者中是SqlDataAdapter類 The ODBC NET Framework 數據提供者中是OdbcDataAdapter類 通過這些DataAdapter就能夠實現從資料庫中檢索數據並填充 DataSet 中的表
DataAdapter填充DataSet的過程分為二步 首先通過DataAdapter的SelectCommand屬性從資料庫中檢索出需要的數據 SelectCommand其實是一個Command對象 然後再通過DataAdapter的Fill方法把檢索來的數據填充 DataSet 代碼清單 就是以Microsoft SQL Server 中的Northwind資料庫為對象 C#使用The SQL Server NET Data Provider中的SqlDataAdapter填充DataSet的具體實現方法
代碼清單
SqlConnection sqlConnection = new SqlConnection ( Data Source=localhost ;Integrated Security=SSPI ;Initial Catalog=Northwind ) ;//創建數據連接SqlCommand selectCMD = new SqlCommand ( SELECT CustomerID CompanyName FROM Customers sqlConnection ) ;//創建並初始化SqlCommand對象SqlDataAdapter sqlDataAdapter = new SqlDataAdapter ( ) ;custDA SelectCommand = selectCMD ;sqlConnection Open ( ) ;//創建SqlDataAdapter對象 並根據SelectCommand屬性檢索數據DataSet dsDataSet = new DataSet ( ) ;sqlDataAdapter Fill ( dsDataSet Customers ) ;//使用SqlDataAdapter的Fill方法填充DataSetsqlConnection Close ( ) ;//關閉數據連接
對於其他數據提供者的DataAdapter 具體的實現檢索資料庫中的數據並填充DataSet的實現方法類似於以上方法
通過DataAdapter對象操作DataSet實現更新資料庫
DataAdapter是通過其Update方法實現以DataSet中數據來更新資料庫的 當DataSet實例中包含數據發生更改後 此時調用Update方法 DataAdapter 將分析已作出的更改並執行相應的命令(INSERT UPDATE 或 DELETE) 並以此命令來更新資料庫中的數據 如果DataSet中的DataTable是映射到單個資料庫表或從單個資料庫表生成 則可以利用 CommandBuilder 對象自動生成 DataAdapter 的 DeleteCommand InsertCommand 和 UpdateCommand 使用DataAdapter對象操作DataSet實現更新資料庫具體的實現方法 只需把下面的代碼清單 添加到代碼清單 之後 二者合並即可實現刪除Customers數據表中第一行數據
代碼清單
SqlCommandBuilder sqlCommandBuilder = new SqlCommandBuilder(sqlDataAdapter ) ;//以sqlDataAdapter 為參數來初始化SqlCommandBuilder實例dsDataSet Tables[ Customers ] Rows[ ] Delete ( ) ;//刪除DataSet中刪除數據表Customers中第一行數據sqlDataAdapter Update ( dsDataSet Customers ) ;//調用Update方法 以DataSet中的數據更新從資料庫dsDataSet Tables[ Customers ] AcceptChanges ( ) ;
由於不了解DataSet結構和與資料庫關系 很多初學者往往只是更新了DataSet中的數據 就認為資料庫中的數據也隨之更新 所以當打開資料庫瀏覽時發現並沒有更新數據 都會比較疑惑 通過上面的介紹 疑惑應當能夠消除了
XML和DataSet
DataSet中的數據可以從XML數據流或文檔創建 並且 Net Framework可以控制載入XML數據流或文檔中那些數據以及如何創建DataSet的關系結構 載入XML數據流和文檔到DataSet中是可使用DataSet對象的ReadXml方法(注意 ReadXml來載入非常大的文件 則性能會有所下降) ReadXml 方法將從文件 流或 XmlReader 中進行讀取 並將 XML 的源以及可選的 XmlReadMode 參數用作參數 該ReadXml方法讀取 XML 流或文檔的內容並將數據載入到 DataSet 中 根據所指定的XmlReadMode和關系架構是否已存在 它還將創建DataSet的關系架構
三.DataSet和數據綁定(DataBinding)
數據綁定是數據綁定是綁定技術中使用最頻繁 也是最為重要的技術 也可以說是各種 Net開發語言開發資料庫應用程序最需要掌握的基本的知識之一 數據綁定之所以很重要 是因為在 Net FrameWork SDK中並沒有提供資料庫開發的相關組件 即如 DbTextBox DbLabel等用於資料庫開發的常用組件在 Net FrameWork SDK中都沒有 而數據綁定技術則能夠把TextBox組件 改造 成DbTextBox組件 把Label組件 改造 成DbLabel組件等等 所有這些都與DataSet有直接關系
數據綁定分成二類 簡單型數據綁定和復雜型數據綁定 適用於簡單型數據綁定組件一般有Lable TextBox等 適用於復雜性數據綁定的組件一般有DataGrid ListBox ComboBox等 其實簡單型數據綁定和復雜性數據綁定並沒有明確的區分 只是在組件進行數據綁定時 一些結構復雜一點的組件在數據綁定時操作步驟相近 而另外一些結構簡單一點的組件在數據綁定時也比較類似 於是也就產生了二個類別 以下就結合TextBox組件和DataGrid組件分別探討DataSet在實現簡單型數據綁定和復雜性數據綁定作用和具體實現方法
簡單型數據綁定
簡單型數據綁定一般使用這些組件中的DataBindings屬性的Add方法把DataSet中某一個DataTable中的某一行和組件的某個屬性綁定起來 從而達到顯示數據的效果 TextBox組件的數據綁定具體實現方法是在代碼清單 後 再添加代碼清單 中的代碼 代碼清單 中的代碼是把DataSet中的Customers 數據表中的 CustomerID 的數據和TextBox的Text屬性綁定起來 這樣DbTextBox就產生了 其他適用於簡單型數據綁定組件數據綁定的方法類似與此操作
代碼清單
textBox DataBindings Add ( Text dsDataSet Customers CustomerID ) ;
復雜性數據綁定
復雜性數據綁定一般是設定組件的DataSource屬性和DisplayMember屬性來完成數據綁定的 DataSource屬性值一般設定為要綁定的DataSet DisplayMember屬性值一般設定為要綁定的數據表或數據表中的某一列 DataGrid組件的數據綁定的一般實現方法是在代碼清單 後 再添加代碼清單 中的代碼 代碼清單 的功能是把DataSet中的Customers 數據表和DataGrid綁定起來 其他適用於復雜性數據綁定的組件實現數據綁定的方法類似此操作
代碼清單
dataGrid DataSource = dsDataSet ;dataGrid DataMember = Customers ;
四.總結
lishixin/Article/program/net/201311/14485
⑶ c#關於DATASET的操作
問題1:要麼寫存儲過程調用,要麼就寫多個sql語句爛團來實現問題2:首行就是第一次循環的結果,這歲脊里可以用sql語句控制下,top 1 。 if (dr.HasRows)
{
if (dr.Read())
{
txtCompanyName.Value = dr["T_CompanyName"].ToString();
txtLink.Value = dr["T_CompanyTel"].ToString();
txtFax.Value = dr["T_CompanyFax"].ToString();
txtMail.Value = dr["T_CompanyMail"].ToString();
txtNo.Value = dr["T_CompanyNo"].ToString();
txtAdress.Value = dr["T_CompanyAdress"].ToString();
}
dr.Close();
dr.Dispose();
} 這樣獲取結果顯示 就可以飢雀橘了
⑷ C#動態生成DataSet,設置列標題的問題
DataTable mydatatb = new DataTable();
mydatatb.Columns.Add("列灶和弊名", typeof(string));
newCustomersRow["列名隱族"棚尺] = Convert.ToString(myds.Tables[0].Rows[i][0]);//0表示第一列
mydatatb.Rows.Add(newCustomersRow);
⑸ 遍歷dataset生成SQL語句
這慧坦樣不行把。
public
static
DataSet
GetSQL(DataSet
pid)
{
string
sql
=
"select
pusername,ppurpose,pphone,pemail
from
[person]
where
";
froeach(dataRow
dr
in
pin.Table[0].Row)
{
sql+="sql="+dr["pid<欄位名御耐稱>"].ToString();
}
}
這鎮碧春樣應該就可以了。
希望對你有幫助。
⑹ 如何使用DataSet修改資料庫
使用 DataAdapter 更新數據源
需要注意:
a)如果 SelectCommand 返回 OUTER JOIN 的結果,則 DataAdapter 不會為生成的 DataTable 設置 PrimaryKey 值。您必須自己定義PrimaryKey 以確保正確解析重復行.
b)如果對 DataSet、DataTable 或 DataRow 調用 AcceptChanges,則將使 DataRow 的所有 Original 值都將被重寫為該 DataRow 的 Current 值。如果已修改將該行標識為唯一行的字雀模段值,那麼當調用 AcceptChanges 後,Original 值將不再匹配數據源中的值。
看看下面例子:
// Assumes connection is a valid SqlConnection.
SqlDataAdapter dataAdpater = new SqlDataAdapter(
"SELECT CategoryID, CategoryName FROM Categories", connection);
dataAdpater.UpdateCommand = new SqlCommand(
"UPDATE Categories SET CategoryName = @CategoryName " +
"WHERE CategoryID = @CategoryID" , connection);
dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryName", SqlDbType.NVarChar, 15, "CategoryName");
SqlParameter parameter = dataAdpater.UpdateCommand.Parameters.Add(
"@CategoryID", SqlDbType.Int);
parameter.SourceColumn = "CategoryID";
parameter.SourceVersion = DataRowVersion.Original;
DataSet dataSet = new DataSet();
dataAdpater.Fill(dataSet, "Categories");
DataRow row = dataSet.Tables["Categories"].Rows[0];
row ["CategoryName"] = "New Category"納歲陪;
dataAdpater.Update(dataSet, "Categories");
插入、更新和刪除的排序
在許多情況下,以何種順序向數據源發送通過 DataSet 作出的更改是相當重要的。
例如,如果已更新現有行的主鍵值並且添加了具有新主鍵值的新行,則務必要在處理插入之前處理更新。
可以使用 DataTable 的 Select 方法來返回僅引用具有特定 RowState 的 DataRow 數組。然後可以將返回的 DataRow 數組傳遞到 DataAdapter 的 Update 方法來處理已修改的行。通過指定要更新的行的子集,可以控制處理插入、更新和刪除的洞蠢順序。
示例如下:DataTable table = dataSet.Tables["Customers"];
// First process deletes.
adapter.Update(table.Select(null, null, DataViewRowState.Deleted));
// Next process updates.
adapter.Update(table.Select(null, null,
DataViewRowState.ModifiedCurrent));
// Finally, process inserts.
adapter.Update(table.Select(null, null, DataViewRowState.Added));
⑺ java dataset
java dataset是什麼,讓我們一起了解一下。
DataSet是ADO.NET的中心概念,是內存中的資料庫,也是不依賴於資料庫的獨立數據集合。所謂獨立,就是斷開數據鏈路或者關閉資料庫,DataSet依然是可用的喊野指。
java生成dataset的兩種方式?
1、通過sparksession讀取外部文件或者數據生成dataset。
2、通過調用createDataFrame生成Dataset。
java端如何實現DataSet?
1、創建DataSet、DataTable、DataRow、DataColumn、DataColumnCollection和DataRowCollection對象
2、實現DataSet對DataTable的集合操作鄭配脊擾和DataTable對DataRow及DataColumn的集合操作。
3、實現數據的查詢。
實現要求如下:代碼展示
DataSet myset=new DataSet(); DataTable mytb=new DataTable(); mytb.Columns.Add(new Columns("objname",String.class)); mytb.Columns.Add(new Columns("objjc",String.class)); mytb.Rows.Add(new Object[]{"A000001","testtesttest"}); mytb.Rows.Add(new Object[]{"A000001","testtesttest"}); myset.Tables.add(mytb);
另外在java中dataset還有四種基本用法,即添加數據、修改數據、刪除數據、恢復數據。
⑻ 關於.net的dataset數據更新機制
數據集(DataSet)是獨立於.NET提供程沖液扒序的
如果將資料庫比作一個倉庫 , 那麼DataSet就相當埋睜於一個臨時資料庫 , 用於存儲臨時數據,
從而提高數據訪問效率 。
DataAdapter是DataSet和資料庫的連接橋梁,其Fill()方法就是將資料庫中的數據填充到DataSet中,而Update方法則是負責將dataset中修改的數據返回到資料庫中。資料庫是通過什麼來修改相應數據的呢?在我們修改dataset中的數據時,事實上dataset中的數據是沒有作任何修改的,dataset只將記錄所散昌有行的狀態,比如添加的行、刪除的行、修改的行、未變化的行等,DataAdpater將這些狀態返回到資料庫,然後資料庫根據記錄進行相應修改。這應該就是數據集的更新機制。
說的不是很清楚,希望你能理解!
⑼ 什麼是.dataset文件
你說的是typed DataSet和untyped DataSet吧?
typed DataSet是從DataSet派生的,它根據事先定義的Data Schema生成數據集,對數據集中的欄位實行簡滑強類型約束。你可以通過它產生的cs文件看到許多方法對DataTable的操作進行了封裝,這樣你就可以通過MyDataSet.MyTable.Field對欄位進行訪問,而不是像DataSet那樣:
MyDataSet.Tables["TableName"]["Field"]; 簡化了編程,同時不容易出錯,想像一下如果在"Field"中拼錯了欄位名,那麼編譯器也不會檢查出來,對於typed DataSet就不用了,如果你Field寫錯的話,那麼馬上就可以知道。
還有就是如果你在Typed DataSet包含多數據集,同時在XSD中對這些數據集建立關系和約束,那麼攔穗臘Type DataSet會生成相應的方法來反映這些關系和約束。如果使用untyped DataSet,你需要自己做。
性能上的考慮:雖然Typed DataSet創建對象實例的時候比unTypede DataSet要多一些開銷(時間和空間),但是在填充數據的時候要族皮比untyped DataSet快,這是因為DataAdapter已經知道怎麼Fill一個Typed DataSet,相比之下,DataSet需要兩次讀取資料庫,第一次取得資料庫中表的結構信息,第二次才fill數據。
Typed DataSet相對於DataSet的缺陷:除了創建的開銷之外,Typed DataSet不如DataSet靈活,因為Typed DataSet一旦確定,數據表的結構就固定了,如果需要修改,必須重新生成。
而DataSet你可以隨時根據需要進行操作(比如添加欄位,刪除欄位等)。
另外,團IDC網上有許多產品團購,便宜有口碑