首页 > 代码库 > SqlCommand类

SqlCommand类

一、常用属性

  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语句            //SqlCommand的SqlConnection实例对象            Console.WriteLine(cmd.Connection.ConnectionString);     //"server=.;database=JunTest;uid=sa;pwd=123";            //设置参数值            cmd.Parameters.Add("@Id", SqlDbType.Int);            cmd.Parameters["@Id"].Value = http://www.mamicode.com/1;"@Id"].Value);     //输出1            conn.Open();            conn.Close();            Console.ReadKey();        }

二、常用方法

  1、ExecuteNonQuery()  增删改操作

  增、删、改都是这个:

        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 = http://www.mamicode.com/1;                    //设置参数值>

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

        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字段的值

  首先建一张表如下:

  

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

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

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

        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();     //正式关闭连接        }    }

  输出结果如下: