一、什麼是存儲過程
存儲過程就是在大型數據庫中,一種完成特定功能的SQL語句集
;一次編譯永久有效,最後返回用戶想要的結果,所以在較爲複雜的業務處理中,通常使用存儲過程封裝查詢語句。
使用SqlCommand
對象調用存儲過程時與執行SQL語句命令有很大的區別,主要包含對存儲過程參數的傳遞,輸出參數獲取以及存儲過程返回值等本質上的區別。
二、例子:使用Command對象調用存儲過程實現搜索功能
這個例子,是基於上一篇博客的內容的,上一部分博客點我前往頁面!!
先來看一下效果:
然後看一下逐步的實現過程:
步驟1: 創建存儲過程,首先點擊School
數據庫,然後打開可編程性
,右鍵單擊存儲過程
,最後單擊新建
,這樣:
然後寫入Sql
語句:
create proc GetStudentList
@SearchValue varchar(256)=''
as
begin
if @SearchValue<>''
begin
select * from [dbo].[Student] where Name like '%'+@SearchValue+'%'
end
else
begin
select * from [dbo].[Student]
end
end
步驟2: 新建網站,創建Default.aspx
頁面,在頁面添加文本框和輸入框控件:
<div>
<div>
<asp:TextBox ID="TextBox1" runat="server" class="TxtSearch"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="搜索" CssClass="BtnSearch" OnClick="Button1_Click" />
</div>
<div id="tabList" runat="server">
</div>
</div>
步驟3: 爲表格和搜索建設置CSS
樣式:
<style type="text/css">
.TxtSearch,.BtnSearch{
border-width:1px;
border-style:solid;
}
table,table th,table td{
border:1px;
border-style:solid;
border-color:#22bbad;
}
table th{
border-color:white;
}
table{
border-collapse:collapse;
}
table th{
width:150px;
height:30px;
text-align:center;
background-color:#22bbad;
color:white;
}
table td{
height:30px;
text-align:center;
}
</style>
步驟4: 爲button
綁定事件處理方法,並且在頁面載入時直接顯示所有數據:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string Res = GetSqlData();
this.tabList.InnerHtml = Res;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string Res = GetSqlData();
this.tabList.InnerHtml = Res;
}
步驟5: 寫GetSqlData
方法:
private string GetSqlData()
{
string SearchValue = this.TextBox1.Text;
StringBuilder Res = new StringBuilder();
Res.Append("<table><tr><th>序號</th><th>姓名</th><th>性別</th><th>年齡</th><th>班級</th></tr>");
using(SqlConnection conn = new SqlConnection("Server=DESKTOP-9FCSCD4;DataBase=School;Trusted_Connection=SSPI"))
{
conn.Open();
SqlCommand comm = new SqlCommand();
//指定發送到數據庫的執行命令爲調用存儲過程
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "GetStudentList"; //存儲過程的名稱
comm.Connection = conn;
//定義存儲過程中的參數
SqlParameter Param = new SqlParameter("SearchValue", SqlDbType.VarChar, 256);
Param.Value = SearchValue; //設置參數值
comm.Parameters.Add(Param);
using(SqlDataReader DataReader = comm.ExecuteReader())
{
while (DataReader.Read())
{
int ID = (int)DataReader["ID"];
string Name = (string)DataReader["Name"];
string Sex = (string)DataReader["Sex"];
int Age = (int)DataReader["Age"];
string Class = (string)DataReader["Class"];
Res.Append("<tr><td>" + ID + "</td>");
Res.Append("<td>" + Name + "</td>");
Res.Append("<td>" + Sex + "</td>");
Res.Append("<td>" + Age + "</td>");
Res.Append("<td>" + Class + "</td></tr>");
}
}
comm.Dispose();
}
Res.Append("</table>");
return Res.ToString();
}
完成!