C#数据库編程2

数据|数据库

四.插入数据记录: </P><P>  对数据库进行插入记录操作和删除记录操作基本的思路是一致的,就是通过ADO.NET首先插入数据记录到数据库,然后对"DataSet"对象进行必要的修改。下列代码就是以Access 2000数据库为模型修改当前记录的代码: </P><P>protected void Update_record ( object sender , System.EventArgs e )
{

int i = myBind.Position ;

try{

file://连接到一个数据库

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " ;

OleDbConnection myConn = new OleDbConnection ( strCon ) ;

myConn.Open ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . BeginEdit ( ) ;

file://从数据库中修改指定记录

string strUpdt = " UPDATE person SET xm = '"

+ t_xm.Text + "' , xb = '"

+ t_xb.Text + "' , nl = "

+ t_nl.Text + " , zip = "

+ t_books.Text + " WHERE id = " + t_id.Text ;

OleDbCommand myCommand = new OleDbCommand ( strUpdt , myConn ) ;

myCommand.ExecuteNonQuery ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . EndEdit ( ) ;

myDataSet.Tables [ "person" ] . AcceptChanges ( ) ;

myConn.Close ( ) ;

}

catch ( Exception ed )

{

MessageBox.Show ( "修改指定记录错误: " + ed.ToString ( ) , "错误!" ) ;

}

myBind.Position = i ;

} </P><P>  由于对Sql Server 2000数据记录修改操作和Access 2000数据记录修改操作的差异只在于不同的数据链接,具体的代码可以参考"删除数据记录"中的代码,在这里就不提供了。

五.插入数据记录:

  和前面二种操作在思路是一致的,就是通过ADO.NET首先插入数据记录到数据库,然后对"DataSet"对象进行必要的修改。下列代码就是以Access 2000数据库为模型插入一条数据记录的代码

protected void Insert_record ( object sender , System.EventArgs e )

{

try

{

file://判断所有字段是否添完,添完则执行,反之弹出提示

if ( t_id.Text != "" && t_xm.Text != "" && t_xb.Text != "" && t_nl.Text != "" && t_books.Text != "" )

{

string myConn1 = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;

OleDbConnection myConn = new OleDbConnection ( myConn1 ) ;

myConn.Open ( ) ;

string strInsert = " INSERT INTO person ( id , xm , xb , nl , zip ) VALUES ( " ;

strInsert += t_id.Text + ", '" ;

strInsert += t_xm.Text + "', '" ;

strInsert += t_xb.Text + "', " ;

strInsert += t_nl.Text + ", " ;

strInsert += t_books.Text + ")" ;

OleDbCommand inst = new OleDbCommand ( strInsert , myConn ) ;

inst.ExecuteNonQuery ( ) ;

myConn.Close ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . BeginEdit ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . EndEdit ( ) ;

myDataSet.Tables [ "person" ] . AcceptChanges ( ) ;

}

else

{

MessageBox.Show ( "必须填满所有字段值!" , "错误!" ) ;

}

}

catch ( Exception ed )

{

MessageBox.Show ( "保存数据记录发生 " + ed.ToString ( ) , "错误!" ) ;

}

}

  同样对Sql Server 2000数据库进行插入记录操作和Access 2000数据库插入记录操作的差异也只在于不同的数据链接,具体的代码可以参考"删除数据记录"中的代码,在这里就不提供了。

  六.Visual C#数据库编程的完成源代码和程序运行的主界面:

  掌握了上面要点,编写一个完整的数据库编程的程序就显得非常容易了,下面是Visual C#进行数据库编程的完整代码(Data01.cs),此代码是以Access 2000数据库为模型设计的,具体如下:

using System ;

using System.Drawing ;

using System.ComponentModel ;

using System.Windows.Forms ;

using System.Data.OleDb ;

using System.Data ;

public class Data : Form

{

private System.ComponentModel.Container components = null ;

private Button lastrec ;

private Button nextrec ;

private Button previousrec ;

private Button firstrec ;

private TextBox t_books ;

private TextBox t_nl ;

private ComboBox t_xb ;

private TextBox t_xm ;

private TextBox t_id ;

private Label l_books ;

private Label l_nl ;

private Label l_xb ;

private Label l_xm ;

private Label l_id ;

private Label label1 ;

private DataSet myDataSet ;

private Button button1 ;

private Button button2 ;

private Button button3 ;

private Button button4 ;

private BindingManagerBase myBind ;

public Data ( )

{

file://连接到一个数据库

GetConnected ( ) ;

// 对窗体中所需要的内容进行初始化

InitializeComponent ( ) ;

}

file://清除在程序中使用过的资源

protected override void Dispose( bool disposing )

{

if( disposing )

{

if ( components != null )

{

components.Dispose ( ) ;

}

}

base.Dispose( disposing ) ;

}

public static void Main ( )

{

Application.Run ( new Data ( ) ) ;

}

public void GetConnected ( )

{

try

{

file://创建一个 OleDbConnection

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;

OleDbConnection myConn = new OleDbConnection ( strCon ) ;

string strCom = " SELECT * FROM person " ;

file://创建一个 DataSet

myDataSet = new DataSet ( ) ;

myConn.Open ( ) ;

file://用 OleDbDataAdapter 得到一个数据集

OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom , myConn ) ;

file://把Dataset绑定books数据表

myCommand.Fill ( myDataSet , "person" ) ;

file://关闭此OleDbConnection

myConn.Close ( ) ;

}

catch ( Exception e )

{

MessageBox.Show ( "连接错误! " + e.ToString ( ) , "错误" ) ;

}

}

private void InitializeComponent ( )

{

file://添加控件,略

this.Name = "Data" ;

this.Text = "Visual C#的数据库编程!" ;

this.ResumeLayout(false) ;

myBind = this.BindingContext [ myDataSet , "person" ] ;

}

protected void New_record ( object sender , System.EventArgs e )

{

t_id.Text = ( myBind.Count + 1 ).ToString ( ) ;

t_xm.Text = "" ;

t_xb.Text = "" ;

t_nl.Text = "" ;

t_books.Text = "" ;

}

protected void Insert_record ( object sender , System.EventArgs e )

{

try

{

file://判断所有字段是否添完,添完则执行,反之弹出提示

if ( t_id.Text != "" && t_xm.Text != "" && t_xb.Text != "" && t_nl.Text != "" && t_books.Text != "" )

{

string myConn1 = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;

OleDbConnection myConn = new OleDbConnection ( myConn1 ) ;

myConn.Open ( ) ;

string strInsert = " INSERT INTO person ( id , xm , xb , nl , zip ) VALUES ( " ;

strInsert += t_id.Text + ", '" ;

strInsert += t_xm.Text + "', '" ;

strInsert += t_xb.Text + "', " ;

strInsert += t_nl.Text + ", " ;

strInsert += t_books.Text + ")" ;

OleDbCommand inst = new OleDbCommand ( strInsert , myConn ) ;

inst.ExecuteNonQuery ( ) ;

myConn.Close ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . BeginEdit ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . EndEdit ( ) ;

myDataSet.Tables [ "person" ] . AcceptChanges ( ) ;

}

else

{

MessageBox.Show ( "必须填满所有字段值!" , "错误!" ) ;

}

}

catch ( Exception ed )

{

MessageBox.Show ( "保存数据记录发生 " + ed.ToString ( ) , "错误!" ) ;

}

}

protected void Update_record ( object sender , System.EventArgs e )

{

int i = myBind.Position ;

try{

file://连接到一个数据库

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " ;

OleDbConnection myConn = new OleDbConnection ( strCon ) ;

myConn.Open ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . BeginEdit ( ) ;

file://从数据库中修改指定记录

string strUpdt = " UPDATE person SET xm = '"

+ t_xm.Text + "' , xb = '"

+ t_xb.Text + "' , nl = "

+ t_nl.Text + " , zip = "

+ t_books.Text + " WHERE id = " + t_id.Text ;

OleDbCommand myCommand = new OleDbCommand ( strUpdt , myConn ) ;

myCommand.ExecuteNonQuery ( ) ;

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . EndEdit ( ) ;

myDataSet.Tables [ "person" ] . AcceptChanges ( ) ;

myConn.Close ( ) ;

}

catch ( Exception ed )

{

MessageBox.Show ( "修改指定记录错误: " + ed.ToString ( ) , "错误!" ) ;

}

myBind.Position = i ;

}

protected void Delete_record ( object sender , System.EventArgs e )

{

DialogResult r = MessageBox.Show ( "是否删除当前记录!" , "删除当前记录!" , MessageBoxButtons.YesNo , MessageBoxIcon.Question ) ;

int ss = ( int ) r ;

  if ( ss == 6 ) // 按动"确定"按钮

{

try{

file://连接到一个数据库

string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb " ;

OleDbConnection myConn = new OleDbConnection ( strCon ) ;

myConn.Open ( ) ;

string strDele = "DELETE FROM person WHERE id= " + t_id.Text ;

OleDbCommand myCommand = new OleDbCommand ( strDele , myConn ) ;

file://从数据库中删除指定记录

myCommand.ExecuteNonQuery ( ) ;

file://从DataSet中删除指定记录

myDataSet.Tables [ "person" ] . Rows [ myBind.Position ] . Delete ( ) ;

myDataSet.Tables [ "person" ] . AcceptChanges ( ) ;

myConn.Close ( ) ;

}

catch ( Exception ed )

{

MessageBox.Show ( "删除记录错误信息: " + ed.ToString ( ) , "错误!" ) ;

}

}

}

file://按钮"尾记录"对象事件程序

protected void GoLast ( object sender , System.EventArgs e )

{

myBind.Position = myBind.Count - 1 ;

}

file://按钮"下一条"对象事件程序

protected void GoNext ( object sender , System.EventArgs e )

{

if ( myBind.Position == myBind.Count -1 )

MessageBox.Show ( "已经到了最后一条记录!", "信息提示!" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

else

myBind.Position += 1 ;

}

file://按钮"上一条"对象事件程序

protected void GoPrevious ( object sender , System.EventArgs e )

{

if ( myBind.Position == 0 )

MessageBox.Show ( "已经到了第一条记录!" , "信息提示!" , MessageBoxButtons.OK , MessageBoxIcon.Information ) ;

else

myBind.Position -= 1 ;

}

file://按钮"首记录"对象事件程序

protected void GoFirst ( object sender , System.EventArgs e )

{

myBind.Position = 0 ;

}

}

  对于以Sql Server 2000数据库为模型的程序代码,只要把Data01.cs中的数据链接,即:

string myConn1 = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = db.mdb" ;

  改换成:

string strCon = "Provider = SQLOLEDB.1 ; Persist Security Info = False ; User ID = sa ; Initial Catalog = data1 ; Data Source = server1 " ;

  注释:此数据链接代表的意思是:打开Sql server数据库,服务器名称为server1,数据库为data1

就可以得到Visual C#针对Sql Server 2000数据库为模板编程的完成源程序代码了。所以本文就不再提供了。

  七.总结:

  数据库编程始终是程序编程内容中的一个重点和难点。而以上介绍的这些操作又是数据库编程中最为基本,也是最为重要的内容。那些复杂的编程无非是以上这些处理的若干个叠加。

时间: 2024-11-02 05:05:09

C#数据库編程2的相关文章

VB編程規約

VB編程規約 jugnlesong 1. 對象命名規約 對象種類 對象名稱 對象前綴 例 FORM 窗體 frm frmMain MDI 子窗體 子窗體 mdi mdiNote PICTURE BOX 圖片控件 pic picView LABEL 標籤控件 lbl lblMessage TEXT BOX 文本控件 txt txtPassword FRAME 框架控件 fra fraOption COMMAND BUTTON 命令控件 cmd cmdClose CHECK BUTTON 復選框 c

c++-windows shell編程 的一些小疑問 win7 64位操作系統 vs2003工具

问题描述 windows shell編程 的一些小疑問 win7 64位操作系統 vs2003工具 win7上编写的一个window shell 用于 右键文件时 添加一个私人的菜单并弹出一个提示对话框. 现在出现有一个bug 在桌面(explore.exe)右键没有效果 但是在其他程序中有效果. 例如我打开vs2003工程 file -> Open Project 弹出一个选择工程的窗口. 在这个窗口里面 右键 出现了我添加的那个 menu. 以前在xp上面没有这个bug 但是现在在 win7

【iPhone 編程】alloc, retain, release 和 copy 的概念

作為一個從學習 C++,Java 開始的程式員,iPhone 編程所帶來的最大挑戰莫過於reference count 的概念. 剛開始接觸 Objective C,在 XCode 裡摸來摸去,總免不了要跟這傢伙碰面:  相信我,看見它多數的原因都是 reference count 的概念搞不清楚所引致的.  首先我們知道,要使用一個 object 的時候,我們必須要給它一個落腳的地方,且我們必須告訴系統說這一塊 memory 是我們擁有的,請不要擅自將在裡頭居住的 object 趕走.這就是我

編程 未來-已決定要選擇C/C++當我的主要語言,該如何使用他們增加編程的技術呢???

问题描述 已決定要選擇C/C++當我的主要語言,該如何使用他們增加編程的技術呢??? 基礎可說是打好了,但是由 進階->深入 這個過程似乎非常模糊,看完一些MFC,windowsAPI和C語言的網路編程之後,感覺編程並沒有太大的進步.....請高手指引

android編程開啟GPS功能

问题描述 在android系統中將GPS功能關閉的狀態下,怎樣通過編程的方式將其開啟? 解决方案 解决方案二:這個,你可以慢慢研究研究!

c#高級編程記錄--第一章

C#有一個基於值類型和引用類型之間區別為基礎的類型系統: 相關概念:CLR.受管制代碼.非受管制代碼.CTS.CLS.裝配件.反射.裝配件清單.應用域.無用存儲單元收集 .NET程序包含多個裝配件,其中一個裝配件被指定為一個可執行程序,包含主程序的啓動入口點,其他的裝配件則被指定為庫 編譯.運行:* .CS--〉裝配件(IL.元數據)--〉CLR(JIT編譯(獲取安全許可.内存類型檢查.應用域).無用内存單元檢查與收集.com交換操作服務) 值類型:變量保存值,存在堆棧中 引用類型:變量保存地址

用ASP.Net MVC快速创建一个电影数据库应用程

Stephen Walther 从头开始到结束建立了整个数据驱动ASP.NET MVC应用程序.这个教程对于那些刚刚接 触ASP.NET MVC框架以及想要获得一种建立ASP.NET MVC应用程序的过程的新人是一个很好的介绍. 这 个教程的目的就是给你一种"它会是什么样子"去创建ASP.NET MVC应用程序的理念.在这一课中,从开始到结 束,我将直接建立一个完整ASP.NET MVC应用程序.我向你展示如何建立一个简单的数据驱动应用程序,演示如 何列出,创建和编辑数据库记录. 为简

window ce 編程問題

问题描述 我用的是vs2005进行windowce编程,现我通过webservice进行网络上数据库方面的数据处理,同样的webservice在cs或web上都能调用而且也能得到所需结果,但是在windowce中却报"無法调用"SmartData.WebService.Service.Qry()",因为它是Web方法,"请指教,或有什么更好的进行windowce对网络数据库方面的编程方法介绍. 解决方案 解决方案二:看WebService类似乎没有精简版可以通过SQ

編程

问题描述 用c#随机输出7到15的整数,每个数输出20遍 解决方案 解决方案二:vararr=Enumerable.Range(7,8);for(vari=0;i<20;i++){arr.OrderBy(i=>Guid.NewGuid()).ToList().ForEach((x)=>{Console.WriteLine(x);});} 解决方案三:题目不明确,什么叫每个数输出20遍,产生几个数,是否允许重复.解决方案四:这个问题是要解决随机问题,还是逻辑问题?随机实现很简单Radom_