C#.NET數(shù)據(jù)庫操作記要
2024-07-10 13:00:09
供稿:網(wǎng)友
一.數(shù)據(jù)庫連接
將連接的數(shù)據(jù)庫信息存在下面的文件中,方便統(tǒng)一管理。
web.config//還不懂這個的。最好好好學(xué)學(xué),本人覺得很有用,.net么當(dāng)然要用.net的東西了。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configsections>
<sectiongroup name="system.web">
<section name="database" type="system.configuration.namevaluesectionhandler,system,version=1.0.5000.0,culture=neutral,publickeytoken=b77a5c561934e089" />
</sectiongroup>
</configsections>
<system.web>
<!-- ダイナミック デバッグ コンパイル
aspx デバッグを有効にするには、compilation debug="true" に設(shè)定します。この値を false に設(shè)定すると、
このアプリケーションの実行時のパフォーマンスが向上します。
デバッグ シンボル (.pdb 情報(bào)) をコンパイルされたページに挿入するには、
compilation debug="true" に設(shè)定します。この設(shè)定によって、実行速度の遅い大きなファイルが作成されます。
デバッグ時にのみ、この値を true に設(shè)定して、
それ以外のときは、常に false に設(shè)定してください。詳細(xì)については、
asp .net ファイルのデバッグ ドキュメントを參照してください。
-->
<compilation
defaultlanguage="c#"
debug="true"
>
<assemblies>
</assemblies>
</compilation>
<!-- カスタム エラー メッセージの設(shè)定
カスタム エラー メッセージを有効にするには customerrors mode="on"または "remoteonly" にします。無効にする場合は "off" に設(shè)定します。
処理する各エラーに <error> タグを追加してください。
defaultredirect="err.htm"
"オン" 常にカスタム (理解しやすい) メッセージを表示します。
"オフ" 常に詳細(xì)な asp.net エラー情報(bào)を表示します。
"リモートのみ" ローカル web サーバーで実行していないユーザーに対してのみ、
常にカスタム (理解しやすい) メッセージを表示します。この設(shè)定は、セキュリティを考慮して、アプリケーションの詳細(xì)がリモートのクライアントに
表示されないようにする推奨された設(shè)定です。
-->
<customerrors mode="remoteonly" defaultredirect="/main/defaulterror.aspx">
<error statuscode="404" redirect="/main/error500.htm" />
<error statuscode="500" redirect="/main/error500.htm"/>
</customerrors>
<!-- 認(rèn)証の設(shè)定 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
このセクションは、アプリケーションの認(rèn)証ポリシーを設(shè)定します。使用できるモードは、"windows"、
"forms"、"passport" および "none" です。
"none" 認(rèn)証が実行されません。
"windows" iis はアプリケーションの設(shè)定に従って認(rèn)証 (基本、ダイジェスト、または統(tǒng)合 windows)
を?qū)g行します。匿名アクセスは iis では無効でなければなりません。
"forms" ユーザーが資格情報(bào)を入力するカスタム フォーム (web ページ) を提供してください。
そして、アプリケーションで認(rèn)証してください。ユーザーの資格情報(bào)のトークンは cookie に保存されています。
"passport" 認(rèn)証は、単一のログオンおよびメンバ サイトのコア プロファイル サービスを提供する
microsoft により提供される管理認(rèn)証サービスを使用して実行されます。
-->
<identity impersonate="true"/>
<authentication mode="windows" />
<!-- 権限の設(shè)定
このセクションは、アプリケーションの権限のポリシーを設(shè)定します。この設(shè)定により、ユーザーまたはロールによるアプリケーション リソースへのアクセスを許可したり、
拒否したりできます。ワイルドカード : "*" は全員を、"?" は匿名
(未認(rèn)証) ユーザーを表します。
-->
<authorization>
<allow users="*" /> <!-- * 全ユーザーへの許可 -->
<!-- <allow users="[ユーザーのコンマ區(qū)切り一覧]"
roles="[ロールのコンマ區(qū)切り一覧]"/>
<deny users="[ユーザーのコンマ區(qū)切り一覧]"
roles="[ロールのコンマ區(qū)切り一覧]"/>
-->
</authorization>
<!-- アプリケーション レベルのトレース ログの設(shè)定
アプリケーション レベルのトレースは、アプリケーション內(nèi)の全ページのトレース ログ出力を有効にします。
アプリケーション トレース ログを有効にするには、trace enabled="true" に設(shè)定します。pageoutput="true" に設(shè)定された場合、
トレース情報(bào)が各ページの下に表示されます。それ以外の場合は、
web アプリケーション ルートから "trace.axd" ページを參照してアプリケーション トレースを
表示できます。
-->
<trace
enabled="false"
requestlimit="10"
pageoutput="false"
tracemode="sortbytime"
localonly="true"
/>
<!-- セッション狀態(tài)の設(shè)定
既定では、asp.net は cookie を使用して、要求がどのセッションに屬するかを識別します。
cookie が使用できない場合は、url にセッション識別子を入力することで、セッションを見つけることができます。
cookie を有効にするには、sessionstate を cookieless="false" に設(shè)定してください。
-->
<sessionstate
mode="inproc"
stateconnectionstring="tcpip=127.0.0.1:42424"
sqlconnectionstring="data source=127.0.0.1;trusted_connection=yes"
cookieless="false"
timeout="720"
/>
<!-- グローバリゼーション
shift_jis このセクションはアプリケーションのグローバリゼーション設(shè)定を行います。
utf-8-->
<globalization
requestencoding="utf-8"
responseencoding="utf-8"
/>
<database>
<!--add key="portaldb" value="server=(local)/netsdk;database=portal;integrated security=sspi" /-->
<add key="strconn" value="server=107.12.165.199;database=nwind;uid=nwind;pwd=nwind" />
</database>
</system.web>
<appsettings>
<add key="nwind" value="server=107.12.165.199;database=nwind;uid=nwind;pwd=nwind;" />
</appsettings>
</configuration>
連接代碼:
using system.data.sqlclient;
using system.collections.specialized;//操作xml所需要的namespace
string strconn=(string) ((namevaluecollection) context.getconfig("system.web/database"))["strconn"];
操作代碼:
1,通過數(shù)據(jù)庫中的存儲過程來操作數(shù)據(jù)庫,通過中間層來做工程是最理想的。能提高安全性和整體性能。
using (sqlconnection conn = new sqlconnection(strconn))
{
sqlcommand cmd = new sqlcommand("sp_sp",conn);
cmd.commandtype=commandtype.storedprocedure;//聲明是調(diào)用存儲過程
cmd.parameters.add("@sno",sqldbtype.varchar,9);
cmd.parameters.add("@td",sqldbtype.smalldatetime);
cmd.parameters.add("@s_note",sqldbtype.varchar,100);//添加變量參數(shù)
cmd.parameters["@sno"].value=sno.text;
cmd.parameters["@td"].value=checkbase.text;
cmd.parameters["@s_note"].value=snote.text;//給參數(shù)付值
conn.open();
if(cmd.executenonquery()!=0)//執(zhí)行沒有返回集合
okmsg.text="データ登録完成";
else
okmsg.text="データ登録失敗";
}
2,直接輸出sql語句
string strsql="update nwind.nuser.data set sno='"+sno.text;//sql server需要指明該表所在的數(shù)據(jù)庫名和創(chuàng)建該表的用戶名
if(checkbase.text!="")
strsql+="',month ='"+checkbase.text+"/01";
strsql+="' where sno ='"+sno.text+"'";
conn.open();
sqlcommand cmd = new sqlcommand(strsql,conn);
if(cmd.executenonquery()!=0)
okmsg.text="データが登録しました";
else
okmsg.text="データ登録失敗";
}
3.檢索語法sqldataadapter 與dataset 聯(lián)合使用,一般用于對獲得數(shù)據(jù)集有特殊操作的情況
比較常用
private dataset getdata()
{
string strconn=(string) ((namevaluecollection) context.getconfig("system.web/database"))["strconn"];
using (sqlconnection conn = new sqlconnection(strconn))
{
sqlcommand cmd = new sqlcommand("sp_co",conn);
cmd.commandtype=commandtype.storedprocedure;
cmd.parameters.add("@place",sqldbtype.varchar,2);
cmd.parameters["@place"].value=place.text;
conn.open();
sqldataadapter da = new sqldataadapter();
da.selectcommand=cmd;
dataset ds=new dataset();
da.fill(ds,"vco");
//通過dataset 你可以像對待一個本地?cái)?shù)據(jù)庫,可以存放多個數(shù)據(jù)表,實(shí)現(xiàn)你要達(dá)成的功能。具體如表格的處理有列的刪除增加,多表之間的處理。等等
count.text="ヒット:"+ds.tables["vco"].rows.count.tostring()+"件";
return ds;
}
}
4,當(dāng)僅僅用于讀取數(shù)據(jù)的話推薦使用sqldatareader ,讀取速度較上面要快很多
private void dataloader()
{
string strconn=(string) ((namevaluecollection) context.getconfig("system.web/database"))["strconn"];
using (sqlconnection conn = new sqlconnection(strconn))
{
sqlcommand cmd = new sqlcommand("sp_list",conn);
cmd.commandtype=commandtype.storedprocedure;
cmd.parameters.add("@no",sqldbtype.varchar,6);
cmd.parameters["@no"].value=no.text;
conn.open();
using (sqldatareader dr = cmd.executereader())
{
if(dr.read())
{
c.text=dr["c"].tostring(); //通過列名獲得數(shù)據(jù)
m.text=dr["mtc"].tostring(); //
}
else
okmsg.text="このデータがありません、又は定検送り先の値は違法です。";
}
}
}
注意,以上都采用using(),好處是不需要再給打開的數(shù)據(jù)庫連接,作close()操作了。
因?yàn)楸救擞浶詷O差,所以很喜歡這個方法
先到這里吧。數(shù)據(jù)庫中存儲過程具體怎么做。以后再講吧。