机房重构错误----必须声明标量变量和SQLHelper的使用

简介: 机房重构错误----必须声明标量变量和SQLHelper的使用

机房重构到现在已经实现了几个功能了,可以说非常缓慢了,但是还是遇到了不少的问题,这次遇到的这个问题问了几个师哥都没有解决掉,搁置了一个突然就感觉开窍了,先来看问题:这个实在添加学生信息的功能出现的问题,下图:


636890807b53780c1fccb6bc3cf726ff_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTMwOTE1NQ==,size_16,color_FFFFFF,t_70.png


它显示的问题是必须声明标量变量,看着标量变量可能大多数人都会想到是不是实体层没有定义,或者是哪个层少写了,我也是这么想的,所以一开始我就把能涉及到的层全都检查了一遍,但是还是不行,还是报同样的错误,问了其他人也没有想法了,然后突然想到师父提到的sqlhelper 的问题,因为SQLHelper的问题一直都是很模糊的,昨天刚好师父给讲了讲,什么时候要调用什么样方法,增删改查要判断好 ,想到是不是SQLHelper是不是调用错了,然后就尝试了改了一下,没想到居然成功了,看了之前的代码果然是调用了错误的方法,本来是像要往数据库里面添加数据的,但是却调用了查询的方法,自然是不会成功了,所以只在D层把调用SQL Helper的方法改了一下,就好了!增加用户详细博客看这里:https://blog.csdn.net/weixin_45309155/article/details/116275530


接下来我们说一下SQLHelper的问题,看它的名字翻译过来就是SQL的帮助者,跟第一次机房中的Moudle模块很像,我们把它写好之后就不用改了,在其他的窗体中只需要调用就好了,SQLHelper中可以很多的方法,在机房重构中,我们只用到了增删改查,所以我们先建4个方法


打开数据库


public class SQLHelper
    {
        private SqlConnection conn = null;//定义数据连接
        private SqlCommand cmd = null;//指定能再数据库中执行操作  命令
        private SqlDataReader sdr = null;//定义一个读取数据流变量,从数据库中读取
        public SQLHelper ()
        {
            //连接数据库
            string connStr = ConfigurationManager.AppSettings["conStr"];
            conn = new SqlConnection(connStr);//实例化连接数据库
        }
        #region 打开数据库
        private SqlConnection GetConn()
        {
            if (conn.State==System.Data.ConnectionState.Closed)//如果数据库连接为关闭,则打开
            {
                conn.Open();
            }
            return conn;
        }
        #endregion


增删改


/// <summary>
        /// 执行带参数的增删改SQL语句或存储过程
        /// </summary>
        /// <param name="cmdText">执行带参数的增删改SQL语句或存储过程</param>
        /// <param name="paras"></param>
        /// <param name="ct">命令类型</param>
        /// <returns></returns>
        public int ExecuteNonQuery(string cmdText, SqlParameter[]paras,CommandType ct)//parameter意思为参数
        {
            int res;
            using (cmd = new SqlCommand(cmdText, GetConn())) //将sql语句作为参数能够防止sql注入
            {
                cmd.CommandType = ct;//命令类型为ct
                cmd.Parameters.AddRange(paras);//添加参数
                res = cmd.ExecuteNonQuery();
            }
            cmd.Parameters.Clear();
            return res;
        }
        /// <summary>
        /// 执行不带参数的增删改SQL语句或存储过程
        /// </summary>
        /// <param name="cmdText"></param>
        /// <param name="ct"></param>
        /// <returns></returns>
        public int ExecuteNonQuery(string cmdText,CommandType ct)
        {
            int res;
            try
            {
                SqlCommand cmd = new SqlCommand(cmdText, GetConn());
                cmd.CommandType = ct;
                res = cmd.ExecuteNonQuery();
            }
            catch(Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conn.State==ConnectionState.Open)
                {
                    conn.Close();
                }
            }
            return res;
        }
        #endregion



/// <summary>
       /// 执行带参数的查询SQL语句或存储过程
       /// </summary>
       /// <param name="cmdText">查询SQL语句或存储过程</param>
       /// <param name="paras"></param>
       /// <param name="ct">命令类型</param>
       /// <returns></returns>
        public DataTable ExecuteQuery(string cmdText,SqlParameter[]paras,CommandType ct)
        {
            DataTable dt = new DataTable();//实例化数据表
            cmd = new SqlCommand(cmdText, GetConn());//实例化一个命令  cmdtext为传进来的sql命令,getconn为一个打开状态的数据库连接
            cmd.CommandType = ct;
            cmd.Parameters.AddRange(paras);//将要查询的数据放入查询语句中  Parameters参数
            using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                dt.Load(sdr);
            }
            return dt;
        }


补充:在 SqlHelper 类中实现的方法包括:

ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader。此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集。

ExecuteDataset。此方法返回DataSet对象,该对象包含由某一命令返回的结果集。

ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。

ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开SqlDataReader对象,以便最有效地管理与阅读器关联的连接的有效期。


相关文章
|
8月前
|
SQL 负载均衡 数据可视化
第六章:参数和变量
第六章:参数和变量
460 1
|
14天前
|
C#
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
C#学习相关系列之数据类型类----嵌套类和嵌套方法(三)
|
7月前
|
SQL 关系型数据库 MySQL
可以使用SQL语句来声明变量、设置自变量以及根据计算结果赋值
可以使用SQL语句来声明变量、设置自变量以及根据计算结果赋值
66 3
函数的“定义”和‘声明’并不是同一回事
函数的“定义”和‘声明’并不是同一回事
53 0
|
C语言
复习C部分:1.第一个C语言项目 2.初识数据类型 3.初识数据类型----变量和常量 4.初识变量的作用域和生命周期
复习C部分:1.第一个C语言项目 2.初识数据类型 3.初识数据类型----变量和常量 4.初识变量的作用域和生命周期
71 0
复习C部分:1.第一个C语言项目 2.初识数据类型 3.初识数据类型----变量和常量 4.初识变量的作用域和生命周期
|
存储 自然语言处理 安全
【C++】C++入门 --- 命名空间 | 输入输出 | 缺省函数 | 函数重载 | 引用 | 内联函数 | auto关键字 | 基于范围的for循环 | 指针空值
命名空间 | 输入输出 | 缺省函数 | 函数重载 | 引用 | 内联函数 | auto关键字 | 基于范围的for循环 | nullptr
140 0
【C++】C++入门 --- 命名空间 | 输入输出 | 缺省函数 | 函数重载 | 引用 | 内联函数 | auto关键字 | 基于范围的for循环 | 指针空值
|
SQL
SQL*Plus中替换变量与定义变量
替换变量 SQL*Plus中的替换变量又叫替代变量,它一般用来临时存储相关数据;在SQL语句之间传递值。一般使用&或&&前缀来指定替换变量. 关于使用替换变量,一般是利用其创建通用的脚本或达到和用户交换目的。
1185 0

热门文章

最新文章