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