zoukankan      html  css  js  c++  java
  • 新手C#SQLServer在程序里实现语句的学习2018.08.12

    从C#中连接到SQL Server数据库,再通过C#编程实现SQL数据库的增删改查。

    ado.net提供了丰富的数据库操作,这些操作可以分为三个步骤:

    • 第一,使用SqlConnection对象连接数据库;
    • 第二,建立SqlCommand对象,负责SQL语句的执行和存储过程的调用;(在使用适配器查找记录时不用建立sqlcommand对象)
    • 第三,对SQL或存储过程执行后返回的“结果”进行操作。对结果的操作分为两种,一种为SqlDataReader一行一行读取数据集,另一种为DataSet联合SqlDataAdapter读取数据集。

    1.打开连接通道:

            #region 打开连接通道
            /// <summary>
            ///1.连接通道的连接字符串
            ///2.连接通道对象
            ///3.打开通道
            ///4.关闭通道
            /// </summary>
            public static void OpenConnection()
            {
                //1.连接通道的连接字符串
                string conStr = "server=192.168.1.100;database=JNU;uid=sa;pwd=123456aa;";//指定哪台服务器
                //2.连接通道对象
                SqlConnection conn = new SqlConnection(conStr);
                //3.打开通道
                conn.Open();
                //4.关闭通道
                conn.Close();
                Console.WriteLine("连接对象新建操作成功");
            } 
            #endregion

    2.增加记录

            #region 增加记录
            /// <summary>
            /// 增加记录
            /// </summary>
            public static void AddRecord()
            {
                int res = -1;//准备比接受新增受影响的行数
                string conStr = "server=192.168.1.100;database=JNU;uid=sa;pwd=123456aa;";
                //1.新建连接通道
                SqlConnection conn = new SqlConnection();
                //2.手动指定连接字符串
                conn.ConnectionString = conStr;
                //3.准备新增的sql命令
                string sqlStr = "insert into TEST(NAME) values('SHUAI')";
                //4.新建命令对象,并且告诉他走那条路(conn),做什么事('sqlStr')单引号一定要加
                SqlCommand cmd = new SqlCommand(sqlStr, conn);
                //5.打开连接通道
                conn.Open();
                //6.调用方法去数据库执行sql语句
                res = cmd.ExecuteNonQuery();//此方法负责增删改,返回受影响的行数(int),开始进入数据库进行操作
                //7.关闭连接通道
                conn.Close();
                if (res > 0)
                {
                    Console.WriteLine("新增成功");
                }
                else
                {
                    Console.WriteLine("新增失败");
                }
            }
            #endregion

    3.删除记录和更改记录(软删除)与新增记录的代码相同,只有SQL语句不一样,其SQL语句为

                //3.准备删除的sql命令
                string sqlStr = "delete from TEST where ID=8";
                //3.准备修改的sql命令
                string sqlStr = "update TEST set NAME='qiang' where ID=7";

    4.查询单个值时,使用的是命令对象SqlCommand进行查询

            #region 查询单个值
            /// <summary>
            /// 查询单个值
            /// </summary>
            public static void QuerySingle()
            {
                SqlConnection conn = new SqlConnection(conStr);
                //  string sqlStr = "select count(*) from TEST";
                string sqlStr = "select * from TEST";
                SqlCommand cmd = new SqlCommand(sqlStr, conn);
                conn.Open();
                //调用此方法,获得查询语句在数据库执行后得到的结果集的第一个单元格的值,返回类型为object
                object obj = cmd.ExecuteScalar();
                conn.Close();
                Console.WriteLine(obj.ToString());
    
            } 
            #endregion

    5.读取器查询多行数据,逐行读取,通过下标访问数据,还可以通过列名和get方法访问数据

            #region 读取器查询多行数据,逐行读取,通过get方法访问数据
            /// <summary>
            /// 查询多行数据——DataReader,逐行读取
            /// </summary>
            public static void QueryListByGet()
            {
                SqlConnection conn = new SqlConnection(conStr);
                string sqlStr = "select * from TEST";
                SqlCommand cmd = new SqlCommand(sqlStr, conn);
                conn.Open();
                //调用此方法,获得一个读取器对象,SqlDataReader不能实例化
                SqlDataReader dr = cmd.ExecuteReader();
                //if (dr.HasRows)//判断有无数据
                //{
                //    Console.WriteLine("有数据");
                //}
                //else
                //{
                //    Console.WriteLine("无数据");
                //}
                if (dr.HasRows)
                {
                    //每调用一次read,读取一行数据
                    while (dr.Read())//read方法,如果读到下一行数据,则返回true,而且dr本身就等于哪一行数据
                    {
                        //读取第一列的数据
                        //Console.WriteLine(dr[0].ToString());//通过下标访问数据,数组下标从0开始
                        //Console.WriteLine(dr["ID"].ToString());//通过列名访问数据,以结果集的列名作为标志,可以避免as为别名后的查询错误
                        Console.WriteLine(dr.GetString(1));//通过get访问数据,数组下标从0开始,只能用于char类型的变量,不能获取int类型的数据
                        Console.WriteLine(dr.GetInt32(0));//只能获取int类型
                        Console.WriteLine(dr.GetValue(0).ToString());//以object的方式拿出数据
                        dr.GetOrdinal("ID");//传入列名,获得列的下标
    
                    }
                }
                else
                    Console.WriteLine("无数据");
                //先关闭读取器,再关闭连接通道
                dr.Close();
                conn.Close();
            }
            #endregion

    6.适配器查询多行数据

            #region 适配器查询多行数据
            /// <summary>
            /// 使用适配器读取数据,不需要代码手动打开、关闭连接通道
            /// </summary>
            public static void QueryListByAdapter()
            {
                SqlConnection conn = new SqlConnection(conStr);
                string sqlStr = "select * from TEST";
                //创建适配器对象(SqlDataAdapter),告诉他做什么事(sqlStr),走哪条路(conn)
                SqlDataAdapter sqlda = new SqlDataAdapter(sqlStr, conn);
                //创建数据集对象(程序端的临时数据库)
                DataSet ds = new DataSet();
                //调用fill方法,添加数据到数据集。(先去数据库查询结果集,并把结果集返回赋值给数据集)
                sqlda.Fill(ds);//开始进入数据库进行操作
                DataTable dt = ds.Tables[0];//获得数据集中的第一张表(数据集可以存放多张表)
                for (int i = 0; i < dt.Rows.Count; i++)//循环该表中的每一行,dt.Rows为获取该数据表的行集合
                {
                    DataRow dr = dt.Rows[i];//dr对象获取表中的当前行
                    Console.WriteLine(dr[0].ToString());//通过索引的方式读某一列的值
                    Console.WriteLine(dr["ID".ToString()]);//通过列名的方式读列
                }
            } 
            #endregion

    2018.08.12

  • 相关阅读:
    7 文件操作
    初识字典1
    软件工程学习进度
    AAAA
    软件工程期末总结
    【操作系统】实验四 主存空间的分配和回收 截止提交时间:2016.6.17
    约教网站开发(一)
    操作系统实验三
    .Scrum团队成立
    数学精灵改进
  • 原文地址:https://www.cnblogs.com/do-hardworking/p/9465090.html
Copyright © 2011-2022 走看看