Warning: Undefined array key "HTTP_REFERER" in /www/wwwroot/prod/www.enjoyasp.net/wp-content/plugins/google-highlight/google-hilite.php on line 58
1,ado.net是微软在.NET中创建分布式和数据共享应用程序的开发接口,它就是一组处理数据的类。
2, 连接数据库的两种状态 -- 有连接,无连接。
(1)有连接:用户得到的数据始终与数据源连接,直到应用程序结束。因数据是实时的,故可用连接状态来读取数据,以保持数据的最新。
好处:得到的数据总是最新的。同步问题易于解决,实时性高
缺点:必须保持持续的网络连接,扩展性差。
(2)无连接:从数据源得到数据后,这部分数据存储到内在中,可以进行数据的编辑,与更改。
好处:可以在任何时间操作,不独占连接。
缺点:数据不是实时的,要解决同步问题。
3,有连接的操作:主要用来数据的读取。连接数据步骤:
(1)声明SqlConnecton对象,并指定连接字符串属性
(2)声明SqlCommand对象,指定sql命令及SqlConnection
(3)SqlCommnad执行方法,返回数据集
(4)关闭数据集,关闭Connection
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "Data Source=192.168.16.55;Initial Catalog=BRM;persist security info=False;user id=BRM;password=BRM2009;min pool size=1;max pool size=100;" ;
conn.Open();
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandText = "SELECT * FROM bdOrder";
SqlDataReader dr = command.ExecuteReader();
GridView1.DataSource = dr;
GridView1.DataBind();
dr.Close();
conn.Close(); //注若在GridView获取数据之前Close关闭,则将收不到数据。但在无连接进可在之前关闭,因为数据已存入在内存中。
注:利用SqlConnection, SqlCommand, SqlDataReader默认是支持SqlServer的,若想支持MySql,项目中要引入具体的dll文件 如引入MySql.Data.dll, 在程序中using MySql.Data.MySqlClient;利用MySqlConnection,MySqlCommand,MySqlDataReader即可。
SqlCommand 常用方法:
(1)更新删除操作:ExecuteNonQuery 对连接执行 Transact-SQL 语句并返回受影响的行数, int类型 返回数据集操作: ExecuteReader 已重载。 将 CommandText 发送到 Connection 并生成一个 SqlDataReader。 返回一个数据操作: ExecuteScalar 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
返回一个XML: ExecuteXmlReader 将 CommandText 发送到 Connection 并生成一个 XmlReader 对象。
(2) 传参
1),直接在CommandText写参数;如:command.CommandText = "SELECT * FROM bdOrder WHERE id>" + id;2),利用SqlParameter传参,防止Sql注入
command.CommandText = "SELECT * FROM mdCustomerType WHERE ORDERBY orderby";
SqlParameter sp = new SqlParameter( "@orderby" ,8);
command.Parameters.Add(sp);
注:不同的数据库用的符号是不同的,SqlServer用 “@”, 而MySql 则用 “?”
4, 无连接的操作, 区别在于执行数据操作时用的是SqlDataAdapter,可利用SqlCommand构造Sql语句,并传参。最后是SqlDataAdapter来执行 返回的结果用Fill方法填充DataSet或DataTable
(1)string ConnectionString = "Data Source=192.168.16.55;Initial Catalog=BRM;persist security info=False;user id=BRM;password=BRM2009;min pool size=1;max pool size=100;";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConnectionString;
conn.Open();
SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM bmdCustomer",conn);
DataSet ds = new DataSet();
sda.Fill( ds );
conn.Close(); //conn可提前关闭
GridView1.DataSource = NoConnection(conn);
GridView1.DataBind();
//操作也可用:
SqlDataAdapter sda = new SqlDataAdapter();
SqlCommand command = new SqlCommand();
command.Connection = conn;
command.CommandText = "SELECT * FROM mdCustomerType WHERE ORDERBY >@orderby";
SqlParameter sp = new SqlParameter("@orderby", 10);
command.Parameters.Add(sp);
sda.SelectCommand = command; //这样就可传参。
其实SqlDataAdapter就是SqlCommand的适配器,主要内容由SqlCommand完成构建,它只是负责执行。
(2)SqlDataAdapter 类似于SqlCommand 的Exec方法
查询: sda.SelectCommand;
插入: sda.InsertCommand;
更新: sda.UpdateCommand;
删除: sda.DeleteCommand;
5,执行存储过程
指定SqlCommand的CommandType, CommandText即可
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure; //默认执行的是Sql语句
cmd.CommandText = "bmdCustomer_sel"; //存储过程名称, 默认是Sql语句
SqlParameter[] storedParameters = {
new SqlParameter( "@TranType", "ID" ),
new SqlParameter( "@ID", "277" )
};
foreach (SqlParameter sp in storedParameters) {
cmd.Parameters.Add( sp );
}
SqlDataReader dr = cmd.ExecuteReader();
注:CommandType指定类型:(1)Text :默认,CommandText为Sql命令。
(2)TableDirect CommandText为表的名称。 (3)StoredProcedure CommandText为存储过程的名称。