首页 > 编程 > .NET > 正文

C#.NET数据库操作记要

2024-07-10 13:00:09
字体:
来源:转载
供稿:网友
一.数据库连接
将连接的数据库信息存在下面的文件中,方便统一管理。
web.config//还不懂这个的。最好好好学学,本人觉得很有用,.net么当然要用.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" に設定します。この値を false に設定すると、

このアプリケーションの実行時のパフォーマンスが向上します。

デバッグ シンボル (.pdb 情報) をコンパイルされたページに挿入するには、

compilation debug="true" に設定します。この設定によって、実行速度の遅い大きなファイルが作成されます。

デバッグ時にのみ、この値を true に設定して、

それ以外のときは、常に false に設定してください。詳細については、

asp .net ファイルのデバッグ ドキュメントを参照してください。

-->
<compilation
defaultlanguage="c#"
debug="true"
>
<assemblies>
</assemblies>
</compilation>


<!-- カスタム エラー メッセージの設定

カスタム エラー メッセージを有効にするには customerrors mode="on"または "remoteonly" にします。無効にする場合は "off" に設定します。

処理する各エラーに <error> タグを追加してください。
defaultredirect="err.htm"

"オン" 常にカスタム (理解しやすい) メッセージを表示します。

"オフ" 常に詳細な asp.net エラー情報を表示します。

"リモートのみ" ローカル web サーバーで実行していないユーザーに対してのみ、

常にカスタム (理解しやすい) メッセージを表示します。この設定は、セキュリティを考慮して、アプリケーションの詳細がリモートのクライアントに
表示されないようにする推奨された設定です。

-->
<customerrors mode="remoteonly" defaultredirect="/main/defaulterror.aspx">
<error statuscode="404" redirect="/main/error500.htm" />
<error statuscode="500" redirect="/main/error500.htm"/>

</customerrors>



<!-- 認証の設定 '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
このセクションは、アプリケーションの認証ポリシーを設定します。使用できるモードは、"windows"、

"forms"、"passport" および "none" です。


"none" 認証が実行されません。
"windows" iis はアプリケーションの設定に従って認証 (基本、ダイジェスト、または統合 windows)
を実行します。匿名アクセスは iis では無効でなければなりません。

"forms" ユーザーが資格情報を入力するカスタム フォーム (web ページ) を提供してください。

そして、アプリケーションで認証してください。ユーザーの資格情報のトークンは cookie に保存されています。

"passport" 認証は、単一のログオンおよびメンバ サイトのコア プロファイル サービスを提供する
microsoft により提供される管理認証サービスを使用して実行されます。

-->
<identity impersonate="true"/>
<authentication mode="windows" />
<!-- 権限の設定

このセクションは、アプリケーションの権限のポリシーを設定します。この設定により、ユーザーまたはロールによるアプリケーション リソースへのアクセスを許可したり、

拒否したりできます。ワイルドカード : "*" は全員を、"?" は匿名
(未認証) ユーザーを表します。

-->

<authorization>
<allow users="*" /> <!-- * 全ユーザーへの許可 -->
<!-- <allow users="[ユーザーのコンマ区切り一覧]"
roles="[ロールのコンマ区切り一覧]"/>
<deny users="[ユーザーのコンマ区切り一覧]"
roles="[ロールのコンマ区切り一覧]"/>
-->
</authorization>

<!-- アプリケーション レベルのトレース ログの設定

アプリケーション レベルのトレースは、アプリケーション内の全ページのトレース ログ出力を有効にします。

アプリケーション トレース ログを有効にするには、trace enabled="true" に設定します。pageoutput="true" に設定された場合、

トレース情報が各ページの下に表示されます。それ以外の場合は、

web アプリケーション ルートから "trace.axd" ページを参照してアプリケーション トレースを

表示できます。

-->
<trace
enabled="false"
requestlimit="10"
pageoutput="false"
tracemode="sortbytime"
localonly="true"
/>

<!-- セッション状態の設定

既定では、asp.net は cookie を使用して、要求がどのセッションに属するかを識別します。

cookie が使用できない場合は、url にセッション識別子を入力することで、セッションを見つけることができます。

cookie を有効にするには、sessionstate を cookieless="false" に設定してください。

-->
<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 このセクションはアプリケーションのグローバリゼーション設定を行います。
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,通过数据库中的存储过程来操作数据库,通过中间层来做工程是最理想的。能提高安全性和整体性能。
using (sqlconnection conn = new sqlconnection(strconn))
{
sqlcommand cmd = new sqlcommand("sp_sp",conn);
cmd.commandtype=commandtype.storedprocedure;//声明是调用存储过程

cmd.parameters.add("@sno",sqldbtype.varchar,9);
cmd.parameters.add("@td",sqldbtype.smalldatetime);
cmd.parameters.add("@s_note",sqldbtype.varchar,100);//添加变量参数

cmd.parameters["@sno"].value=sno.text;
cmd.parameters["@td"].value=checkbase.text;
cmd.parameters["@s_note"].value=snote.text;//给参数付值

conn.open();
if(cmd.executenonquery()!=0)//执行没有返回集合
okmsg.text="データ登録完成";
else
okmsg.text="データ登録失敗";
}


2,直接输出sql语句

string strsql="update nwind.nuser.data set sno='"+sno.text;//sql server需要指明该表所在的数据库名和创建该表的用户名
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 联合使用,一般用于对获得数据集有特殊操作的情况
比较常用

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 你可以像对待一个本地数据库,可以存放多个数据表,实现你要达成的功能。具体如表格的处理有列的删除增加,多表之间的处理。等等
count.text="ヒット:"+ds.tables["vco"].rows.count.tostring()+"件";
return ds;
}

}

4,当仅仅用于读取数据的话推荐使用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(); //通过列名获得数据
m.text=dr["mtc"].tostring(); //
}
else
okmsg.text="このデータがありません、又は定検送り先の値は違法です。";
}

}

}
注意,以上都采用using(),好处是不需要再给打开的数据库连接,作close()操作了。
因为本人记性极差,所以很喜欢这个方法

先到这里吧。数据库中存储过程具体怎么做。以后再讲吧。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表