asp.net SqlDataAdapter對(duì)象使用札記
更新時(shí)間:2009年04月09日 18:18:58 作者:
如果 DataAdapter 遇到多個(gè)結(jié)果集,它將在 DataSet 中創(chuàng)建多個(gè)表。將向這些表提供遞增的默認(rèn)名稱 TableN,以表示 Table0 的“Table”為第一個(gè)表名。
SqlDataAdapter
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
SqlCommand selectCMD = new SqlCommand("SELECT CustomerID, CompanyName FROM Customers", nwindConn);
selectCMD.CommandTimeout = 30;
SqlDataAdapter custDA = new SqlDataAdapter();
custDA.SelectCommand = selectCMD;//通過(guò)SqlCommand給SqlDataAdapter設(shè)定參數(shù),也可//直接用select語(yǔ)句
nwindConn.Open();
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
nwindConn.Close();
多個(gè)結(jié)果集
如果 DataAdapter 遇到多個(gè)結(jié)果集,它將在 DataSet 中創(chuàng)建多個(gè)表。將向這些表提供遞增的默認(rèn)名稱 TableN,以表示 Table0 的“Table”為第一個(gè)表名。如果以參數(shù)形式向 Fill 方法傳遞表名稱,則將向這些表提供遞增的默認(rèn)名稱 TableNameN,這些表名稱以表示 TableName0 的“TableName”為起始。
從多個(gè) DataAdapter 填充 DataSet
可以將任意數(shù)量的 DataAdapter 與一個(gè) DataSet 一起使用。每個(gè) DataAdapter 都可用于填充一個(gè)或多個(gè) DataTable 對(duì)象并將更新解析回相關(guān)數(shù)據(jù)源。DataRelation 和 Constraint 對(duì)象可以在本地添加到 DataSet,這樣,您就可以使來(lái)自多個(gè)不同數(shù)據(jù)源的數(shù)據(jù)相關(guān)聯(lián)。例如,DataSet 可以包含來(lái)自 Microsoft SQL Server 數(shù)據(jù)庫(kù)、通過(guò) OLE DB 公開的 IBM DB2 數(shù)據(jù)庫(kù)以及對(duì) XML 進(jìn)行流處理的數(shù)據(jù)源的數(shù)據(jù)。一個(gè)或多個(gè) DataAdapter 對(duì)象可以處理與每個(gè)數(shù)據(jù)源的通信。
以下代碼示例從 Microsoft SQL Server 2000 上的 Northwind 數(shù)據(jù)庫(kù)填充客戶列表,從存儲(chǔ)在 Microsoft? Access 2000 中的 Northwind 數(shù)據(jù)庫(kù)填充訂單列表。已填充的表通過(guò) DataRelation 相關(guān)聯(lián),然后客戶列表將與相應(yīng)客戶的訂單一起顯示出來(lái)。有關(guān) DataRelation 對(duì)象的更多信息,請(qǐng)參見添加表間關(guān)系和導(dǎo)航表間關(guān)系。
SqlConnection custConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");
SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", custConn);
OleDbConnection orderConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=c:\\Program Files\\Microsoft Office\\Office\\Samples\\northwind.mdb;");
OleDbDataAdapter orderDA = new OleDbDataAdapter("SELECT * FROM Orders", orderConn);
custConn.Open();
orderConn.Open();
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
orderDA.Fill(custDS, "Orders");
custConn.Close();
orderConn.Close();
DataRelation custOrderRel =
custDS.Relations.Add("CustOrders",custDS.Tables["Customers"].Columns["CustomerID"], custDS.Tables["Orders"].Columns["CustomerID"]);
foreach (DataRow pRow in custDS.Tables["Customers"].Rows)
{
Console.WriteLine(pRow["CustomerID"]);
foreach (DataRow cRow in pRow.GetChildRows(custOrderRel))
Console.WriteLine("\t" + cRow["OrderID"]);
}
SQL Server Decimal 類型
DataSet 使用 .NET Framework 數(shù)據(jù)類型來(lái)存儲(chǔ)數(shù)據(jù)。對(duì)于大多數(shù)應(yīng)用程序,這些類型都提供了一種方便的數(shù)據(jù)源信息表示形式。但是,當(dāng)數(shù)據(jù)源中的數(shù)據(jù)類型是 SQL Server decimal 時(shí),這種表示形式可能會(huì)導(dǎo)致問(wèn)題。.NET Framework decimal 數(shù)據(jù)類型最多允許 28 個(gè)有效位,而 SQL Server decimal 數(shù)據(jù)類型則允許 38 個(gè)有效位。如果 SqlDataAdapter 在 Fill 操作過(guò)程中確定 SQL Server decimal 字段的精度大于 28 個(gè)字符,則當(dāng)前行將不會(huì)被添加到 DataTable 中。此時(shí)將發(fā)生 FillError 事件,它使您能夠確定是否將發(fā)生精度損失并作出適當(dāng)?shù)捻憫?yīng)。有關(guān) FillError 事件的更多信息,請(qǐng)參見使用 DataAdapter 事件。若要獲取 SQL Server decimal 值,還可以使用 SqlDataReader 對(duì)象并調(diào)用 GetSqlDecimal 方法。
在 Update 過(guò)程中使用 SqlCommand,更改DataSet記錄
以下示例使用派生類 OleDbDataAdapter 來(lái)對(duì)數(shù)據(jù)源進(jìn)行 Update。此示例假定您已經(jīng)創(chuàng)建了一個(gè) OleDbDataAdapter 和一個(gè) DataSet。
以下示例使用派生類 OleDbDataAdapter 來(lái)對(duì)數(shù)據(jù)源進(jìn)行 Update。此示例假定您已經(jīng)創(chuàng)建了一個(gè) OleDbDataAdapter 和一個(gè) DataSet。
public DataSet CreateCmdsAndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableName)
{
OleDbConnection myConn = new OleDbConnection(myConnection);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn);
OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);
myConn.Open();
DataSet custDS = new DataSet();
myDataAdapter.Fill(custDS);
//code to modify data in dataset here
myDataAdapter.Update(custDS, myTableName);
myConn.Close();
return custDS;
}
下面的實(shí)例將創(chuàng)建一個(gè) SqlDataAdapter 并設(shè)置 SelectCommand 和 InsertCommand 屬性。假定已經(jīng)創(chuàng)建一個(gè) SqlConnection 對(duì)象。
public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd;
// Create the SelectCommand.
cmd = new SqlCommand("SELECT * FROM Customers " +
"WHERE Country = @Country AND City = @City", conn);
cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15);
da.SelectCommand = cmd;
// Create the InsertCommand.
cmd = new SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", conn);
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
da.InsertCommand = cmd;
return da;
}
下面的實(shí)例創(chuàng)建一個(gè) SqlDataAdapter 并設(shè)置 SelectCommand 和 DeleteCommand 屬性。假定已經(jīng)創(chuàng)建一個(gè) SqlConnection 對(duì)象。
public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd;
SqlParameter parm;
// Create the SelectCommand.
cmd = new SqlCommand("SELECT * FROM Customers " +
"WHERE Country = @Country AND City = @City", conn);
cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15);
da.SelectCommand = cmd;
// Create the DeleteCommand.
cmd = new SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", conn);
parm = cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;
da.DeleteCommand = cmd;
return da;
}
下面的實(shí)例將創(chuàng)建一個(gè) SqlDataAdapter 并設(shè)置 SelectCommand 和 UpdateCommand 屬性。假定已經(jīng)創(chuàng)建一個(gè) SqlConnection 對(duì)象。
public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd;
SqlParameter parm;
// Create the SelectCommand.
cmd = new SqlCommand("SELECT * FROM Customers " +
"WHERE Country = @Country AND City = @City", conn);
cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15);
da.SelectCommand = cmd;
// Create the UpdateCommand.
cmd = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", conn);
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
parm = cmd.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;
da.UpdateCommand = cmd;
return da;
}
SqlConnection nwindConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind");
SqlCommand selectCMD = new SqlCommand("SELECT CustomerID, CompanyName FROM Customers", nwindConn);
selectCMD.CommandTimeout = 30;
SqlDataAdapter custDA = new SqlDataAdapter();
custDA.SelectCommand = selectCMD;//通過(guò)SqlCommand給SqlDataAdapter設(shè)定參數(shù),也可//直接用select語(yǔ)句
nwindConn.Open();
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
nwindConn.Close();
多個(gè)結(jié)果集
如果 DataAdapter 遇到多個(gè)結(jié)果集,它將在 DataSet 中創(chuàng)建多個(gè)表。將向這些表提供遞增的默認(rèn)名稱 TableN,以表示 Table0 的“Table”為第一個(gè)表名。如果以參數(shù)形式向 Fill 方法傳遞表名稱,則將向這些表提供遞增的默認(rèn)名稱 TableNameN,這些表名稱以表示 TableName0 的“TableName”為起始。
從多個(gè) DataAdapter 填充 DataSet
可以將任意數(shù)量的 DataAdapter 與一個(gè) DataSet 一起使用。每個(gè) DataAdapter 都可用于填充一個(gè)或多個(gè) DataTable 對(duì)象并將更新解析回相關(guān)數(shù)據(jù)源。DataRelation 和 Constraint 對(duì)象可以在本地添加到 DataSet,這樣,您就可以使來(lái)自多個(gè)不同數(shù)據(jù)源的數(shù)據(jù)相關(guān)聯(lián)。例如,DataSet 可以包含來(lái)自 Microsoft SQL Server 數(shù)據(jù)庫(kù)、通過(guò) OLE DB 公開的 IBM DB2 數(shù)據(jù)庫(kù)以及對(duì) XML 進(jìn)行流處理的數(shù)據(jù)源的數(shù)據(jù)。一個(gè)或多個(gè) DataAdapter 對(duì)象可以處理與每個(gè)數(shù)據(jù)源的通信。
以下代碼示例從 Microsoft SQL Server 2000 上的 Northwind 數(shù)據(jù)庫(kù)填充客戶列表,從存儲(chǔ)在 Microsoft? Access 2000 中的 Northwind 數(shù)據(jù)庫(kù)填充訂單列表。已填充的表通過(guò) DataRelation 相關(guān)聯(lián),然后客戶列表將與相應(yīng)客戶的訂單一起顯示出來(lái)。有關(guān) DataRelation 對(duì)象的更多信息,請(qǐng)參見添加表間關(guān)系和導(dǎo)航表間關(guān)系。
SqlConnection custConn = new SqlConnection("Data Source=localhost;Integrated Security=SSPI;Initial Catalog=northwind;");
SqlDataAdapter custDA = new SqlDataAdapter("SELECT * FROM Customers", custConn);
OleDbConnection orderConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=c:\\Program Files\\Microsoft Office\\Office\\Samples\\northwind.mdb;");
OleDbDataAdapter orderDA = new OleDbDataAdapter("SELECT * FROM Orders", orderConn);
custConn.Open();
orderConn.Open();
DataSet custDS = new DataSet();
custDA.Fill(custDS, "Customers");
orderDA.Fill(custDS, "Orders");
custConn.Close();
orderConn.Close();
DataRelation custOrderRel =
custDS.Relations.Add("CustOrders",custDS.Tables["Customers"].Columns["CustomerID"], custDS.Tables["Orders"].Columns["CustomerID"]);
foreach (DataRow pRow in custDS.Tables["Customers"].Rows)
{
Console.WriteLine(pRow["CustomerID"]);
foreach (DataRow cRow in pRow.GetChildRows(custOrderRel))
Console.WriteLine("\t" + cRow["OrderID"]);
}
SQL Server Decimal 類型
DataSet 使用 .NET Framework 數(shù)據(jù)類型來(lái)存儲(chǔ)數(shù)據(jù)。對(duì)于大多數(shù)應(yīng)用程序,這些類型都提供了一種方便的數(shù)據(jù)源信息表示形式。但是,當(dāng)數(shù)據(jù)源中的數(shù)據(jù)類型是 SQL Server decimal 時(shí),這種表示形式可能會(huì)導(dǎo)致問(wèn)題。.NET Framework decimal 數(shù)據(jù)類型最多允許 28 個(gè)有效位,而 SQL Server decimal 數(shù)據(jù)類型則允許 38 個(gè)有效位。如果 SqlDataAdapter 在 Fill 操作過(guò)程中確定 SQL Server decimal 字段的精度大于 28 個(gè)字符,則當(dāng)前行將不會(huì)被添加到 DataTable 中。此時(shí)將發(fā)生 FillError 事件,它使您能夠確定是否將發(fā)生精度損失并作出適當(dāng)?shù)捻憫?yīng)。有關(guān) FillError 事件的更多信息,請(qǐng)參見使用 DataAdapter 事件。若要獲取 SQL Server decimal 值,還可以使用 SqlDataReader 對(duì)象并調(diào)用 GetSqlDecimal 方法。
在 Update 過(guò)程中使用 SqlCommand,更改DataSet記錄
以下示例使用派生類 OleDbDataAdapter 來(lái)對(duì)數(shù)據(jù)源進(jìn)行 Update。此示例假定您已經(jīng)創(chuàng)建了一個(gè) OleDbDataAdapter 和一個(gè) DataSet。
以下示例使用派生類 OleDbDataAdapter 來(lái)對(duì)數(shù)據(jù)源進(jìn)行 Update。此示例假定您已經(jīng)創(chuàng)建了一個(gè) OleDbDataAdapter 和一個(gè) DataSet。
public DataSet CreateCmdsAndUpdate(DataSet myDataSet,string myConnection,string mySelectQuery,string myTableName)
{
OleDbConnection myConn = new OleDbConnection(myConnection);
OleDbDataAdapter myDataAdapter = new OleDbDataAdapter();
myDataAdapter.SelectCommand = new OleDbCommand(mySelectQuery, myConn);
OleDbCommandBuilder custCB = new OleDbCommandBuilder(myDataAdapter);
myConn.Open();
DataSet custDS = new DataSet();
myDataAdapter.Fill(custDS);
//code to modify data in dataset here
myDataAdapter.Update(custDS, myTableName);
myConn.Close();
return custDS;
}
下面的實(shí)例將創(chuàng)建一個(gè) SqlDataAdapter 并設(shè)置 SelectCommand 和 InsertCommand 屬性。假定已經(jīng)創(chuàng)建一個(gè) SqlConnection 對(duì)象。
public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd;
// Create the SelectCommand.
cmd = new SqlCommand("SELECT * FROM Customers " +
"WHERE Country = @Country AND City = @City", conn);
cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15);
da.SelectCommand = cmd;
// Create the InsertCommand.
cmd = new SqlCommand("INSERT INTO Customers (CustomerID, CompanyName) " +
"VALUES (@CustomerID, @CompanyName)", conn);
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
da.InsertCommand = cmd;
return da;
}
下面的實(shí)例創(chuàng)建一個(gè) SqlDataAdapter 并設(shè)置 SelectCommand 和 DeleteCommand 屬性。假定已經(jīng)創(chuàng)建一個(gè) SqlConnection 對(duì)象。
public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd;
SqlParameter parm;
// Create the SelectCommand.
cmd = new SqlCommand("SELECT * FROM Customers " +
"WHERE Country = @Country AND City = @City", conn);
cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15);
da.SelectCommand = cmd;
// Create the DeleteCommand.
cmd = new SqlCommand("DELETE FROM Customers WHERE CustomerID = @CustomerID", conn);
parm = cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;
da.DeleteCommand = cmd;
return da;
}
下面的實(shí)例將創(chuàng)建一個(gè) SqlDataAdapter 并設(shè)置 SelectCommand 和 UpdateCommand 屬性。假定已經(jīng)創(chuàng)建一個(gè) SqlConnection 對(duì)象。
public static SqlDataAdapter CreateCustomerAdapter(SqlConnection conn)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand cmd;
SqlParameter parm;
// Create the SelectCommand.
cmd = new SqlCommand("SELECT * FROM Customers " +
"WHERE Country = @Country AND City = @City", conn);
cmd.Parameters.Add("@Country", SqlDbType.NVarChar, 15);
cmd.Parameters.Add("@City", SqlDbType.NVarChar, 15);
da.SelectCommand = cmd;
// Create the UpdateCommand.
cmd = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, CompanyName = @CompanyName " +
"WHERE CustomerID = @oldCustomerID", conn);
cmd.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
cmd.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
parm = cmd.Parameters.Add("@oldCustomerID", SqlDbType.NChar, 5, "CustomerID");
parm.SourceVersion = DataRowVersion.Original;
da.UpdateCommand = cmd;
return da;
}
您可能感興趣的文章:
- C#從DataTable獲取數(shù)據(jù)的方法
- c# 獲取數(shù)據(jù)庫(kù)中所有表名稱的方法
- C#獲取所有SQL Server數(shù)據(jù)庫(kù)名稱的方法
- C#操作DataTable方法實(shí)現(xiàn)過(guò)濾、取前N條數(shù)據(jù)及獲取指定列數(shù)據(jù)列表的方法
- C#實(shí)現(xiàn)解析百度天氣數(shù)據(jù),Rss解析百度新聞以及根據(jù)IP獲取所在城市的方法
- c#連接sqlserver數(shù)據(jù)庫(kù)、插入數(shù)據(jù)、從數(shù)據(jù)庫(kù)獲取時(shí)間示例
- C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法
相關(guān)文章
C#.net格式化時(shí)間字符串達(dá)到不同的顯示效果
時(shí)候我們要對(duì)時(shí)間進(jìn)行轉(zhuǎn)換,達(dá)到不同的顯示效果,本文將幫助你實(shí)現(xiàn)這個(gè)多彩的效果,整理很詳細(xì),以備不時(shí)之需,感興趣的朋友可以了解下,或許本文對(duì)你有所幫助2013-01-01大型門戶網(wǎng)站實(shí)現(xiàn)的十四大技術(shù)小結(jié)
參考下大型門戶網(wǎng)站的技術(shù),大家可以盡量的備份好服務(wù)器。2010-10-10asp.net DropDownList 三級(jí)聯(lián)動(dòng)下拉菜單實(shí)現(xiàn)代碼
asp.net DropDownList 三級(jí)聯(lián)動(dòng)下拉菜單效果代碼,需要的朋友可以參考下。2009-12-12ASP.NET 回發(fā)密碼框清空問(wèn)題處理方法
這篇文章主要介紹了ASP.NET 回發(fā)密碼框清空問(wèn)題處理方法,需要的朋友可以參考下2014-03-03asp.net發(fā)布后web.config中compilation的debug的值true和false區(qū)別點(diǎn)整理
在本篇文章里小編給大家整理的是一篇關(guān)于asp.net發(fā)布后web.config中compilation的debug的值true和false區(qū)別點(diǎn)內(nèi)容,有需要的為朋友們可以參考下。2020-01-01ASP.NET在上傳文件時(shí)對(duì)文件類型的高級(jí)判斷的代碼
在上傳文件過(guò)程中,可以通過(guò)修改擴(kuò)展名來(lái)逃過(guò)文件類型的判斷并實(shí)現(xiàn)上傳,就需要可以驗(yàn)證究竟是什么文件。下面的代碼大家可以測(cè)試下。2009-12-12