日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

asp.net学习之再论sqlDataSource

發布時間:2023/12/20 asp.net 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 asp.net学习之再论sqlDataSource 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
asp.net學習之再論sqlDataSource 原文:asp.net學習之再論sqlDataSource

??? 本節從上一節沒有闡述的幾個方面,再討論一下SqlDataSource的用法及注意的事項。
??? 上一節的鏈接地址如下:http://www.cnblogs.com/shipfi/archive/2009/10/15/1584093.html

1. SqlDataSource的參數方向(Parameters Direction)


??? SqlDataSource的參數可以設置方向,默認值為INPUT。如果參數為INPUT,是無法從參數取回任何返回值的,如果要調用的存儲過程有返回值時,必須設置參數具有Output方向。
??? 參數包括了四個方向:
????? ● Input : 參數僅能輸入
????? ● InputOutput:參數可同時輸入或輸出
????? ● Output:參數僅能輸出
????? ● ReturenValue:表示參數為存儲過程、內置功能或使用定義函數等返回的操作。[注意是返回值]
??? 參數方向在aspx頁面中的設定就不講了,設定相應的Direction屬性就行了,比較簡單,如果在程序中動態設定的話,使用以下代碼就可以了:

sqlDatasource.SelectCommand =?"select * from Porducts where ProductName=@productName";
QueryStringParameter paramProduct =?new QueryStringParameter("ProductName",TypeCode.String,"ProductName");
paramProduct.Direction = ParameterDirection.Input;



??? 例1: 演示如何使用存儲過程,并且帶Output參數的使用

create?proc dawnSP_SelectPClass
(
???
@return_row?int output,?????? --返回行數
??? @pclass_parent_id?int?=1?? --父目錄id
)
as
begin
???
if?@pclass_parent_id=-1
???????
select?*?from product_class;
???
else
???????
select?*?from product_class where product_class_parent=@pclass_parent_id;
???
set?@return_row?=?@@rowcount;
???
return?0;
end
--測試一下存儲過程是否OK
declare?@ret_row?int
exec dawnSP_SelectPClass @ret_row output,-1;? --@ret_row后面一定要加output關鍵字
select?@ret_row;



1?<!-- 在頁面中使用存儲過程 –>
2?<script runat=”server”>
3?protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
4?{
5???? // 存儲過程中的第一個參數就是Output參數,所以取e.Command.Parameters[0]
6???? TextBox1.Text = e.Command.Parameters[0].Value.ToString();??
7?}
8?</script>
9?
10?<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>? <!-- 存儲過程返回的return_row將顯示在這個TextBox中 -->
11?<asp:SqlDataSource ID="SqlDataSource1" runat="server"
12???????????? ConnectionString="<%$ ConnectionStrings:DawnEnterpriseDBConnectionString %>"
13???????????? SelectCommand="dawnSP_SelectPClass" SelectCommandType="StoredProcedure"
14???????????? onselected="SqlDataSource1_Selected">?? <!-- 需要通過OnSelected事件、把return_row參數的值取出來 -->
15??????? <SelectParameters>
16???????????? <asp:Parameter Name="return_row" DefaultValue="0" DbType="Int32" Direction="Output"?/>
17???????????? <asp:QueryStringParameter DefaultValue="-1" Name="pclass_parent_id" DbType="Int32"
18???????????????????? QueryStringField="p_classid" Direction="Input"?/>
19????????????? <!-- 注:Parameter及QueryStringParameter的Name一定要和存儲過程中的參數名相匹配,否則會提示參數設定不正確 -->
20??????? </SelectParameters>
21?</asp:SqlDataSource>



2. 利用FilterExpression篩選數據


??? 在SqlDataSource中進行數據的篩選有兩種方法,一是使用SelectCommand機制進行數據篩選,即在SQL語句中加入where子句。二是使用FilterExpression進行篩選。
??? 使用FilterExpression機制進行篩選是使用DataView對象中的篩選機制。效率不高,但比較簡便。進行數據篩選只要在SqlDataSource控件中加入FilterExpression屬性就可以了。如下所示:
例2:使用FilterExpression篩選數據

<asp:TextBox ID="tb_factory" Text="道恩"? runat="server"></asp:TextBox>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"?
?????????????? ConnectionString="<%$ ConnectionStrings:DawnEnterpriseDBConnectionString %>"?
?????????????? SelectCommand="SELECT [product_id], [product_code], [product_name], [product_factory] FROM [product_main]"
?????????????? FilterExpression="product_factory like '%{0}%'" onfiltering="SqlDataSource1_Filtering"
>
??????
<FilterParameters>
??????????????
<asp:ControlParameter Name="fp_pro_factory" ControlID="tb_factory" PropertyName="Text"?/>
???????
</FilterParameters>
</asp:SqlDataSource>


以上,FilterExpression中引用的參數必須指定是{0}這樣的格式,引用@paramName這樣的形式我試驗過,好像行不通,不知道為什么。有待解釋。
??? 以下是MSDN對FilterExpression的解釋:

用于 FilterExpression 屬性的語法是格式字符串樣式表達式。篩選表達式語法與 Expression 屬性接受的語法相同。如果將參數添加到 FilterParameters 集合中,則也可以包括格式字符串占位符。例如,可在表達式中包括 "{0}" 以替換參數值。根據 FilterParameters 集合中的參數索引替換占位符。
可以在 FilterExpression 屬性中包括參數。如果參數類型為字符串類型或字符類型,則應將參數放在單引號中。如果參數是數值類型的,則不需要引號。


例3:動態取得和添加FilterExpression的參數

<script runat="server">
protected void ObjectDataSource1_Filtering(object sender, ObjectDataSourceFilteringEventArgs e)
{
???
if(e.ParameterValues.count>0)
???????? Label1.Text = e.ParameterValues[0].ToString();
???
if (Textbox1.Text ==?"") {
?????????? e.ParameterValues.Clear();
?????????? e.ParameterValues.Add("FullName", "Nancy Davolio");?
??? }
}
</script>
<asp:objectdatasource id="ObjectDataSource1" runat="server"
??????? selectmethod="GetAllEmployeesAsDataSet" typename="Samples.AspNet.CS.EmployeeLogic"
??????? filterexpression="FullName='{0}'" OnFiltering="ObjectDataSource1_Filtering">
???
<filterparameters>
????????
<asp:formparameter name="FullName" formfield="Textbox1" defaultvalue="Nancy Davolio"?/>
???
</filterparameters>
</asp:objectdatasource>



??? SqlDataSource中的FilterExpression運作的原理是通過DataView,那么,如何直接通過DataView對象進行數據的過濾呢。
例4:在程序中通過DataView進行數據的過濾

protected?void?Page_Load(object?sender,?EventArgs?e)
{
????
if(!IsPostBack){
????????ConnectionStringSettings?connSetting?=?WebConfigurationManager.ConnectionStrings["DawnEnterpriseDBConnectionString"];
????????SqlConnection?sqlConn?=?new?SqlConnection(connSetting.ConnectionString);
????????SqlDataAdapter?da?=?new?SqlDataAdapter("select?*?from?product_class",?sqlConn);
????????
//創建DataTable
????????DataTable?dt?=?new?DataTable();
????????dt.TableName?=?"product_class";
????????da.Fill(dt);
????????
//創建DataView,進行過濾
????????DataView?dv?=?new?DataView(dt);
????????dv.RowFilter?=?"product_class_parent=1";
????????
//指定數據源
????????GridView2.DataSource?=?dv;
????????GridView2.DataBind();
????}
}

3.處理并發

??? SqlDataSource控件的ConficatDetection屬性和OldValuesParameterFormatString屬性被賦值的情況下,這兩個屬性會使SqlDataSource控件為每個個數據列保持此列的原始值和修改后的值,以此來解決并發的問題。
??? ConficatDetection可以為以下兩個值之一:
????? CompareAllValues: 為每一列保持修改值和原始值
????? OverwritingChanges: 將會導致SqlDataSource控件直接使用新值覆蓋到數據列中
??? OldValuesParameterFormatStrin屬性用來為列的原始值提供唯一的名稱。
示例如下:
<asp:SqlDataSource?id=”srcMovies”?ConflictDetection=”CompareAllValues”?OldValuesParameterFormatString=”original_{0}”
????????
ConnectionString=”<%$?ConnectionStrings:Movies?%>
????????SelectCommand=”SELECT?Id,Title,Director?FROM?Movies”
????????UpdateCommand=”UPDATE?Movies?SET?Title=@Title,?Director=@Director?WHERE?Id=@original_Id?AND
???????????????????????????????? Title=@original_Title?AND?Director=@original_Director”
????????Runat=”server”?OnUpdated=”srcMovies_Updated”?/>

posted on 2014-05-04 17:47 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/lonelyxmas/p/3707561.html

總結

以上是生活随笔為你收集整理的asp.net学习之再论sqlDataSource的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。