数据库操作大全

来源:互联网 发布:java 线程池 顺序 编辑:程序博客网 时间:2024/05/20 14:43

C# ADO.NET数据库操作大全

一、.NET Framework数据提供程序的5个核心对象:

1.        Connection:主要是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,则无法从数据库中取得数据。

2.        Command:主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及调用存在数据库中的存储过程等。

3.        DataAdapter:数据适配器。它可以通过Command对象从指定数据源提取数据,并填充到DataSet 对象中。

4.        DataSet:数据集。可以视其为一个暂存区(Cache),其内部可以容纳多个DataTable,甚至可以将DataTable的主键以及DataTable之间的外键关联等存储起来,所以我们有时贴切的称之为“内存中的小型数据库”。

5.        DataReader:当我们只需要循序的读取数据时,可以使用DataReader 对象。DataReader对象只是一次一笔向下循序的读取数据源中的数据,这些数据是存在数据库服务器中的,而不是一次性加载到程序的内存中的,而且这些数据是只读的,并不允许对其进行修改等操作。因为DataReader 在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。

二、数据库连接字符串的的常用格式:

1.        标准连接:DataSource=Aron1;Initial Catalog= pubs;UserId=sa;Password=asdasd;

2.        标准连接:Server=Aron1;Database=pubs;UserID=sa;Password=asdasd;Trusted_Connection=False

3.        信任连接:DataSource=Aron1;Initial Catalog=pubs;Integrated Security=SSPI;

4.        信任连接:Server=Aron1;Database=pubs;Trusted_Connection=True;

5.        连接Oracle:Data Source=orcl;Persist Security Info=True;UserID=zlchs;Password=zlchs;

注意:数据库连接字符串最好写到配置文件中,如:web.config、app.config

三、如何从配置文件中读取数据库连接字符串

为项目添加引用:System.Configuration.dll

在类文件中引入命名空间:usingSystem.Configuration;

读取连接字符串:string connectionString = ConfigurationManager.Connectionstrings[“连接名称”].ConnectionString;

四、Ado.net常用的类操作

*************************************增,删,改****************************************

使用Command对象的ExecuteNonQurey()方法

1:引入命名空间            using System.Data.SqlClient;

2:定义数据库连接字符串    stringconnectionString=ConfigurationManager.Connectionstrings[“**”].ConnectionString;

3:创建SqlConnection对象   SqlConnection connection=newSqlConnection(connectionString);

4:定义要执行的SQL语句    string sql=”insert into student(name,password) values (@name, @password)”;

5:创建Command对象       SqlCommand cmd=new SqlCommand(sql,connection);

6:打开连接,执行Command对象的ExecuteNonQuery()方法,获取数据库受影响的行数。

7:关闭数据库连接

*************************************查询首行首列****************************************

使用Command对象的ExecuteScalar()方法

1:引入命名空间            usingSystem.Data.SqlClient;

2:定义数据库连接字符串    stringconnectionString=ConfigurationManager.Connectionstrings[“**”].ConnectionString;

3:创建SqlConnection对象   SqlConnection connection=newSqlConnection(connectionString);

4:定义查询SQL语句    string sql=”select count(*) from UserInfo”;

5:创建Command对象       SqlCommand cmd=new SqlCommand(sql,connection);

6:打开连接,执行Command对象的ExecuteScalar()方法,获取首行首列的值object。

7:关闭数据库连接

*************************************查询DataTable****************************************

1:引入命名空间            usingSystem.Data.SqlClient;

2:定义数据库连接字符串    stringconnectionString=ConfigurationManager.Connectionstrings[“**”].ConnectionString;

3:定义查询SQL语句        string sql=”select * from UserInfo”;

3:创建SqlDataAdapter      SqlDataAdapter adapter=new SqlDataAdapter();

4:创建DataSet             DataSetds=new DataSet();

5:填充数据到DataSet       adapter.Fill(ds,“表名”);

6:从DataSet中获取DataTable    DataTable table=ds.Tables[“表名”];

*************************************只进式查询多条记录****************************************

使用Command对象的ExecuteScalar()方法

1:引入命名空间            usingSystem.Data.SqlClient;

2:定义数据库连接字符串    stringconnectionString=ConfigurationManager.Connectionstrings[“**”].ConnectionString;

3:创建SqlConnection对象   SqlConnection connection=newSqlConnection(connectionString);

4:定义查询SQL语句        stringsql=”select * from UserInfo”;

5:创建Command对象       SqlCommand cmd=new SqlCommand(sql,connection);

6:打开连接,执行Command对象的ExecuteReader()方法,返回一个SqlDataReader对象。

7:调用SqlDataReader对象的Read()方法逐条读取信息,如果读到记录返回True,否则返回False

   使用dataReader[列名]的方式读取这一行中的某一列的值

8:关闭SqlDataReader和数据连接对象

*************************************注意事项****************************************

1.        在定义SQL语句时,请不要使用字符串拼接的方式;而应该采用参数化处理方式,以避免SQL注入。

不推荐:string sql=”select * from UserInfo where name=’”+name+”’ andpassword=’”+password+”’”;

不推荐:string sql=string.Format(“insert into UserInfo values(‘{0}’, ‘{1}’)”,name, password);

推荐:string sql=”select * from UserInfo where @name is NULL or name=@name”;

SqlParameter parName=new SqlParameter(){ParameterName=”@name”,SqlDbType=SqlDbType.NVarchar};

If(string.IsNullOrEmpty(name))

{

         parName=DBNULL.Value;

}

Else

{

         parName=name;

}

SqlCommand cmd=new SqlCommand(sql, connection);

cmd.Parameters.Add(parName);

2.        在进行数据库操作时,我们一般会定义一个通用的数据库操作类,其内部的方法能够接收SQL语句,并返回SQL语句的执行结果。其具体定义请参见SqlDataAccess.cs或SqlHelper.cs

3.        ADO.NET事务处理示例

SqlConnection  connection =  new  SqlConnection(“连接字符串”);

SqlTransaction   sqlTransaction   =  sqlConnection.BeginTransaction();

SqlCommand  cmd =  new  SqlCommand(“delete …”, connection);

cmd. Transaction  = sqlTransaction;

try

{

         cmd.ExcuteNonQuery();

         cmd =  new SqlCommand(“insert …”,connection);

         cmd.Transaction  = sqlTransaction;

         cmd.ExcuteNonQuery();

         sqlTransaction.Commit();

}

         catch(Exceptione)

{

         sqlTransaction.Rollback();

}