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()操作了。
因为本人记性极差,所以很喜欢这个方法
先到这里吧。数据库中存储过程具体怎么做。以后再讲吧。