ADO.NET

ADO.NET说简单点就是使用.net技术操作数据库的一套类库。统一操作数据库,操作和数据库和使用的编程语言无关。
需要用到的命名空间是System.Data
操作SQL Server数据库用到的是System.Data.SqlClient;

Connection类

Connection用于连接数据库
那么连接数据库都需要什么东西?
先想想我们用Microsoft SQL Server Management操作数据库之前需要提供什么?
ADO.NET_第1张图片
1.服务器名称
数据库服务\实例名
数据库服务:
如果连的是本机的话。有三种填写方式
.
计算机名
127.0.0.1//回环地址,使用这个的时候需要打开TCP/IP协议
为了方便一般都用“.”。
如果不是本机,就填写服务器的ip地址。
实例名:如果使用的是默认实例的话,可以省略。
这里写图片描述
MSSQLSERVER就是安装数据库时设置的默认实例名。
2.身份验证
Windows身份验证
SQL Server身份验证:需要提供用户名和密码
3.数据库名
连接数据库的时候会默认给定一个数据库
这里写图片描述
在应用程序的代码中用一个字符串来包含这些信息。

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控件。
ADO.NET_第2张图片

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框架提出泛型集合后,就很少用了。一般都用泛型集合存数据。

你可能感兴趣的:(sql,.net,数据库,server,ADO.NET)