C#基础知识及题目练习 Day26 封装工具类、类库的使用

目录

一、封装工具类

总结:类库的使用步骤

添加参数--SqlParameter的作用和用法:

二、实例


一、封装工具类

1、创建项目的时候,要创建类库项目,它没有main函数,不能运行,只能编译

为什么要创建类库项目?

因为类库项目可以生成dll文件,该文件可以在其他项目中调用

2、为了方便每个用户可以将数据库和登录账号改成自己的,我们将数据库连接字符串做成配置文件
添加步骤:
1)在解决方案上右键该项目,添加--》新建项--》应用程序配置文件
   需要注意的一点是,配置文件的名称,用默认,大家不要去修改
 

  <!--配置方式一:只能配置数据库连接字符串,不能配置别的-->
  <connectionStrings>
    <add connectionString="data source=.;database=ttt;user id=sa;pwd=admin123" name="Con1"/>
  </connectionStrings>
  
  <!--配置方式二:该软件默认选择汉语,可以在配置文件中指定-->
  <appSettings>
    <add key="Con2" value="data source=.;database=ttt;user id=sa;pwd=admin123"/>
  </appSettings>

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add connectionString="data source=.;database=Bookview;user id=sa;pwd=machenxi" name="con1"/>
  </connectionStrings>
  <appSettings>
    <add key="con2" value="data source=.;database=Bookview;user id=sa;pwd=machenxi"/>
  </appSettings>
</configuration>


   
2) 添加引用
    右击 引用--》添加引用--》在框架中找到System.Configuration
    
3) 在类文件中添加对上述dll的引用:using System.Configuration

4)在代码中读取配置文件
        //方式二
        static string strCon = ConfigurationManager.AppSettings["Con2"].ToString();
        //方式一
        public static string strCon = ConfigurationManager.ConnectionStrings["Con1"].ConnectionString;

 

总结:类库的使用步骤

1、创建一个类库项目

2、在引用中添加对System.Configuration的引用

3、在工具类中使用using System.Configuration 引用该类库

4、从配置文件中读取出数据库连接字符串
        //方式二
        //static string strCon = ConfigurationManager.AppSettings["Con2"].ToString();
        //方式一
        public static string strCon = ConfigurationManager.ConnectionStrings["Con1"].ConnectionString;
        
5、在类中实现需要的方法。

6、对该类库进行编译,生成dll文件

7、在需要调用该类库的项目A中,添加对上一步中生成的dll的引用

8、该项目A即可使用类库中的所有公共方法


注意:创建项目的时候,项目名称尽量不要出现.

添加参数--SqlParameter的作用和用法:

1.在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有单引号,程序就会发生错误

2.Add方法和AddRange方法

(1)Add方法

eg:

SqlParameter para = new SqlParameter(); //声明参数

para= new SqlParameter("@name", SqlDbType.NVarChar,100);//生成一个名字为@Id的参数,必须以@开头表示是添加的参数,并设置其类型长度,类型长度与数据库中对应字段相同,但是不能超出数据库字段大小的范围,否则报错。

para.Value = txtname.Text.ToString().Trim(); //这个是输入参数,所以可以赋值。

cmd.Parameters.Add(para);            //参数增加到cmd中。

para = new SqlParameter("@sex", SqlDbType.NVarChar, 10);

para.Value = txtsex.Text.ToString().Trim();

cmd.Parameters.Add(para);

 

(2)AddRange方法:添加多个SqlParameter

eg:

            SqlParameter[] parameters = {  //实例化一个参数对象 指定名字 类型 长度  参数的值
                new SqlParameter("@bookID", SqlDbType.Int,4){ Value=4},
                new SqlParameter("@bookName", SqlDbType.NVarChar,100){ Value="Html5"},
                new SqlParameter("@bookPrice", SqlDbType.Int,4){ Value=50}
                };

    cmd.Parameters.AddRange(parameters);

二、实例

        /// <summary>
        /// 执行SQL语句,返回受影响的行数(只针对insert update delete有意义)
        /// </summary>
        /// <param name="sql">要执行的sql语句</param>
        /// <param name="pas">sql语句的参数</param>
        /// <returns>受影响的行数</returns>
        public static int HuaXingExecuteNonQuery(string sql, params SqlParameter[] pas)
        {
            //1、创建数据库连接对象,使用using会自动帮我们关闭连接
            using (SqlConnection con = new SqlConnection(strCon))
            {
                //2、定义一个Command对象,传入sql语句
                SqlCommand cmd = new SqlCommand(sql, con);
                //3、传入参数
                if (pas != null)
                {
                    cmd.Parameters.AddRange(pas);
                }
                //4、打开数据库连接,连接打开越晚越好,节约资源
                con.Open();

                //5、执行sql语句,返回受影响的行数
                return cmd.ExecuteNonQuery();
            }

        }

        /// <summary>
        /// 执行SQL语句,返回第一行第一列的值
        /// </summary>
        /// <param name="sql">要执行的sql</param>
        /// <param name="pas">参数列表</param>
        /// <returns>结果的第一行第一列的值</returns>
        public static object HuaXingExecuteScalar(string sql, params SqlParameter[] pas)
        {
            //1、创建连接对象
            using (SqlConnection con=new SqlConnection(strCon))
            {
                //2、实例化Command对象
                SqlCommand cmd = new SqlCommand(sql, con);
                //3、添加Command参数
                if (pas != null)
                {
                    cmd.Parameters.AddRange(pas);
                }
                //4、打开数据库连接
                con.Open();
                //5、执行命令
                return cmd.ExecuteScalar();
            }
        }

        /// <summary>
        /// 执行ExecuteReader
        /// </summary>
        /// <param name="sql">要执行的sql</param>
        /// <param name="pas">sql语句的参数</param>
        /// <returns>Reader对象</returns>
        public static SqlDataReader HuaXingExecuteReader(string sql, params SqlParameter[] pas)
        {
            //创建Connection对象,不能使用using创建connection对象,更不能关闭数据连接
            SqlConnection con = new SqlConnection(strCon);
            //创建Command对象
            SqlCommand cmd = new SqlCommand(sql, con);
            //添加sql需要的参数
            if (pas != null)
            {
                cmd.Parameters.AddRange(pas);
            }
            //打开连接
            con.Open();
            //执行命令
            return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
        }

        public static DataTable HuaXingAdapter(string sql, params SqlParameter[] pas)
        {
            //1、创建一个DataTable对象
            DataTable dt = new DataTable();
            //2、创建连接对象
            using (SqlConnection con=new SqlConnection(strCon))
            {
                //3、创建Command对象
                SqlCommand cmd = new SqlCommand(sql, con);
                //4、添加sql参数
                if (pas != null)
                {
                    cmd.Parameters.AddRange(pas);
                }
                //5、创建Adapter对象
                SqlDataAdapter adpt = new SqlDataAdapter();
                //关联Command对象
                adpt.SelectCommand = cmd;
                //6、调用Fill方法,将数据填充到DataTable中
                adpt.Fill(dt);

                //7、返回DataTable
                return dt;
            }
        }

调用:

        private void button1_Click(object sender, EventArgs e)
        {
            string sql = "update MyStudent set FAge=FAge-1 where FGender=@Sex";
            //准备参数
            SqlParameter pas = new SqlParameter("@Sex", SqlDbType.VarChar, 4) { Value = "女" };

            //调用类库的方法执行sql语句
            object b = HuaXingHelper.HuaXingExecuteNonQuery(sql, pas);
            int n = (int)b;
            if (n > 0)
            {
                MessageBox.Show("减龄成功!");
            }
            else
            {
                MessageBox.Show("减龄失败!");
            }

        }

        /// <summary>
        /// 查询学号为5的学生姓名
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            //准备SQL语句
            string sql = "select FName from MyStudent where Fid=@Id";
            //sql需要的参数
            SqlParameter pas = new SqlParameter("@Id", SqlDbType.Int) { Value = 5 };
            //调用类库中的方法执行
            object b=HuaXingHelper.HuaXingExecuteScalar(sql, pas);
            MessageBox.Show(b.ToString());
        }

        /// <summary>
        /// 执行ExecuteReader,查询所有班级
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button3_Click(object sender, EventArgs e)
        {
            //准备参数
            string sql = "select* from MyClass";
            //用Reader对象接收
            SqlDataReader reader = HuaXingHelper.HuaXingExecuteReader(sql, null);
            //读取reader中的内容,显示到Dgv控件中
            //判断是否有数据
            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    //创建班级对象
                    Grade gt = new Grade();
                    gt.Id = reader["classId"].ToString();   //班级编号
                    gt.SchoolName = reader["className"].ToString();  //班级名称
                    //将当前读取的班级添加到集合中
                    lstGrades.Add(gt);
                }
                //为DataGridView绑定数据源
                dataGridView1.DataSource = lstGrades;
                //更改表头信息
                if (lstGrades.Count > 0)
                {
                    dataGridView1.Columns[0].HeaderText = "班级编号";
                    dataGridView1.Columns[1].HeaderText = "班级名称";

                }
            }

            //关闭Reader对象,同时会自动断开数据库连接
            reader.Close();
           
        }

        /// <summary>
        /// 调用Adapter查询所有班级
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button4_Click(object sender, EventArgs e)
        {
            //准备Sql
            string sql = "select * from MyClass";
            //创建DataTable接收数据
            DataTable dt = HuaXingHelper.HuaXingAdapter(sql, null);

            //将接收到的数据绑定到DataGridView上
            dataGridView1.DataSource = dt;
            //更改表头信息
            if (dt.Rows.Count > 0)
            {
                dataGridView1.Columns[0].HeaderText = "班级编号";
                dataGridView1.Columns[1].HeaderText = "班级名称";

            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值