ADO.NET 偏执的太偏执、 2022-08-21 08:44 175阅读 0赞 ADO.NET说简单点就是使用.net技术操作数据库的一套类库。统一操作数据库,操作和数据库和使用的编程语言无关。 需要用到的命名空间是System.Data 操作SQL Server数据库用到的是System.Data.SqlClient; # Connection类 # Connection用于连接数据库 那么连接数据库都需要什么东西? 先想想我们用Microsoft SQL Server Management操作数据库之前需要提供什么? ![这里写图片描述][20160505082537995] 1.服务器名称 数据库服务\\实例名 数据库服务: 如果连的是本机的话。有三种填写方式 . 计算机名 127.0.0.1//回环地址,使用这个的时候需要打开TCP/IP协议 为了方便一般都用“.”。 如果不是本机,就填写服务器的ip地址。 实例名:如果使用的是默认实例的话,可以省略。 ![这里写图片描述][20160505083627624] MSSQLSERVER就是安装数据库时设置的默认实例名。 2.身份验证 Windows身份验证 SQL Server身份验证:需要提供用户名和密码 3.数据库名 连接数据库的时候会默认给定一个数据库 ![这里写图片描述][20160505084205220] 在应用程序的代码中用一个字符串来包含这些信息。 string connStr=@"server=ip或机器名或.\实例名;database=数据库名;uid=sa;pwd=密码;或integrated security=true;"; //创建连接字符串 string connStr=@"server=192.168.23.147;database=MyFirstDB;uid=sa;pwd=123;" //创建连接对象 SqlConnection conn=new SqlConnection(); //设置连接字符串 conn.ConnectionString=connStr; //打开 conn.Open(); ... //用完之后关闭连接 conn.Close(); # Command类 # Command用于把命令交给数据库 ## ExecuteNonQuery方法 ## 执行非查询语句,返回受影响的行数,如果执行的是非增删改操作返回-1 //准备连接字符串 string connStr = @"server=.;database=MyFirstDB;uid=sa;pwd=157326;"; //准备sql语句 string sql = "update LoginTest set pwd=123 where uid='小明';"; //创建连接对象 SqlConnection conn = new SqlConnection(connStr); //创建执行对象 SqlCommand cmd = new SqlCommand(sql,conn); //打开 conn.Open(); //开始执行 int count = cmd.ExecuteNonQuery();//返回受影响行数 //关闭 conn.Close(); cmd.Dispose(); Console.WriteLine(count); Console.ReadKey(); ## ExecuteScalar方法 ## 用于查询语句,返回查询的第一行第一列的结果,如果没有的话返回null,使用的时候一般与聚合函数连用。 用法和上一个方法几乎一样,只不过返回值得类型变为object string connStr = @"server=.;database=MyFirstDB;uid=sa;pwd=157326"; string sql = "select count(*) from LoginTest where uid='小明';"; int count;//因为count(*)返回的结果肯定是int类型的,所以就没有定义成object类型。 using (SqlConnection conn = new SqlConnection(connStr)) { using (SqlCommand cmd = new SqlCommand(sql, conn)) { conn.Open(); count = cmd.ExecuteScalar();//返回结果集中的第一行第一列 } } 为了缩短连接对象的持有时间,应保证打开之后立马执行(需要用的东西提前准备好),执行完后立马关闭。所以把int count定义在了外边。 ## ExecuteReader方法 ## ExecuteReader方法可查询所有结果。它返回一个SqlDataReader对象(数据读取器)。 string connStr = @"server=.;database=MyFirstDB;uid=sa;pwd=157326"; string sql = "select * from LoginTest"; using (SqlConnection conn=new SqlConnection(connStr)) { using (SqlCommand cmd=new SqlCommand(sql,conn)) { conn.Open(); SqlDataReader reader = cmd.ExecuteReader(); using (reader) { //每一行 while (reader.Read()) { //每一列 for (int i = 0; i < reader.FieldCount; i++) { string data = reader[i].ToString(); Console.WriteLine(data+"\t"); } Console.WriteLine(); } } } } Console.ReadKey(); # DataAdapter类 # DataAdapter(数据适配器),把数据库中数据的格式转换成c\#里数据的格式。 其实是对前边几个类的封装 建一个winform程序,添加一个button控件,一个dataGridView控件。 ![这里写图片描述][20160505140448217] private void button1_Click(object sender, EventArgs e) { string connStr = @"server=.;database=MyFirstDB;uid=sa;pwd=157326;"; string sql = "select * from LoginTest"; DataTable dt = new DataTable(); using (SqlDataAdapter sda = new SqlDataAdapter(sql, connStr)) { sda.Fill(dt); } dataGridView1.DataSource = dt; } //点击button,dataGridView控件就会显示查询结果。 DataTable就相当与内存中的一张数据表 SqlDataReader是个数据读取器,向前不可后退、每次只读取一条。速度快,现代项目里面用它用得最多。 SqlDataAdapter是个数据适配器,工作于DataTable和数据库之间,负责将数据从数据源读出来放在DataTable中,或将DataTable中的更改更新回数据库。 当数据量极大的情况下,使用DataTable时,不论是你分页还是不分页,它的效率之低,和SqlDataReader相比都是不可同日而语的,尤其是你在分页情况下,使用DataReader可以只读所需数据,网络流量可以很小,但是DataAdapter还是必须全部读出,网络流量你很难优化,除非你自己去深入控制。 DataTable从2.0框架提出泛型集合后,就很少用了。一般都用泛型集合存数据。 [20160505082537995]: /images/20220724/cf2b85a262ed4451b8902215df3ad2c0.png [20160505083627624]: /images/20220724/94026d7381f243619546bf3f24c108d2.png [20160505084205220]: /images/20220724/dfa824e16b9943a68ed0772678b9e36e.png [20160505140448217]: /images/20220724/214a9a9cf2094f08a78fa39c16daabd9.png
还没有评论,来说两句吧...