首页 Visual C#中动态操作SQL Server数据库

Visual C#中动态操作SQL Server数据库

举报
开通vip

Visual C#中动态操作SQL Server数据库Visual C#中动态操作SQL Server数据库 Visual C# 中动态操作SQL Server数据库 在编写数据库应用程序的时候,我们可以通过SQL语句来动态创建、修改数据库以及其中的对象。本文我就向大家介绍如何运用Visual C#来动态操作SQL Server数据库,其中包括如何创建一个SQL Server数据库以及如何创建其中的表、存储过程、视图、索引之类的数据库对象。本文还介绍了如何动态地修改表的模式,如何从表、存储过程以及视图中读取数据并显示在应用程序的数据库控件中。   我们知道SQL语句在...

Visual C#中动态操作SQL Server数据库
Visual C#中动态操作SQL Server数据库 Visual C# 中动态操作SQL Server数据库 在编写数据库应用程序的时候,我们可以通过SQL语句来动态创建、修改数据库以及其中的对象。本文我就向大家介绍如何运用Visual C#来动态操作SQL Server数据库,其中包括如何创建一个SQL Server数据库以及如何创建其中的表、存储过程、视图、索引之类的数据库对象。本文还介绍了如何动态地修改表的模式,如何从表、存储过程以及视图中读取数据并显示在应用程序的数据库控件中。   我们知道SQL语句在操作数据库时运用得最多的是Select、Insert、Update和Delete等对于数据的操作,而本文重点向大家介绍的是对于数据库及其对象的操作。通过掌握这些基本的操作方法,读者就可以更加灵活地进行数据库应用程序的开发。   开发实例及步骤   1.界面设计:   本文向大家介绍一个运用Visual C#动态操作数据库的实例,实例的界面如图1所示。      图1   从上图可知,我们的实例程序只包含了10个按钮控件以及一个DataGrid控件。按钮控件分为三类:   第一类为创建数据库以及数据库对象的按钮;   第二类为查看不同数据库对象中的数据的按钮;   第三类则为修改数据库对象的按钮。其中的DataGrid控件则是用于显示数据的。   2.添加引用及数据成员:   设计完界面,我们就可以开始编写程序代码。首先是为我们的程序添加必要的引用以及一些数据成员。因为我们的程序涉及到数据库的访问操作,所以必须要运用到数据提供者(Data Provider)的对象。在.Net框架下,我们主要运用的数据提供者分为两类,一类是Sql类型的,另一类是OleDb类型的。它们涉及到的命名空间分别为System.Data.SqlClient和System.Data.OleDb。因为我们的程序访问的是SQL Server数据库,所以我们运用的数据提供者对象应为Sql类型的。原因很简单,该类型的对象是专门为SQL Server数据库而设计的,所以性能得到了大大的优化。所以,在我们的程序的开始处添加如下一句语句: using System.Data.SqlClient;   添加对System.Data.SqlClient命名空间的引用后,我们接下来为程序添加一些必要的数据成员,这些数据成员为我们的类的私有成员,通过它们我们可以完成一些对数据库及其对象的操作。 private string ConnectionString = "Integrated Security=SSPI;Initial Catalog=;Data Source=localhost;";  private SqlConnection conn = null;  private SqlCommand cmd = null;  private string sql = null;   至于各个数据成员的意义,我想大家一看就应该会明白了,所以这里就不多说了。   3.处理数据库连接对象:   对于数据库应用程序而言,连接到相应的数据库是一个必不可少的步骤,我们的程序也不例外。所以在我们的程序的构造函数中得先创建一个数据库连接对象,方法如下: public Form1()  {  //  // Windows 窗体设计器支持所必需的  //  InitializeComponent();  // 创建一个连接  conn = new SqlConnection(ConnectionString);  }   这样,我们在以后的对于数据库的操作中就可以运用该数据库连接对象了。   而同时,在我们的程序结束时,我们有必要关闭该数据库连接对象,否则可能会引发一些意想不到的错误。所以得在程序的已重载的Dispose函数中添加关闭数据库连接对象的语句,不过由于.Net框架具有自动垃圾回收(Garbage Collection)功能,所以我们不必像在C++语言中那样显式的将该对象销毁。具体方法如下: protected override void Dispose( bool disposing )  {  // 程序运行完毕,确保数据库连接已经关闭  if (conn.State == ConnectionState.Open)   conn.Close();  if( disposing )  {   if (components != null)   {   components.Dispose();   }  }  base.Dispose( disposing );  }   4.创建SQL Server数据库: 在创建了数据库连接对象后,我们就可以在程序中运用它了。首先,我们在程序中动态地创建一个SQL Server类型的数据库。我们将数据库创建在C:mysql目录下,所以读者要练习该实例的话得先在C:下创建一个名为mysql的文件夹,否则会出错!创建数据库的关键是函数中的sql对象,通过该对象我们指定了数据库文件的一些基本属性。之后,我们新创建了一个SqlCommand对象,通过该对象我们就实际完成了对数据库的操作。函数的实现如下: private void button1_Click(object sender, System.EventArgs e)  {  // 打开数据库连接  if( conn.State != ConnectionState.Open)   conn.Open();  string sql = "CREATE DATABASE mydb ON PRIMARY"   +"(name=test_data, filename = 'C:\mysql\mydb_data.mdf', size=3,"   +"maxsize=5, filegrowth=10%)log on"   +"(name=mydbb_log, filename='C:\mysql\mydb_log.ldf',size=3,"   +"maxsize=20,filegrowth=1)";  cmd = new SqlCommand(sql, conn);  try  {   cmd.ExecuteNonQuery();  }  catch(SqlException ae)  {   MessageBox.Show(ae.Message.ToString());  }  }   5.创建表并添加记录:   创建了数据库后,我们得为其创建表,表是数据库中的基本对象。我们通过CREATE TABLE这句SQL语句完成创建表的操作,表被创建后,我们就确定了其模式(Schema)。之后,我们还通过INSERT语句向该表中添加了四条记录以为后用。函数的实现如下: private void button2_Click(object sender, System.EventArgs e)  {  // 打开数据库连接  if( conn.State == ConnectionState.Open)   conn.Close();  ConnectionString ="Integrated Security=SSPI;" +   "Initial Catalog=mydb;" +   "Data Source=localhost;";     conn.ConnectionString = ConnectionString;  conn.Open();  sql = "CREATE TABLE myTable"+   "(myId INTEGER CONSTRAINT PKeyMyId PRIMARY KEY,"+   "myName CHAR(50), myAddress CHAR(255), myBalance FLOAT)";  cmd = new SqlCommand(sql, conn);  try  {   cmd.ExecuteNonQuery();      // 向表中添加记录   sql = "INSERT INTO myTable(myId, myName, myAddress, myBalance) "+ "VALUES (1001, 'Puneet Nehra', 'A 449 Sect 19, DELHI', 23.98 ) " ;   cmd = new SqlCommand(sql, conn);   cmd.ExecuteNonQuery(); sql = "INSERT INTO myTable(myId, myName,myAddress, myBalance) "+ "VALUES (1002, 'Anoop Singh', 'Lodi Road, DELHI', 353.64) " ;   cmd = new SqlCommand(sql, conn);   cmd.ExecuteNonQuery();  sql = "INSERT INTO myTable(myId, myName, myAddress, myBalance) "+ "VALUES (1003, 'Rakesh M', 'Nag Chowk, Jabalpur M.P.', 43.43) " ;  cmd = new SqlCommand(sql, conn);  cmd.ExecuteNonQuery();  sql = "INSERT INTO myTable(myId, myName, myAddress, myBalance) "+ "VALUES (1004, 'Madan Kesh', '4th Street, Lane 3, DELHI', 23.00) " ;   cmd = new SqlCommand(sql, conn);   cmd.ExecuteNonQuery();  }  catch(SqlException ae)  {   MessageBox.Show(ae.Message.ToString());  }  }   完成此操作后,我们可以在本机的SQL Sever企业管理器中打开mydb数据库并找到该表。图2显示了该表的设计图示:   图2   6.创建通用SQL语句执行函数:   考虑到程序后面大量运用SqlCommand对象对数据库进行操作,我们在程序中设计了一个通用的SQL语句执行函数。它根据数据库连接对象以及sql对象创建一个SqlCommand对象,然后完成对数据库的相关操作。函数的实现如下: private void ExecuteSQLStmt(string sql)  {  // 打开数据库连接  if( conn.State == ConnectionState.Open)   conn.Close();  ConnectionString ="Integrated Security=SSPI;" +   "Initial Catalog=mydb;" +   "Data Source=localhost;";     conn.ConnectionString = ConnectionString;  conn.Open();  cmd = new SqlCommand(sql, conn);  try  {   cmd.ExecuteNonQuery();  }  catch(SqlException ae)  {   MessageBox.Show(ae.Message.ToString());  }  }   7.创建存储过程:   我们通过CREATE PROCEDURE这句SQL语句创建存储过程,同时函数中还调用了上面的通用SQL语句执行函数。函数的实现如下: private void button3_Click(object sender, System.EventArgs e)  {  sql = "CREATE PROCEDURE myProc AS"+   " SELECT myName, myAddress FROM myTable GO";  ExecuteSQLStmt(sql);  }   存储过程创建完毕后,我们可以在SQL Server企业管理器中找到其属性,如图3所示。   8.创建视图:   创建视图的过程与上面创建存储过程的方法类似,只是运用到的SQL语句为CREATE VIEW。函数的实现如下: private void button4_Click(object sender, System.EventArgs e)  {  sql = "CREATE VIEW myView AS SELECT myName FROM myTable";  ExecuteSQLStmt(sql);  }   同样,在创建完成后,我们可以在企业管理器中找到其属性,如图4所示。      图4   9.查看表中的数据:   查看表中的数据过程中,我们运用到了ADO.Net中的SqlDataAdapter以及DataSet这两个重要的对象。其中SqlDataAdapter对象是前面提到的Sql类型的数据提供者对象,它是专门用于SQL Server数据库的。而DataSet对象则是与数据提供者对象的类型无关的,它适用于任何类型的数据提供者对象,它被包含在System.Data命名空间之中,可谓是ADO.Net体系结构的核心。其数据的访问模式为非连接模式(Disconnected),即数据从数据库(或是Xml数据流)中被读到DataSet对象后,DataSet对象就断开了原来的连接。在完成一系列操作后,DataSet对象再连接到数据库并完成数据的更新操作。SqlDataAdapter对象提供了Fill和Update两个基本的方法以完成数据的读取和更新操作。   所以下面是函数的实现方法: private void button5_Click(object sender, System.EventArgs e)  {  // 打开数据库连接  if( conn.State == ConnectionState.Open)   conn.Close();  ConnectionString ="Integrated Security=SSPI;" +   "Initial Catalog=mydb;" +   "Data Source=localhost;";     conn.ConnectionString = ConnectionString;  conn.Open();  // 创建数据适配器 SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM myTable", conn); // 创建一个数据集对象并填充数据,然后将数据显示在DataGrid控件中 DataSet ds = new DataSet("myTable"); da.Fill(ds, "myTable"); dataGrid1.DataSource = ds.Tables["myTable"].DefaultView;  }   该操作的结果就是在程序的DataGrid控件中显示表中的数据,如图5所示。   图5   10.查看存储过程中的数据:   该过程和上面查看表中的数据的过程类似,其中调用的存储过程就是我们前面创建的那个。函数的实现如下: private void button6_Click(object sender, System.EventArgs e)  {  // 打开数据库连接  if( conn.State == ConnectionState.Open)   conn.Close();  ConnectionString ="Integrated Security=SSPI;" +   "Initial Catalog=mydb;" +   "Data Source=localhost;";     conn.ConnectionString = ConnectionString;  conn.Open();     // 创建数据适配器  SqlDataAdapter da = new SqlDataAdapter("myProc", conn);  // 创建一个数据集对象并填充数据,然后将数据显示在DataGrid控件中  DataSet ds = new DataSet("SP");  da.Fill(ds, "SP");  dataGrid1.DataSource = ds.DefaultViewManager;  }   该操作的结果如图6所示。      图6   11.查看视图中的数据:   该过程和上面的两个过程也是类似的,调用的视图是我们前面创建的那个视图。函数的实现如下: private void button7_Click(object sender, System.EventArgs e)  {  // 打开数据库连接  if( conn.State == ConnectionState.Open)   conn.Close();  ConnectionString ="Integrated Security=SSPI;" +   "Initial Catalog=mydb;" +   "Data Source=localhost;";     conn.ConnectionString = ConnectionString;  conn.Open();     // 创建数据适配器 SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM myView", conn); // 创建一个数据集对象并填充数据,然后将数据显示在DataGrid控件中 DataSet ds = new DataSet(); da.Fill(ds); dataGrid1.DataSource = ds.DefaultViewManager;  }   该操作的结果如图7所示。   图7   12.创建其他数据库对象:   在关系型数据库中,常涉及到的数据库对象还包括了索引、约束等。它们是高效实现数据库查询操作和满足数据库完整性规则的必要条件。我们可以通过Create Index语句来创建索引,通过CREATE RULE语句来创建约束(也即规则)。函数的实现如下: private void button8_Click(object sender, System.EventArgs e)  {  sql = "CREATE UNIQUE INDEX "+   "myIdx ON myTable(myName)";    ExecuteSQLStmt(sql);   sql = "CREATE RULE myRule "+   "AS @myBalance >= 32 AND @myBalance < 60";  ExecuteSQLStmt(sql);  }   13.修改表:   上面我们为数据库创建了一个表,但是实际的应用过程中可能还要为该表添加一些字段或是删除某些字段,这就要通过ALTER TABLE这句SQL语句来完成了。其中添加字段的方法是ALTER TABLE…ADD…,而删除字段的方法则是ALTER TABLE…DROP…,本程序中我们为表添加了一个字段。函数的实现如下: private void button9_Click(object sender, System.EventArgs e)  {  sql = "ALTER TABLE MyTable ADD "+   "newCol TIMESTAMP";             ExecuteSQLStmt(sql);  }   该操作执行完毕后,我们在企业管理器的设计表图中可以找到相应的变化,如图8所示。      图8   14.删除表:   删除表的操作就是将某个不再有用的表从数据库中删除,通过DROP TABLE语句我们可以完成此操作。函数的实现如下: private void button10_Click(object sender, System.EventArgs e)  {  string sql = "DROP TABLE myTable";  ExecuteSQLStmt(sql);  }   小结   以上,我们通过运用Visual C#动态地创建了一个SQL Server类型的数据库以及相关的一些数据库对象并完成了数据的添加和显示等操作。通过动态地操作该数据库,我们感觉到了.Net框架下数据库应用程序编程的简洁性和方便性,这不得不归功于ADO.Net的强大功能,所以希望大家能学好ADO.Net以创建出更加灵活多样、功能强大的数据库应用程序。最后,希望本文对大家能有不少帮助。 C# 操作数据库的流程 C#操作数据库主要有几个对象来实现。 目前市面上比较流行的数据库是access,SQL,Oracle. 1.Connection 数据库连接对象。 关于数据库连接的对象分为两种,Oledbconnection,和SqlConnection对象, 其中access,oracle数据库使用的是oledbConnection数据库连接对象。 SQL数据库用的是SqlConnection数据库连接对象。 使用OledbConnection对象的时候,要指出数据的提供者,和数据源,即 Provider ,DataSource 例如:OledbConnection OledbConn=new OledbConnection(Provider="Microsoft.Jet.OLEDB.4.0;Data Source=d:\\ddd.mdb"); 2.Command对象: access,oracle数据库使用OLEDBCommand对象。 SQL数据库使用SQLCommand对象。 Command对象可以执行SQL语句的插入,修改,删除等操作,如果想要反悔一个记录集,就需要 数据适配器 对象即 DataAdapter对象。当然Command对象包含很多属性,例如 CommandText,CommandType,Connection等 3.数据库适配对象即:DataAdapter对象: 当想要返回一个记录集的时候,就用到了这个对象,DataAdapater 对象,包含几种方法。 1. 可以直接把Command对象放到DataAdapter里面去,例如 sqlDataAdapter da=new sqlDataAdapter(Cmd);其中Cmd可以是一个对某条SQL语句或存储过程的记录。 2. 当然DataAdapter对象也可以直接对SQL语句进行操作。例如 strint sql="select * from product"; sqlDataAdapter da=new sqlDataAdapter(sql,conn); 下面就可以用da.fill(ds);把数据放到ds这个dataset里面去了。 4.DataSet对象, 这个是一个C#中的一个数据集,它可以保存从数据库里面读取返回的一个记录集。 5.与DataSet有所不同的是,DataReader对象: DataReader对象效率相对高一点,因为用DataReader对象,在内存中每次就存一条记录,这样内存使用率就很低,效率很高.DataReader对象可以通过Command对象中的ExecuteReader的方法来获得。例如 sqlCommand cmd=new sqlCommand(); cmd.Commandtext="select * from product"; cmd.CommandType=CommandType.Text; cmd.Connection=Conn(); cmd.Connection.open(); SqlDataReader SDR=cmd.ExecuteReader(); //当想取出多条记录的时候,就用do,while循环 do { response.write(myReader.GetInt32(0)); } while(SDR.NextResult()); //当只有一条记录的时候,就可以用 while(SDR.Read()) 就可以了。 SDR.close(); 概述C# 数据库操作类 C#数据库操作类的封装是任何工程都必不可少地,本例当然也不例外。C#数据库操作类主要包括两类方法:一类用来直接执行SQL语句,另一类用来执行存储过程。 其中的数据库连接字符串的数据库路径采用了绝对路径,读者调试程序时应当做相应的更改。C#数据库操作类具体代码如下: 1.​ usingSystem;   2.​ usingSystem.Collections.Generic;   3.​ usingSystem.Text;   4.​ usingSystem.Data.SqlClient;   5.​ usingSystem.Data;   6.​ namespaceMyChat   7.​   8.​ {   9.​   10.​ //数据库操作类   11.​   12.​ publicclassSql   13.​ {   14.​ privatestringstr=null;//数据库连接字符串   15.​ publicSqlConnectionCon;//sql数据连接组件实例化   16.​ publicSqlCommandcommand=newSqlCommand();//初始化一个SQL命令对象   17.​ publicSql()//类初始化,初始化数据连接   18.​ {   19.​ stringpath=@"C:\DocumentsandSettings\Administrator\桌面\tools\   20.​ mychat1.0\Chat";   21.​ //数据库连接字符串   22.​ str="DataSource=.\\SQLEXPRESS;AttachDbFilename=\""+path+"\\app_data\\chat.mdf\";   23.​ IntegratedSecurity=True;UserInstance=True";   24.​ Con=newSqlConnection(str);   25.​ }   26.​   27.​ #regionSQL语句操作   28.​   29.​ //执行只读数据信息的提取,返回一个datareader   30.​   31.​ publicSqlDataReaderGetReader(stringsearch)   32.​ {   33.​ SqlDataReaderReader;   34.​ if(Con.State!=ConnectionState.Open)   35.​ Con.Open();//打开数据库连接   36.​ SqlCommandCom=newSqlCommand(search,Con);   37.​ Reader=Com.ExecuteReader();//执行SQL语句   38.​ returnReader;//返回一个reader   39.​ }   40.​   41.​ //输入查询字符串,返回dataset   42.​   43.​ publicDataSetgetMyDataSet(stringsql)   44.​ {   45.​ command.Connection=Con;//配置command对象   46.​ command.CommandText=sql;//赋予要执行的语句   47.​ DataSetdt=newDataSet();//初始化一个数据返回集合   48.​ SqlDataAdapterda=newSqlDataAdapter(command);   49.​ Con.Open();//打开连接   50.​ da.Fill(dt);//执行语句   51.​ command.Connection.Close();//关闭连接   52.​ returndt;   53.​ }   54.​   55.​ //执行非查询SQL语句   56.​   57.​ publicvoidExecuteSql(stringsql)   58.​ {   59.​ if(Con.State!=ConnectionState.Open)   60.​ Con.Open();//如果数据连接关闭,则打开   61.​ SqlCommandCom=newSqlCommand(sql,Con);   62.​ Com.ExecuteNonQuery();//执行非查询SQL语句   63.​ Con.Close();   64.​ }   65.​   66.​ //执行非查询数据库操作,是否关闭数据库连接可以选择   67.​   68.​ publicvoidExecuteSql(stringsql,boolcloseConnection)   69.​ {   70.​ if(Con.State!=ConnectionState.Open)   71.​ Con.Open();//如果未打开连接,则打开   72.​ SqlCommandCom=newSqlCommand(sql,Con);   73.​ Com.ExecuteNonQuery();   74.​ if(closeConnection)Con.Close();//如果需要关闭,则关闭连接   75.​ }   76.​   77.​ #endregion   78.​ #region执行存储过程的代码   79.​   80.​ //输入存储过程名称,执行查询存储过程   81.​ publicDataSetgetDataSet(stringprodureName)   82.​ {   83.​ command.Connection=Con;//赋予连接对象   84.​ //执行的类型为存储过程   85.​ command.CommandType=CommandType.StoredProcedure;   86.​ command.CommandText=produreName;//赋予执行的存储过程名字   87.​ DataSetdt=newDataSet();   88.​ SqlDataAdapterda=newSqlDataAdapter(command);   89.​ Con.Open();//打开连接   90.​ da.Fill(dt);//填充数据   91.​ command.Connection.Close();   92.​ returndt;//返回数据集   93.​ }   94.​   95.​ //输入存储过程名,执行非查询存储过程   96.​   97.​ publicboolexec(stringprodureName)   98.​ {   99.​ boolflag=false;//任务是否正确执行,初始化为false   100.​ command.Connection=Con;//赋予command对象以数据连接   101.​ command.CommandType=CommandType.StoredProcedure;   102.​ command.CommandText=produreName;//存储过程名称   103.​ try   104.​ {   105.​ command.ExecuteNonQuery();//执行存储过程   106.​ flag=true;//正确完成任务   107.​ }   108.​   109.​ finally   110.​ {   111.​ command.Connection.Close();//关闭连接   112.​ }   113.​ returnflag;//返回成功与否的标志   114.​ }   115.​ #endregion   116.​ }   117.​ }  C# 操作数据库简介 2008年12月31日 星期三 14:58 如果一门程序设计语言不支持数据库操作的话,其很难在现在的世界中存活下来。 C#语言提供了丰富的数据库操作类库,极大地方便了对数据库的操作。在C#中,常用的有三种访问数据库的模式分别为:SqlClient模式、OleDb模式和Odbc模式。其中SqlClient模式是微软老大哥专门为其产品Sql Server数据库而设计的,所以如果欲使用Sql Server数据库开发应用程序的话,建议使用这种模式,其性能和效率是比其他模式的要高。OleDb模式和Odbc模式可以运用在任何支持该模式的数据库产品中,如Access数据库、DB2、Sybase和Sql Server 数据库等。下面简单介绍C#操作数据库的大致过程: 1、引入相关的命名空间 在C#中要操作数据库,一般情况需要引入两个命名空间,在三种连接模式中都要引入下面的命名空间: System.Data; 而另外一个命名空间,使用不同的连接模式而不同,如果使用SqlClient模式的话,则需要引入如下命名空间: System.Data.SqlClient; 如果使用OleDb模式的话,需要使用下面的命名空间: System.Data.OleDb; 如果使用Odbc模式的话,需要使用下面的命名空间: System.Data.Odbc; 2、定义连接字符串,并建立连接对象 在C#中,如果想连接数据库的话,需要使用Connection连接对象。同样,不同的连接模式下,所使用的连接对象也不同: (1)如果使用SqlClient模式的话,其基本连接字符串和连接对象如下: 连接字符串:string connString = "server=.;database=testDB;uid=sa;pwd=;"; 其中,server是指数据库所在的机器(服务器),如果使用当前机器(本地机器)的话,可以使用“.”、“(local)”、“127.0.0.1”或本地机器的名字。如果使用其它机器上的数据库的话,可以使用那台机器的机器名字(确保域和工作组的正确)或IP地址。database指的数据库的名字。uid和pwd分别代表连接数据库的用户名和密码。 定义连接字符串后,就可以建立SqlClient模式下的连接对象了,在SqlClient模式下,应使用SqlConnection。 SqlConnection sConn = new SqlConnection(connString); (2)如果使用OleDb模式的话,其基本连接字符串和连接对象如下: 连接字符串:string connString = "Provider=SQLOLEDB.1;DataSource=(local);uid=sa;pwd=;Initial Catalog=testDB"; 其中,Provider给出数据提供程序;DataSource给出数据库所在的服务器名或IP地址(具体同SqlClient模式下的server关键字);uid和pwd分别指用户名和密码;Initial Catalog给出的是所连接的数据库的名字。如果使用Access数据库的话,其连接字符串的形式应该如下: string connString = "provider=Microsoft.Jet.OLEDB.4.0;Data Source = F:\\student.mdb"; 定义好连接字符串后,就可以定义连接对象了,在该模式下,应使用OleDbConnection。 OleDbConnection odConn = new OleDbConnection(connString); (3)如果使用Odbc模式的话,其基本连接字符串和连接对象如下: 连接字符串:string connString = "Driver={Sql Server};Server=.;Database = testDB;uid=sa;pwd=;"; 如果使用Access数据库,其连接字符串如下: string connString = "{Microsoft Access Driver(*.mdb)};Dbq = \"F:\\student.mdb\";"; 定义好连接字符串后,使用OdbcConnection建立连接对象: OdbcConnection oConn = new OdbcConnection(connString); 3、打开数据库连接 打开数据库使用Open方法,但在试图打开数据连接时会发生错误,因此常采用如下的异常控制方法(这里假设打开SqlClient模式下连接,实际上只不过连接对象的名字不同而已): try { sConn.Open(); } catch(Exception ex) { MessageBox.Show("发生错误:"+ex.Message); //Console.WriteLine("发生错误:"+ex.Message); //在控制台下使用这种方式 } 4、Command命令对象的应用 Command用于向数据库传输的命令的对象,其构造函数常用两个参数,一个参数是所使用的命令文本(CommandText),另一个为所使用的连接对象Connection。根据不同的数据库连接模式,其形式也不同,SqlCommand对应着SqlClient模式;OleDbCommand对应着OleDb模式,OdbcCommand对应着Odbc模式。 假设我们想使用SqlClient模式查询Sql Server中testDB数据库中student表中的xh(学号)、xm(姓名)和xb(性别)三列的值,则可以建立如下的命令对象(sConn参见建立的连接sConn: SqlCommand sCmd = new SqlCommand("SELECT xh,xm,xb FROM student",sConn); 亦可使用如下的形式: SqlCommand sCmd = new SqlCommand(); sCmd.CommandText = "SELECT xh,xm,xb FROM student"; sCmd.Connection = sConn; 命令对象常用的有三个方法:ExecuteReader(),ExecuteNonQuery()和ExecuteScalar()。ExecuteReader方法用于返回查询结果的全部数据。ExecuteNonQuery方法用于返回所影响的行数,一般用于Insert、Update和Delete操作。ExecuteScalar方法返回结果中的第一行第一列的值。 5、数据读取器DataReader DataReader用于从返回来的数据区中读取数据。其根据使用的数据连接模式不同也有不同的形式:SqlDataReader对应着SqlClient模式,OleDbDataReader对应着OleDb模式,OdbcDataReader对应着Odbc模式。 数据读取器应与命令对象配合使用,下面接着4中的例子来写: SqlDataReader sdr = null; sdr = sCmd.ExecuteReader(); //执行命令对象,并用sdr指向结果集的第一条记录。 while(sdr.Read()) //每读取一条记录后,指向其下一条记录 { Console.WriteLine("学号:{0},姓名:{1},性别:{2}",sdr["xh"],sdr["xm"],sdr["xb"]); //或使用下面的格式 // Console.WriteLine("学号:{0},姓名:{1},性别:{2}",sdr[0],sdr[1],sdr[2]); } sdr.Close(); //关闭读取器 6、数据集DataSet和数据适配器DataAdapter 一般数据集和数据适配器是密不可分的,下面先介绍数据适配器。 数据适配器可以容纳一组数据命令和一个数据库连接对象,这与Command对象不同,Command只有一个数据命令和一个数据库连接。数据适配器根据不同的连接模式也有不同的形式:SqlDataAdapter、OleDbDataAdapter和OdbcDataAdapter。下面给出SqlClient模式下数据适配器的定义方式: SqlDataAdapter sda = new SqlDataAdapter("SELECT xh,xm,xb FROM student",sConn); 第一个参数是用到的SQL语句,第二个参数是数据连接。也可以使用一个命令对象传递上面的信息。即: SqlDataAdapter sda = new SqlDataAdapter(sCmd); 下面再介绍一下DataSet,DataSet是在内存中缓存的数据集,包括数据本身,还包括定义在数据上的约束和关系等信息。数据集中可以包含0个这样的数据对象。不管使用什么样的数据库连接模式,其只有唯一的形式。其定义方法如下: DataSet ds = new DataSet(); 定义完数据集后,就可以调用数据适配器的Fill方法来填充数据集: sda.Fill(ds); 也可以在填充的同时,指定表名: sda.Fill(ds,"Student"); 可以使用下面的方法读取数据集中的数据信息: int rowNum = ds.Tables["Student"].Rows.Count; //获得数据集表student表中的行数 int columnNum = ds.Tables["Student"].Columns.Count; //获得数据集表student中的列数 for(int i = 0; i < rowNum; i ++) { for(int j = 0; j < columnNum; j ++) { Console.Write(ds.Tables["student"].Columns[j].ColumnName+":"+ds.Tables["student"].Rows[i][j].ToString(); } Console.WriteLine(); } 下面给出一个数据库操作的例子。假设在Sql Server中有一个数据库test,其存放着一个数据表名为student,其结构为student(xh,xm,xb,mz),下面使用SqlClient模式连接数据库: /************************************** * * 本程序演示数据库的操作 * 使用Sql Server2000数据库操作 * * ************************************/ using System; //引入命名空间 using System.Data; using System.Data.SqlClient; class DbOper { static void Main() { //定义连接字符串 string connString; connString="server=.;uid=sa;pwd=;database=test;"; //定义连接对象sConn SqlConnection sConn = new SqlConnection(connString); try { //打开连接 sConn.Open(); } catch(Exception ex) { //给出错误信息 Console.WriteLine("连接错误:"+ex.Message); } //定义SQL查询语句 string sql; sql = "select * from student"; //定义命令对象sCmd SqlCommand sCmd = new SqlCommand(sql,sConn); //定义数据读取器sdr SqlDataReader sdr=null; //执行命令对象sCmd并赋值给sdr sdr = sCmd.ExecuteReader(); //循环输出sdr中的内容 Console.WriteLine(" 学 号 姓名 性别民族"); while(sdr.Read()) { Console.WriteLine(sdr[0]+" "+sdr["xm"]+sdr["xb"]+" "+sdr["mz"]); } //关闭数据读取器 sdr.Close(); //关闭数据库连接 sConn.Close(); } } C# 操作数据库,数据库表 下面是Sql Server 和 Access 操作数据库结构的常用Sql,希望对你有所帮助。  内容由海娃整理,不正确与不完整之处还请提出,谢谢。  新建表:  create table [表名]  (  [自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,  [字段1] nVarChar(50) default '默认值' null ,  [字段2] ntext null ,  [字段3] datetime,  [字段4] money null ,  [字段5] int default 0,  [字段6] Decimal (12,4) default 0,  [字段7] image null ,  )  删除表:  Drop table [表名]  插入数据:  INSERT INTO [表名] (字段1,字段2) VALUES (100,'51WINDOWS.NET')  删除数据:  DELETE FROM [表名] WHERE [字段名]>100  更新数据:  UPDATE [表名] SET [字段1] = 200,[字段2] = '51WINDOWS.NET' WHERE [字段三] = 'HAIWA'  新增字段:  ALTER TABLE [表名] ADD [字段名] NVARCHAR (50) NULL  删除字段:  ALTER TABLE [表名] DROP COLUMN [字段名]  修改字段:  ALTER TABLE [表名] ALTER COLUMN [字段名] NVARCHAR (50) NULL  重命名表:(Access 重命名表,请参考文章:在Access数据库中重命名表)  sp_rename '表名', '新表名', 'OBJECT'  新建约束:  ALTER TABLE [表名] ADD CONSTRAINT 约束名 CHECK ([约束字段] <= '2000-1-1')  删除约束:  ALTER TABLE [表名] DROP CONSTRAINT 约束名  新建默认值  ALTER TABLE [表名] ADD CONSTRAINT 默认值名 DEFAULT '51WINDOWS.NET' FOR [字段名]  删除默认值  ALTER TABLE [表名] DROP CONSTRAINT 默认值名  删除Sql Server 中的日志,减小数据库文件大小  dump transaction 数据库名 with no_log  backup log 数据库名 with no_log  dbcc shrinkdatabase(数据库名)  exec sp_dboption '数据库名', 'autoshrink', 'true' C# 数据库访问及增删改查步骤及代码 2011-04-19 10:48 1. 创建sqlconnection类的连接对象 SqlConnection mySqlConnection = new Sqlconnection("ser
本文档为【Visual C#中动态操作SQL Server数据库】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_459908
暂无简介~
格式:doc
大小:853KB
软件:Word
页数:75
分类:互联网
上传时间:2011-04-25
浏览量:38