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

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();

        }

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

  5BeginExecuteNonQuery() 异步版ExecuteNonQuery()

  6EndExecuteNonQuery()  异步版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();     //正式关闭连接

        }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值