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

首頁 > 編程 > .NET > 正文

從零開始學ASP.NET

2024-07-10 12:56:42
字體:
來源:轉載
供稿:網友
第一天

學習目的:

掌握最基本的label、textbox、button控件用法

掌握用stringbuider類連接字符串

理解服務器的環境變量


stringbuilder類:
命名空間是:system.text。

stringbuilder類是個高效的類,stringbuilder.append連接字符串的方法是非常快的。用于連接大量的字符串,其速度的優越性就會體現出來。

先舉幾個例子:
在cs或vb文件的頭部加上
[c#]using system.text;
[vb]imports system.text

[c#]stringbuilder sbfirst = new stringbuilder();
sbfirst.append(“這是第一個學aspnet的例子</br>”);
sbfirst.append( “這個例子太簡單</br>”);
sbfirst.append( “連三歲小陔都會做,我早知道了,嘿嘿。”);
response.write(sbfirst.tostring());

[vb]dim sbfirst as stringbuilder = new stringbuilder()
sbfirst.append(“這是第一個學aspnet的例子</br>”)
sbfirst.append( “這個例子太簡單</br>”)
sbfirst.append( “連三歲小陔都會做,我早知道了,嘿嘿。”)
response.write(sbfirst.tostring)

下面就可以做正題了:
先建立一個c#的web應用程序工程,這廢話我就少說了吧。
放一個button控件:id為btnshowvariable
放一個label控件:id為labservervariable

添加button的單擊事件,如下代碼
private void btnshowvariable_click(object sender, system.eventargs e)
{
labservervariables.text = "";

stringbuilder info = new stringbuilder();

foreach (object objvar in request.servervariables)
{
info.append("<span style='font-size:9pt'>");
info.append(objvar.tostring());
info.append(" = <font color=blue>");
info.append(request.servervariables[objvar.tostring()]);
info.append("</font></span><br>");
}

labservervariables.text = info.tostring();
}

結果顯示:

圖片如下:


這樣我們就可以這樣用
response.write(request.servervariables["remote_addr"]); // ip地址
response.write("<br>");
response.write(request.servervariables["url"]); // 網頁的url

第二天

學習目的:


掌握文本框的用法

初次接觸try…catch…語法

今天內容很輕松,用一個例子,輸入年月日,判斷輸入是否正確

圖片如下:


用個文本框,id分別為txtyear,txtmonth,txtdate;
檢驗按鈕的代碼為:
private void btncheck_click(object sender, system.eventargs e)
{
int year, month, date;

// 先把輸入的字符轉成int類型,如果非數字型,
// 會觸發錯誤
try
{
year = convert.toint32(txtyear.text);
month = convert.toint32(txtmonth.text);
date = convert.toint32(txtdate.text);
}
catch
{
labcheckinfo.text = "輸入的是非數字字符。";
return;
}

// 如果第一步檢驗合格,就把輸入的數字轉化為日期格式
// 如果不符合日期格式即引發錯誤
try
{
datetime dt = new datetime(year, month, date);
}
catch
{
labcheckinfo.text = "輸入的數字不符合日期格式";
return;
}

labcheckinfo.text = "輸入正確";
}

嗯,補充一下,關于stringbuider
在處理字符串的時候很多人喜歡+=,其實對于string來說,一旦定義了就無法更改了
所謂的+只是新建的一個新的string變量并賦值
所以對于盡量使用stringbuider的append的方法,這樣將大量的節省服務器的資源

第三天

學習目的:


掌握下拉列表框的用法,并理解autopostback屬性;

理解isposkback及用法;

初識datatable的增加列、行,與下拉列表框綁定的方法。

今天的內容稍多些,而且涉及一些比較常用的,如ispostback及datatable的基本用法。

知識點:
ispostback:在頁面onload之間是false值,而當從服務器回傳后,該值變為true。當頁面中的button或imagebutton等觸發事件,都會把表單回傳到服務器,而返回時又會引發onload事件。為了節省服務器資源,有些加載中需進行一次,而不需要在回傳后多次發生,可以用!isposkback來作為條件,那么頁面第一次加載后,以后就不會發生。該屬性可以幫助你提高程序的性能。
datatable:即數據表,.net 程序中最常用的類,特別是數據庫開發中,沒有該類的程序是不可想象的。

先做個小程序來練練手,很簡單,就一個下拉菜單,取名dlstweb。在屬性的itmes選項中打開以下對話框,添加各項:


圖片如下:


aspx中的代碼為:
<asp:dropdownlist id="dlstweb" style="z-index: 101; left: 32px;
position: absolute; top: 32px" runat="server"
width="88px" autopostback="true">
<asp:listitem value="http://www.sina.com.cn">新浪 </asp:listitem>
<asp:listitem value="http://www.sohu.com">搜狐</asp:listitem>
<asp:listitem value="http://www.163.com">網易</asp:listitem>
</asp:dropdownlist>

在下拉框的selectedindexchanged事件中的加入代碼:
private void dlstweb_selectedindexchanged(object sender, system.eventargs e)
{
response.write("<script language=javascript>window.open('" +dlstweb.selectedvalue + "');</script>");
}

按f5運行,可是我們發現這下拉框選擇時什么事也沒發生。原來原因是出在下拉框的autopostback屬性上,把它設為true后再試試,一切ok了。
下面我們增加些難度,下拉框中的內容很多情況下不是事先固定的,而是要動態添加。這里設計是用一數據表datatable與之聯系起來。

另建一文件,按上添加一下拉框,取名dlstweb,先設autopostpack為false,否則在剛啟動而面就觸發selectedindexchanged事件,彈出窗口就亂飛了。
在onload事件中添加代碼,注意datatable用法及isposkback
datatable屬于system.data命名空間,所以如果頁面沒預添加,可以自行增加這一行。

private void page_load(object sender, system.eventargs e)
{
// 用ispostback判斷,只在沒有回傳時才初始化
// 這樣可以防止每次刷新或回傳時,都執行一次以下代碼
// 可以節省服務器的資源了。
if (!ispostback)
{
datatable dt = new datatable();
datarow dr;

// 在表中增加字段
dt.columns.add("webname", typeof(string));
dt.columns.add("weburl", typeof(string));

// 表中增加行
dr = dt.newrow();
dr["webname"] = "新浪";
dr["weburl"] = "http://www.sina.com.cn";
dt.rows.add(dr);

dr = dt.newrow();
dr["webname"] = "網易";
dr["weburl"] = "http://www.163.com";
dt.rows.add(dr);

dr = dt.newrow();
dr["webname"] = "搜狐";
dr["weburl"] = "http://www.sohu.com";
dt.rows.add(dr);

// 把表與下拉菜單綁定數據
dlstweb.datasource = dt;
dlstweb.datatextfield = "webname";
dlstweb.datavaluefield = "weburl";
dlstweb.databind();

// 開始時就把下拉菜單的autopostback設為false,
// 防止一開始就亂跳出網頁來
dlstweb.autopostback = true;
}
}

下面的事件與前面一模一樣了
private void dlstweb_selectedindexchanged(object sender, system.eventargs e)
{
response.write("<script language=javascript>window.open('" +dlstweb.selectedvalue + "');</script>");
}

小結:今天的一些知識非常重要,為了理解,程序的難度并不高。但這是以后程序設計的基礎,所以這些你一定要掌握。
vb.net增加字段代碼稍有不同,如下:

// 在表中增加字段
dt.columns.add("webname", gettype(string))
dt.columns.add("weburl", gettype(string))

其它都差不多了。

每四天

學習目的:


學習ado.net用法,并如何用datarearder讀取數據

今天練習數據庫的最基本用法,如何打開數據庫。首先在網站設置文件web.config文件的<configuration>下方加入以下節點:

<configuration>

<appsettings>
<add key="數據庫1" value="ex01.mdb" />
</appsettings>

……

該節點設置了數據庫的路徑,這樣就可以很方便的調用數據庫文件了,調用方法為:
server.mappath(configurationsettings.appsettings["數據庫1"])
這是asp.net程序的通用方法,以后介紹的sql server數據庫也是在此設置的。
好開始做程序,首先在cs文件的頭部加入:
using system.configuration;
using system.data.oledb;
using system.text;
以下在page的load事件中,讀取access數據庫,并用表格顯示出來:
private void page_load(object sender, system.eventargs e)
{
stringbuilder sbtable = new stringbuilder(); // 用于輸出表格的語句

string strconnection = "provider=microsoft.jet.oledb.4.0;data source="
+ server.mappath(configurationsettings.appsettings["數據庫1"]);

// 連接數據庫的語句
oledbconnection conn = new oledbconnection(strconnection);
// 建立dbcommand對象
oledbcommand cmd = conn.createcommand();
cmd.commandtext = "select * from book";

// 打開數據庫
conn.open();

// 用datareader讀取數據
oledbdatareader dr = cmd.executereader();

sbtable.append("<table cellspacing='0' cellpadding='0' border='1'><tr>");
sbtable.append("<td>書名</td><td>作者</td><td>單價<td></tr>");
while (dr.read())
{
sbtable.append("<tr><td>");
sbtable.append(dr["booktitle"].tostring());
sbtable.append("</td><td>");
sbtable.append(dr["author"].tostring());
sbtable.append("</td><td>");
sbtable.append(dr["unitprice"].tostring());
sbtable.append("</td><tr>");
}
sbtable.append("</tr></table>");

// 記住dr用畢必須關閉,否則會阻塞服務器
dr.close();

// dbconnection是受托管的,可以不關閉
// 但為良好的編程習慣,應該關閉
conn.close();

response.write(sbtable.tostring());

}
顯示結果

圖片如下:

第五天

學習目的:


掌握ado.net打開sql server數據庫的方法。

今天做個非常普通的例子,做一個用戶登錄框。主要是通過這個練習認識一下sql server數據庫的連接方法。和昨天的例子方法基本相同,很容易掌握的。
先建立sql server數據庫,庫名為aspnetabc,并建立一member新表,建表sql如下:

create table [dbo].[member] (
[memberid] [int] identity (1, 1) not null ,
[membername] [nvarchar] (50) collate chinese_prc_ci_as not null ,
[password] [nvarchar] (50) collate chinese_prc_ci_as not null ,
[gender] [bit] not null ,
[birthday] [datetime] null ,
[email] [nvarchar] (50) collate chinese_prc_ci_as null
) on [primary]

alter table [dbo].[member] with nocheck add
constraint [pk_member] primary key clustered
(
[memberid]
) on [primary]

與上一例子差不多,在web.config文件中再增加一行:
<appsettings>
<add key="數據庫1" value="ex01.mdb" />
<add key="sqldatabase1" value="data source=localhost;user id=sa;password=sa;initial catalog=aspnetabc;connect timeout=30" />
</appsettings>

在面中添加二個文本框,txtmembername、txtpassword,并設置txtpassword的textmode為password。設置按鈕btnlogin。btnlogin的事件代碼如下:

private void btnlogin_click(object sender, system.eventargs e)
{
// 先檢驗輸入正確性
if (txtmembername.text == string.empty || txtmembername.text.trim() == "")
{
response.write("<script language=javascript>alert('帳號不能為空')</script>");
return;
}
if (txtpassword.text == string.empty || txtpassword.text.trim() == "")
{
response.write("<script language=javascript>alert('沒有輸入密碼')</script>");
return;
}

string strconnection = configurationsettings.appsettings["sqldatabase1"];
string sqlmember = "select membername ,[password] from member "
+ " where membername = '" + txtmembername.text.trim() + "'"
+ " and [password] = '" + txtpassword.text.trim() + "'";

// 連接sqlserver數據庫
sqlconnection conn = new sqlconnection(strconnection);
// 建立sqlcommand
sqlcommand cmd = conn.createcommand();
cmd.commandtext = sqlmember;
conn.open();
// 建立datareader
sqldatareader dr = cmd.executereader();

// 判斷datareader是否為空記錄
if (dr.hasrows)
{
response.write("<script language=javascript>alert('" + txtmembername.text + "歡迎你!')</script>");
}
else
{
response.write("<script language=javascript>alert('找不到該會員,或密碼錯誤。')</script>");
}

// 千萬不要忘記關閉datareader
dr.close();

conn.close();
}

好了,一個非常簡單的登錄框做好了。當然在實際程序中還應加入跳轉等,這個就留給你做了。

第六天

學習目的


掌握如何用ado.net插入新的記錄

我們學得好快,今天做一個簡易的新聞發布網頁,可以說是個演示型的,只是讓大家能理插入數據的最主要步驟。掌握今天的內容,我們就有基礎可以做一個稍有實用的新聞程序了。
為了不使注意力分散,程序沒有加入輸入的驗證,很快我會接下去寫一個驗證輸入的方法。


圖片如下:


仍用昨天的方法新建一數據表,sql語句如下:
create table [dbo].[newsarticle] (
[newsarticleid] [int] identity (1, 1) not null ,
[title] [nvarchar] (50) collate chinese_prc_ci_as not null ,
[subtitle] [nvarchar] (50) collate chinese_prc_ci_as null ,
[content] [ntext] collate chinese_prc_ci_as not null ,
[writer] [nvarchar] (10) collate chinese_prc_ci_as null ,
[pubtime] [datetime] not null
) on [primary] textimage_on [primary]

alter table [dbo].[newsarticle] with nocheck add
constraint [df_newsarticle_pubtime] default (getdate()) for [pubtime],
constraint [pk_newsarticle] primary key clustered
(
[newsarticleid]
) on [primary]
go

按昨天的方法加入頭部的語句,在提交按鈕中建立以下事件:

private void btnpublish_serverclick(object sender, system.eventargs e)
{
string strconnection = configurationsettings.appsettings["sqldatabase1"];

// 連接sqlserver數據庫
sqlconnection conn = new sqlconnection(strconnection);
// 建立sqlcommand
sqlcommand cmd = conn.createcommand();
cmd.commandtext = "insert into newsarticle (title, subtitle, writer, content) values ("
+ "'" + txttitle.text + "',"
+ "'" + txtsubtitle.text + "',"
+ "'" + txtwriter.text + "',"
+ "'" + txtcontent.text + "')";
conn.open();
//response.write (cmd.commandtext);

// 插入記錄
try
{
cmd.executenonquery();
}
catch (exception ex)
{
response.write("<script language=javascript>alert('輸入錯誤,數據庫不能更新。')</script>");
}
finally
{
conn.close();
}
}

注意command對象的executenonquery()方法使用,該方法可以用于插入、更新、刪除等操作,是command對象的重要方法。今天介紹了command語句的最基本用法,下次還將介紹占位符的用法。好了,各位先消化一下,明后天將做實用的東東了。
第七天

學習目的


接觸驗證控件

昨天介紹了sql server插入數據,但是我們省略了驗證輸入這一步。以前的做法是用語句逐個判斷輸入的正確性,如是否為空,長度是否超過等。現在.net中有了驗證控件,可以使我們在編程的語句中大在簡化了。今天介紹驗證控件中最基本的一個,requeiredfieldvalidator控件,是用來判別否輸入控件是否為空值,如為空則引發錯誤。

requeiredfieldvalidator可以用來驗證textbox、listbox、dropdownlist、radiobuttonlist及html控件中的inputtext、textarea、select、inputfile等。

屬性介紹:
controltovalidate:指點驗證某一控件的控件名,如為空,將引發異常;
errormessage:錯誤提示信息;
isvalid:用于判斷是否通過驗證;
display:有三個值,none表示錯誤時不顯示信息,但在validationsunmmary控件中顯示;static表示不論錯誤提示是否出現,都占頁面空間;dymatic:只有錯誤提示才占用空間。
text:文本內容。和errormessage一起使用時,將顯示text錯誤信息。該種情況可以通過validationsummay控件顯示errormessage屬性的提示。

使用方法:
設置:
txttitle:maxlength(50);
txtsubtitle: maxlength(50);
txtwriter: maxlength(10);
這樣可以防止輸入過長字符串
rfvtitle:controltovalidate(txttitle)、errormessage(“標題必須輸入。”)
rfvcontent:controltovalidate(txttitle)、errormessage(“內容必須輸入。”)

這樣在沒有驗證通過時,會出現下圖信息提示,并不執行插入語句。直到驗證正確后,才執行數據更新。


圖片如下:

第八天

學習目的


學會sql中的占位符用法

在鯨魚這幾天忙死了,好幾天沒寫了,真對不起各位。這幾天讓xhtml鬧得不開心,雖然以前也知道這個,但沒太在意。可現在我是如夢初醒,我發覺xhtml是個信號,所以這幾天不得不仔細研究一下這個。很笨,我還沒發覺xhtml的奧妙。確實如此,沒上過臺面,真不知這桌菜怎樣好吃。少說了,回到正題。

先把以前的command的commandtext重新寫過:
cmd.commandtext = "insert into newsarticle (title, subtitle, writer, content)"
+ " values ( @title, @subtitle, @writer, @content )";
這樣代碼是否很清晰了,我們可以避免一大串的難以看懂的的語句了。

接下來,我們就給這些定位符賦予屬性和值了:
cmd.parameters.add("@title", sqldbtype.nvarchar, 50);
cmd.parameters.add("@subtitle", sqldbtype.nvarchar, 50);
cmd.parameters.add("@writer", sqldbtype.nvarchar, 10);
cmd.parameters.add("@content", sqldbtype.ntext);

以上我們給每個占位符定義一個值類型,相信不難看懂吧。接者再給于值:
cmd.parameters["@title"].value = txttitle.text.trim();
if (txtsubtitle.text == string.empty || txtsubtitle.text.trim() == "")
{
cmd.parameters["@subtitle"].value = dbnull.value;
}
else
{
cmd.parameters["@subtitle"].value = txtsubtitle.text.trim();
}
if (txtwriter.text == string.empty || txtwriter.text.trim() == "")
{
cmd.parameters["@writer"].value = dbnull.value;
}
else
{
cmd.parameters["@writer"].value = txtwriter.text;
}
cmd.parameters["@content"].value = txtcontent.text;

其實,也可以這樣寫:
cmd.parameters.add("@title", sqldbtype.nvarchar, 50) .value = txttitle.text.trim();
這要看你喜歡了。

不錯吧,程序是否很有條理。

程序代碼:
private void btnpublish_serverclick(object sender, system.eventargs e)
{
string strconnection = configurationsettings.appsettings["sqldatabase1"];

// 連接sqlserver數據庫
sqlconnection conn = new sqlconnection(strconnection);
// 建立sqlcommand
sqlcommand cmd = conn.createcommand();
cmd.commandtext = "insert into newsarticle (title, subtitle, writer, content)"
+ " values ( @title, @subtitle, @writer, @content )";
conn.open();

cmd.parameters.add("@title", sqldbtype.nvarchar, 50);
cmd.parameters.add("@subtitle", sqldbtype.nvarchar, 50);
cmd.parameters.add("@writer", sqldbtype.nvarchar, 10);
cmd.parameters.add("@content", sqldbtype.ntext);

cmd.parameters["@title"].value = txttitle.text.trim();
if (txtsubtitle.text == string.empty || txtsubtitle.text.trim() == "")
{
cmd.parameters["@subtitle"].value = dbnull.value;
}
else
{
cmd.parameters["@subtitle"].value = txtsubtitle.text.trim();
}
if (txtwriter.text == string.empty || txtwriter.text.trim() == "")
{
cmd.parameters["@writer"].value = dbnull.value;
}
else
{
cmd.parameters["@writer"].value = txtwriter.text;
}
cmd.parameters["@content"].value = txtcontent.text;
// 插入記錄
try
{
cmd.executenonquery();
}
catch (exception ex)
{
response.write("<script language=javascript>alert('輸入錯誤,數據庫不能更新。')</script>");
}
finally
{
conn.close();
}
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湘乡市| 嘉兴市| 阿勒泰市| 昭觉县| 阿拉尔市| 探索| 霍城县| 自贡市| 比如县| 朝阳区| 建宁县| 栾川县| 潢川县| 渑池县| 元朗区| 鄂尔多斯市| 马龙县| 明光市| 桃园市| 阿克陶县| 富源县| 夹江县| 纳雍县| 讷河市| 大姚县| 台北市| 靖安县| 高安市| 蒲城县| 修武县| 嘉义县| 深泽县| 望城县| 钟祥市| 金堂县| 宜阳县| 佛山市| 新竹县| 望都县| 永安市| 怀宁县|