zoukankan      html  css  js  c++  java
  • C#操作DbCommand类

    一、常用属性

    名称 说明
    CommandText  获取或设置要对数据源执行的 Transact-SQL 语句、表名或存储过程
    CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间
    CommandType 获取或设置一个值,该值指示释 CommandText 是SQL语句,存储过程还是表操作
    Connection 获取或设置 DbCommand 的此实例使用的 DbConnection
    Parameters 获取 DbParameterCollection
    Transaction 获取或设置将在其中执行 DbCommand 的 DbTransaction
    using MySql.Data.MySqlClient;
    using System;
    using System.Data.Common;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};",
                                           "localhost", 3306, "wisdompurchase", "root", "1234");
                DbConnection conn = new MySqlConnection(str);    //创建连接
                                                                 //连接的数据库名称
                DbCommand cmd = conn.CreateCommand();
                cmd.CommandText = "Update Person Set Name = 'Ado.net修改' WHERE Id = @Id";    //设置操作语句
                //看看默认的发生错误等待时间(秒)
                Console.WriteLine(cmd.CommandTimeout);  //30
                //指明CommandText是SQL语句,存储过程还是表操作。枚举类型,转到定义可看
                Console.WriteLine(cmd.CommandType);   //输出 Text 表示这是一条SQL语句
                //SqlCommand的SqlConnection实例对象
                Console.WriteLine(cmd.Connection.ConnectionString);     //"server=.;database=JunTest;uid=sa;pwd=123";
                //设置参数值
                cmd.Parameters.Add(new MySqlParameter("@Id", 1));
                Console.WriteLine(cmd.Parameters["@Id"].Value);     //输出1
    
                conn.Open();
                conn.Close();
                Console.ReadKey();
            }
        }
    }
    View Code

    二、常用方法

      1、ExecuteNonQuery()  增删改操作

      增、删、改都是这个:

    using MySql.Data.MySqlClient;
    using System;
    using System.Data.Common;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};",
                                           "localhost", 3306, "wisdompurchase", "root", "1234");
                DbConnection conn = new MySqlConnection(str);    //创建连接
                                                                 //连接的数据库名称
                DbCommand cmd = conn.CreateCommand();              //创建命令
                cmd.CommandText = "Update t_s_base_user Set realname = '李伟斌' WHERE Id = @Id";    //设置操作语句
                cmd.Parameters.Add(new MySqlParameter("@Id",MySqlDbType.VarChar));    //设置参数值
                cmd.Parameters["@Id"].Value = 1;
                conn.Open();                                        //打开连接
                int i = cmd.ExecuteNonQuery();                      //执行命令,ExecuteNonQuery由名称看出,只能用于非查询语句
                conn.Close();                                       //关闭连接
                Console.WriteLine(i);                               //输出影响行数
    
                Console.ReadKey();
            }
        }
    }
    View Code

      2、ExecuteScalar()   返回第一行第一列
      3、ExecuteReader()  创建一个SqlDataReader用于读取数据

    using MySql.Data.MySqlClient;
    using System;
    using System.Data.Common;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};",
                                           "localhost", 3306, "wisdompurchase", "root", "1234");
                DbConnection conn = new MySqlConnection(str);    //创建连接
                                                                 //连接的数据库名称
                DbCommand cmd = conn.CreateCommand();              //创建命令
                cmd.CommandText = "SELECT * FROM `t_s_base_user` LIMIT 5";           //设置操作语句
                conn.Open();                                        //打开连接
                //SqlDataReader读取数据
                using (DbDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Console.WriteLine(reader[0] + ":" + reader[1]);     //输出当前行的第一列,第二列数据
                    }
                }
    
                cmd.CommandText = "SELECT Count(*) FROM `t_s_base_user`";
                object obj = cmd.ExecuteScalar();                   //仅查询第一行第一列
                Console.WriteLine(Convert.ToInt32(obj));
                conn.Close();                                       //关闭连接
    
                Console.ReadKey();
            }
        }
    }
    View Code

      4、ExecuteXmlReader()  返回System.XmlReader实例,用于读取SQLServer中的XML字段的值

      首先建一张表如下:

        

    /*
    SQLyog Ultimate v11.33 (64 bit)
    MySQL - 5.7.17-log 
    *********************************************************************
    */
    /*!40101 SET NAMES utf8 */;
    
    insert into `article` (`ArticleId`, `ArticleInfo`) values('1','<Article><author age="30">张三</author><length>12000</length><price>42</price></Article>');
    ArticleSql

      其中ArticleInfo字段的数据类型为xml,值为:

      <Article><author age="30">张三</author><length>12000</length><price>42</price></Article>

      下面,我们使用ExecuteXmlReader()读取出author的值:  

    using System;
    using System.Data.Common;
    using System.IO;
    using System.Xml;
    
    namespace ConsoleApp
    {
        public static class ExtensionDbCommand
        {
            public static XmlReader ExecuteXmlReader(this DbCommand cmd)
            {
                object obj = cmd.ExecuteScalar();                   //仅查询第一行第一列
                if (obj == null) return null;
                StringReader strRdr = new StringReader(Convert.ToString(obj));
                return XmlReader.Create(strRdr);
            }
        }
    }
    ExtensionDbCommand
    using MySql.Data.MySqlClient;
    using System;
    using System.Data.Common;
    using System.Xml;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};",
                                           "localhost", 3306, "wisdompurchase", "root", "1234");
                DbConnection conn = new MySqlConnection(str);    //创建连接
                                                                 //连接的数据库名称
                DbCommand cmd = conn.CreateCommand();              //创建命令
                conn.Open();                                        //打开连接
                cmd.CommandText = "SELECT ArticleInfo FROM Article LIMIT 1";  //查询XML字段
                using (XmlReader reader = cmd.ExecuteXmlReader())           //由Command实例返回XmlReader的实例
                {
                    while (reader!=null && reader.Read())
                    {
                        if (reader.Name == "author")
                        {
                            Console.WriteLine(reader.ReadInnerXml());       //输出张三
                        }
                    }
                }
                conn.Close();
                Console.ReadKey();
            }
        }
    }
    Program

     还有就是以上这些方法的异步版本,本处仅以以下两个方法示例:

      5、BeginExecuteNonQuery() 异步版ExecuteNonQuery()

      6、EndExecuteNonQuery()  异步版ExecuteNonQuery()

    using MySql.Data.MySqlClient;
    using System;
    using System.Data.Common;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                string str = string.Format("Server={0};Port={1};Database={2};Uid={3};Pwd={4};",
                                           "localhost", 3306, "wisdompurchase", "root", "1234");
                DbConnection conn = new MySqlConnection(str);    //创建连接
                                                                 //连接的数据库名称
                MySqlCommand cmd = (MySqlCommand)conn.CreateCommand();                  //创建命令
                cmd.CommandText = "INSERT INTO `article` VALUES(2,'郭嘉')";    //设置操作语句
                conn.Open();                                            //打开连接
                cmd.BeginExecuteNonQuery(BeginCallback, cmd);           //异步执行语句
                Console.WriteLine("不管你执没执行完,我继续做我的事!");
    
                Console.ReadKey();
            }
    
             static void BeginCallback(IAsyncResult result)
            {
                Console.WriteLine("正在执行SQL命令!");
                MySqlCommand cmd = result.AsyncState as MySqlCommand;   //获得异步传入的参数
                Console.WriteLine("成功执行命令:" + cmd.CommandText);
                Console.WriteLine("本次执行影响行数为:" + cmd.EndExecuteNonQuery(result));
                Console.WriteLine("关闭连接!");
                cmd.Connection.Close();     //正式关闭连接
            }
        }
    }
    Program
  • 相关阅读:
    es5核心技术
    es6 迭代器 和 生成器 学习笔记
    nodejs 基础学习笔记
    node 基本原理
    mac php7 连接数据库遇到的问题
    express ,koa1, koa2学习笔记
    mac mysql的安装
    webpack 给css添加前缀
    利用git将本地的代码同步到github上
    vuex 学习总结及demo
  • 原文地址:https://www.cnblogs.com/scmail81/p/9361636.html
Copyright © 2011-2022 走看看