zoukankan      html  css  js  c++  java
  • Winform开发之SqlCommand常用属性和方法

    SqlCommand类表示要对 SQL Server 数据库执行的一个 Transact-SQL 语句或存储过程,有若干个属性和若干个方法,具体的各类方法使用可以从msdn上找到。

    这里介绍几个常用东东

    一、属性

         CommandText   获取或设置要对数据源执行的 Transact-SQL 语句、表名或存储过程。
      CommandTimeout 获取或设置在终止执行命令的尝试并生成错误之前的等待时间。 
      CommandType   获取或设置一个值,该值指示释 CommandText 是SQL语句,存储过程还是表操作。
      Connection     获取或设置 SqlCommand 的此实例使用的 SqlConnection。
      Parameters     获取 SqlParameterCollection。
      Transaction     获取或设置将在其中执行 SqlCommand 的 SqlTransaction。

    static void Main(string[] args)
            {
                string str = "server=.;database=JunTest;uid=sa;pwd=123";
                SqlConnection conn = new SqlConnection(str);
                SqlCommand 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语句 cmd.CommandText=CommandType.StoredProcedure/CommandType.Text
                //SqlCommand的SqlConnection实例对象
                Console.WriteLine(cmd.Connection.ConnectionString);     //"server=.;database=JunTest;uid=sa;pwd=123";
                //设置参数值
                cmd.Parameters.Add("@Id", SqlDbType.Int);
                cmd.Parameters["@Id"].Value = 1;
                Console.WriteLine(cmd.Parameters["@Id"].Value);     //输出1
                conn.Open();
                conn.Close();
                Console.ReadKey();
            }

    二、方法

    1、SqlCommand.ExecuteNonQuery 方法

    对数据库的增删改都用这个操作,只是里面调用的sql语句和存储过程不同

    static void Main(string[] args)
            {
                string str = "server=.;database=JunTest;uid=sa;pwd=123;";
                SqlConnection conn = new SqlConnection(str);        //创建连接
                SqlCommand cmd = conn.CreateCommand();              //创建命令
                cmd.CommandText = "Update Person Set PersonName = 'Ado.net修改' WHERE PersonId = @Id";    //设置操作语句
                cmd.Parameters.Add("@Id", SqlDbType.Int);           //添加参数,说明类型
                cmd.Parameters["@Id"].Value = 1;                    //设置参数值
                conn.Open();                                        //打开连接
                int i = cmd.ExecuteNonQuery();                      //执行命令,ExecuteNonQuery由名称看出,只能用于非查询语句
                conn.Close();                                       //关闭连接
                Console.WriteLine(i);                               //输出影响行数
                
                Console.ReadKey();
            }

    2、ExecuteScalar()

    创建一个 SqlCommand,然后使用 ExecuteScalar 执行它。 向该示例传递两个字符串,一个字符串表示要插入到表中的新值,另一个字符串用于连接至数据源。 如果已插入新行,则此函数会返回新的“Identity”列值,如果失败,则返回 0。

    static public int AddProductCategory(string newName, string connString)
    {
        Int32 newProdID = 0;
        string sql =
            "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
            + "SELECT CAST(scope_identity() AS int)";
        using (SqlConnection conn = new SqlConnection(connString))
        {
            SqlCommand cmd = new SqlCommand(sql, conn);
            cmd.Parameters.Add("@Name", SqlDbType.VarChar);
            cmd.Parameters["@name"].Value = newName;
            try
            {
                conn.Open();
                newProdID = (Int32)cmd.ExecuteScalar();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        return (int)newProdID;
    }

    3、ExecuteReader() 

    static void Main(string[] args)
            {
                string str = "server=.;database=JunTest;uid=sa;pwd=123;";
                SqlConnection conn = new SqlConnection(str);        //创建连接
                SqlCommand cmd = conn.CreateCommand();              //创建命令
                cmd.CommandText = "SELECT * FROM Person";           //设置操作语句
                conn.Open();                                        //打开连接
                //SqlDataReader读取数据
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        Console.WriteLine(reader[0] + ":" + reader[1]);     //输出当前行的第一列,第二列数据
                    }
                }
    
                cmd.CommandText = "SELECT Count(*) FROM Person";
                object obj = cmd.ExecuteScalar();                   //仅查询第一行第一列
                Console.WriteLine((int)obj);
                conn.Close();                                       //关闭连接
                
                Console.ReadKey();
            }

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

    数据库字段存的就是xml

    <Article>
      <author age="30">张三</author>
      <length>12000</length>
      <price>42</price>
    </Article>
    static void Main(string[] args)
            {
                string str = "server=.;database=JunTest;uid=sa;pwd=123;";
                SqlConnection conn = new SqlConnection(str);        //创建连接
                SqlCommand cmd = conn.CreateCommand();              //创建命令
                cmd.CommandText = "SELECT * FROM Person";           //设置操作语句
                conn.Open();                                        //打开连接
    
                cmd.CommandText = "SELECT Top 1 ArticleInfo FROM Article";  //查询XML字段
                using (XmlReader reader = cmd.ExecuteXmlReader())           //由Command实例返回XmlReader的实例
                {
                    while (reader.Read())
                    {
                        if (reader.Name == "author")
                        {
                            Console.WriteLine(reader.ReadInnerXml());       //输出张三
                        }
                    }
                }
                conn.Close();       
    
                Console.ReadKey();
            }

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

      5、BeginExecuteNonQuery() 异步版ExecuteNonQuery()

      6、EndExecuteNonQuery()  异步版ExecuteNonQuery()

    class Program
        {
            static void Main(string[] args)
            {
                string str = "server=.;database=JunTest;uid=sa;pwd=123;Asynchronous Processing=true";
                SqlConnection conn = new SqlConnection(str);            //创建连接
                SqlCommand cmd = conn.CreateCommand();                  //创建命令
                cmd.CommandText = "INSERT INTO Person VALUES(11,'郭嘉')";    //设置操作语句
                conn.Open();                                            //打开连接
                cmd.BeginExecuteNonQuery(BeginCallback, cmd);           //异步执行语句
                Console.WriteLine("不管你执没执行完,我继续做我的事!");
    
                Console.ReadKey();
            }
    
            public static void BeginCallback(IAsyncResult result)
            {
                Console.WriteLine("正在执行SQL命令!");
                SqlCommand cmd = result.AsyncState as SqlCommand;   //获得异步传入的参数
                Console.WriteLine("成功执行命令:" + cmd.CommandText);
                Console.WriteLine("本次执行影响行数为:"  + cmd.EndExecuteNonQuery(result));
                Console.WriteLine("关闭连接!");
                cmd.Connection.Close();     //正式关闭连接
            }
        }

    本文一部分来自msdn,一部分来自逆心的博客

  • 相关阅读:
    js面向对象的程序设计 --- 上篇(理解对象)
    js基础 之 引用类型
    js基础之--变量 作用域和内存问题
    js基础心得
    一些转载的知识点
    linux打印指定的行的内容
    R画柱形图和箱线图
    Meerkat软件
    bam文件格式说明
    STAR软件的学习
  • 原文地址:https://www.cnblogs.com/yieryi/p/4619213.html
Copyright © 2011-2022 走看看