• 新手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

  • 相关阅读:
    开放源码的对象关系映射工具ORM.NET 插入数据 Insert/Update Data
    开放源码的对象关系映射工具ORM.NET 快档开发入门 Quick Start
    .NET 动态脚本语言Script.NET 开发指南
    开放源码的对象关系映射工具ORM.NET 删除数据 Deleting Records using ORM.NET
    .NET Remoting过时了吗?为什么公司的项目还是选择用.NET Remoting,而不是WCF?
    开放源码的对象关系映射工具ORM.NET 查看和显示数据 View and Display data using ORM.NET
    开放源码的对象关系映射工具ORM.NET 查询表 调用存储过程 增加自定义代码
    技术人生:坚持,每日一博
    CQRS:CQRS + DDD + MDP 实现快速应用程序开发
    NodeJs:Happy代码生成器,重构了代码,更新了文档,完善了示例,欢迎下载使用
  • 原文地址:https://www.cnblogs.com/do-hardworking/p/9465090.html
Copyright © 2020-2023  润新知