国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

存儲過程從入門到熟練(c#篇)

2024-07-21 02:26:44
字體:
來源:轉載
供稿:網友

①為什么要使用存儲過程?
因為它比sql語句執行快.

②存儲過程是什么?
把一堆sql語句羅在一起,還可以根據條件執行不通sql語句.(ax寫作本文時觀點)

③來一個最簡單的存儲過程
create procedure dbo.testprocedure_ax
as
select userid from users order by userid desc

注:dbo.testprocedure_ax是你創建的存儲過程名,可以改為:axzhz等,別跟關鍵字沖突就行了.as下面就是一條sql語句,不會寫sql語句的請回避.

④我怎么在asp.net中調用這個存儲過程?
下面黃底的這兩行就夠使了.
        public static string getcustomercname(ref arraylist arraycname,ref arraylist arrayid)
        {
            sqlconnection con=adconnection.createconnection();
            sqlcommand cmd=new sqlcommand("testprocedure_ax",con);
            cmd.commandtype=commandtype.storedprocedure;
            con.open();
            try
            {
                sqldatareader dr=cmd.executereader();
                while(dr.read())
                {
                    if(dr[0].tostring()=="")
                    {
                        arraycname.add(dr[1].tostring());
                    }
                }
                con.close();
                return "ok!";
            }
            catch(exception ex)
            {
                con.close();
                return ex.tostring();
            }
        }
注:其實就是把以前
sqlcommand cmd=new sqlcommand("select userid from users order by userid desc",con);
中的sql語句替換為存儲過程名,再把cmd的類型標注為commandtype.storedprocedure(存儲過程)

⑤寫個帶參數的存儲過程吧,上面這個簡單得有點慘不忍睹,不過還是蠻實用的.
參數帶就帶兩,一個的沒面子,太小家子氣了.

create procedure dbo.axzhz
/*
這里寫注釋
*/
@startdate varchar(16),
@enddate varchar(16)
as
 select id  from table_ax where commentdatetime>@startdate and commentdatetime<@enddate order by contentownerid desc

注:@startdate varchar(16)是聲明@startdate 這個變量,多個變量名間用【,】隔開.后面的sql就可以使用這個變量了.

⑥我怎么在asp.net中調用這個帶參數的存儲過程?

 public static string getcustomercnamecount(string startdate,string enddate,ref dataset ds)
{
            sqlconnection con=adconnection.createconnection();
//-----------------------注意這一段--------------------------------------------------------------------------------------------------------
            sqldataadapter da=new sqldataadapter("axzhz",con);

            para0=new sqlparameter("@startdate",startdate);
            para1=new sqlparameter("@enddate",enddate);
            da.selectcommand.parameters.add(para0);
            da.selectcommand.parameters.add(para1);
            da.selectcommand.commandtype=commandtype.storedprocedure;
//-------------------------------------------------------------------------------------------------------------------------------


            try
            {
                con.open();
                da.fill(ds);
                con.close();
                return "ok";
            }
            catch(exception ex)
            {
                return ex.tostring();
            }           
        }

注:把命令的參數添加進去,就ok了
鳥的,改字體顏色的東西太垃圾了,改不好,大家湊活著看.

⑦我還想看看sql命令執行成功了沒有.
注意看下面三行紅色的語句

create procedure dbo.axzhz
/*
  @parameter1 用戶名
  @parameter2 新密碼
*/
@password nvarchar(20),
@username nvarchar(20)
as
declare @err0 int
update wl_user set [email protected] where [email protected]
set @[email protected]@error
select  @err0 as err0

注:先聲明一個整型變量@err0,再給其賦值為@@error(這個是系統自動給出的語句是否執行成功,0為成功,其它為失敗),最后通過select把它選擇出來,某位高人說可以通過return返回,超出本人的認知范圍,俺暫時不會,以后再補充吧

⑧那怎么從后臺獲得這個執行成功與否的值呢?
下面這段代碼可以告訴你答案:
    public static string getcustomercname()
        {
            sqlconnection con=adconnection.createconnection();
           
            sqlcommand cmd=new sqlcommand("axzhz",con);
            cmd.commandtype=commandtype.storedprocedure;
            para0=new sqlparameter("@startdate","2006-9-10");
            para1=new sqlparameter("@enddate","2006-9-20");
            da.selectcommand.parameters.add(para0);
            da.selectcommand.parameters.add(para1);
            con.open();
            try
            {
               int32 re=(int32)cmd.executescalar();
                con.close();
                if (re==0)
                 return "ok!";
                else
                 return "false";
            }
            catch(exception ex)
            {
                con.close();
                return ex.tostring();
            }
        }
注:就是通過sqlcommand的executescalar()方法取回這個值,這句話是從msdn上找的,俺認為改成:
     int re=(int)cmd.executescalar();  99%正確,現在沒時間驗證,期待您的測試!!!

⑨我要根據傳入的參數判斷執行哪條sql語句!!~
下面這個存儲過程可以滿足我們的要求,竟然是pascal/vb的寫法,begin----end ,不是{},,,對使用c#的我來說,這個語法有點惡心.........

alter procedure dbo.selectcustomercnamecount
@customerid int
as
if @customerid=-1
 begin
 select contentownerid ,usercname,count(*) as countall from view_usercomment group by contentownerid,usercname order by contentownerid desc
 end
else
 begin
 select contentownerid ,usercname,count(*) as countall from view_usercomment where [email protected] group by contentownerid,usercname order by contentownerid desc
 end

好了,俺的水平只止于此,也夠菜鳥們喝一壺的了,還有更多東西等著我們去發現,無盡的征途!!!!!!!!!!!

最大的網站源碼資源下載站,

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灯塔市| 盐边县| 东乡县| 上林县| 青海省| 邵阳县| 来宾市| 沾益县| 孙吴县| 古丈县| 隆尧县| 青浦区| 贡山| 德庆县| 甘孜县| 万山特区| 大竹县| 获嘉县| 长子县| 宽甸| 凭祥市| 循化| 辛集市| 凤庆县| 囊谦县| 博野县| 苏尼特右旗| 同德县| 鄂伦春自治旗| 隆昌县| 白水县| 车险| 轮台县| 绵阳市| 利津县| 阿克苏市| 鄄城县| 礼泉县| 肥乡县| 通河县| 万源市|