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();
}