• C#中操作数据库技术之ExecuteNonQuery用法


    最近在补基础知识,刚好补到C#中对数据库操作的一些技术,今天学习了ExecuteNonQuery的东西,看自己项目维护项目的代码和网上资料查询,基本上搞懂了ExecuteNonQuery的用法,小小的做个总结,供以后查阅。

    ExecuteNonQuery方法主要用来更新数据,当然也可以用来执行目标操作(例如查询数据库的结构或者创建诸如表等的数据库对象)。通常用它来执行insert、update、delete语句,在不使用Dataset的情况下更改数据库中的数据。select语句不适合ExecuteNonQuery()方法。

    一、首先,来看看ExecuteNonQuery的返回值:

        1. 对于Update、insert、Delete语句执行成功是返回值为该命令所影响的行数,如果影响的行数是0,则返回值就是0;

        2. 对于所有其他类型的语句,返回值为-1;

        3. 如果发生回滚,返回值也为-1;

        4. 我们一般对于更新操作,通过判断返回值是否大于0,这个是没有问题的。但是对于其他的操作【如对数据结构的操作(建表等)】如果操作成功返回值却是-1,但是要注意一下啊,例如给数据库添加一个新表,创建成功返回-1,如果操作失败就会发生异常,所有执行这种操作最好用Try,Catch语句来捕捉异常。

    二、 command对象通过ExecuteNonQuery方法更新数据库的过程非常简单,步骤如下:

        1. 创建数据库连接;

        2. 创建Command对象,并指定一个SQL Inser、Update、Delete查询或者存储过程;

        3. 把Command对象依附到数据库连接上;

        4. 调用ExecuteNonQuery()方法;

        5. 关闭连接。

    三、代码示例使用方法:

        1. 首先是一个很简单的类,里面提供了如何用command对象通过ExecuteNonQuery方法跟新数据库。

    public class ExecuteNonQueryClas
        {
            private static string connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
    
            //as this method provided static method, set the constructor to priviate to prevent create instance with 'new ExecuteNonQuery()'
            private ExecuteNonQueryClas()
            {
    
            }
    
            public static int ExecuteNonQuery(string commandText)
            {
                return ExecuteNonQuery(commandText, (SqlParameter[])null);
            }
    
            public static int ExecuteNonQuery(string commandText,SqlParameter[] commandParams)
            {
                //if connectionString is null, then throw exception
                if(connectionString == null || connectionString.Length == 0)
                    throw new ArgumentNullException("connectionString");
                
                using(SqlConnection conn = new SqlConnection(connectionString))
                {
                    SqlCommand cmd = new SqlCommand(commandText,conn);
                    if (conn.State != ConnectionState.Open)
                        conn.Open();
    
                    //check if the commandParams is not null, then attach params to command
                    if(commandParams !=null)
                      AttachParameters(cmd,commandParams);
    
                    int recordsAffected = cmd.ExecuteNonQuery();
    
                    return recordsAffected;
                }
    
            }
    
            private static void AttachParameters(SqlCommand cmd,SqlParameter[] commandParams)
            {
                if (cmd == null) throw new ArgumentException("command");
                if (commandParams != null)
                {
                    foreach (SqlParameter p in commandParams)
                    {
                        if (p != null)
                        {
                            //// Check for derived output value with no value assigned
                            if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) && (p.Value == null))
                            {
                                p.Value = DBNull.Value;
                            }
                            cmd.Parameters.Add(p);
                        }
                    }
                }
            }
        }
    View Code

        2. 在主函数中的调用:

    static void Main(string[] args)
            {
                string userName = Console.ReadLine();
                string loginId = "user";
                string sqlString = "update Users set UserName = @name where LoginID= @loginID";
                SqlParameter[] parms ={
                                          new SqlParameter("@name",userName),
                                          new SqlParameter("@loginID",loginId)
                                           
                                      };
    
                int rlt = ExecuteNonQueryClas.ExecuteNonQuery(sqlString,parms);
    
                Console.WriteLine(rlt);
                Console.Read();
            }
    View Code

       好啦, 上面就是使用ExecuteNonQuery方法最简单的介绍和示例。

  • 相关阅读:
    Ad hoc access to OLE DB provider 'Microsoft.ACE.OLEDB.12.0' has been denied. You must access this provider through a linked server.
    阻塞问题:会话是sleeping的,但是open_tran 不是0
    windows Server DNS服务器配置
    内存缺页
    "ros::NodeHandle"的用法:全局vs.私有
    python 判断当前执行用户是否是 root 用户
    docker 安装及启动 postgresql 及navicat 连接
    Mac 在环境变量中隐藏密码或者密钥等信息
    磁盘空间不足导致虚拟机无法启动
    VirtuaBox 下安装 Centos8 无法上网
  • 原文地址:https://www.cnblogs.com/erhanhan/p/8270052.html
Copyright © 2020-2023  润新知