C#执行数据数据库SqlCommand的返回值方法《新手学习数据库连接能避免的小坑》

**

首先常用的Sqlcommand对象方法

**
ExecuteNonQuery()方然用于增删改数据(返回影响数据库的行数)
ExecuteReader()方法用于查询多行多列(返回SqlDataReader)
ExecuteScalar()方法用于查询单行 (返回单行数据,可以是int或者是string,具体返回什么值要看数据库T-SQL查询的语句得出的数据类型)

下面来看一下具体怎么实现返回方法
先来看一下ExecuteNonQuery()方法用于增删改数据
有参有反的方法

		/// <summary>
        /// 数据库修改的方法
        /// </summary>
        /// <param name="sql">T-SQL增删改语句</param>
        /// <returns>返回影响多少行</returns>
        int XIU(string sql)
        {
            //创建连接字符串
            string str = "server=.;database=Library;uid=sa;";
            //调用连接字符串的对象;注意里面的参数是连接字符串
            SqlConnection con = new SqlConnection(str);
            //创建一个接收ExecuteNonQuery返回值的变量i
            int i = 0;
            try
            {
                //创建执行对象Sqlcommand
                SqlCommand cmd = new SqlCommand(sql, con);
                //打开连接
                con.Open();
                //调用方法并接收返回数据库所受影响的行数
                i = cmd.ExecuteNonQuery();
            }
            catch (Exception)
            {
                Console.WriteLine("程序错误");
                //throw;
            }
            finally
            {
                //关闭连接
                con.Close();

            }
            //返回接收影响的行数
            return i;
        }

接下来第二个ExecuteReader()方法用于查询多行多列
这是我创建的无反无参的方法
其他连接部分一样只是执行部分有所区别
占时还不知道怎样改成有参有反的方法

        /// <summary>
        /// 查询数据库的方法
        /// </summary>
        /// <param name="sql">T-SQL查询语句</param>
        void CHA()
        {
            string str = "server=.;database=Library;uid=sa;pwd=sasa";
            SqlConnection con = new SqlConnection(str);
            //请创建一个SqlDataReader  读取器类型
            SqlDataReader select = null;
            try
            {
                string sql = @"SELECT id,name,typeName,number,price 
                                   FROM dbo.Book B
                                   INNER JOIN dbo.Booktype K
                                   ON B.typeId=K.typeID";
                SqlCommand cmd = new SqlCommand(sql,con);
                con.Open();
                //用它接收返回的所有数据
                select=cmd.ExecuteReader();
                if (select.HasRows)
                {
                    Console.WriteLine("书号\t书名\t书类型\t数量\t价格");	
                    //循环接收并打印,记得数据的转换
                    while (select.Read())
                    {
                        int id = Convert.ToInt32(select["id"]);
                        string name = select["name"].ToString();
                        string typeName = select["typeName"].ToString();
                        int number = Convert.ToInt32(select["number"]);
                        double price = Convert.ToDouble(select["price"]);
                        Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}", id, name, typeName, number, price);
                    }
                }
            }
            catch (Exception)
            {
                Console.WriteLine("输入错误");
                //throw;
            }
            finally
            {
                //使用完后一定需要关闭,读取器的连接
                select.Close();
                con.Close();
            }
        }

ExecuteScalar()方法用于查询单行
第三个也是有参有反的方法
这个方法的代码量就少许多

        /// <summary>
        /// 查询返回单列
        /// </summary>
        /// <param name="sql">T-SQL查询单行单列语句</param>
        /// <returns>返回int类型</returns>
        int CHAd(string sql)
        {
            string str = "server=.;database=Library;uid=sa;pwd=sasa";
            SqlConnection con = new SqlConnection(str);
            int i = 0;
            try
            {
                SqlCommand cmd = new SqlCommand(sql,con);
                con.Open();
                i= Convert.ToInt32(cmd.ExecuteScalar());
            }
            catch (Exception)
            {
                Console.WriteLine("程序出错");
                //throw;
            }
            finally
            {
                con.Close();
            }

            return i;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值