黑马程序员 ado.net

本文通过 C# 代码示例介绍了如何使用 SqlConnection 进行数据库连接,并演示了多种方式来执行 SQL 查询,包括使用 SqlCommand 和 SqlDataAdapter 获取数据,同时讨论了如何避免 SQL 注入等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


class Program
    {
        static void Main(string[] args)
        {
            
            //Server=.;database=HeiMaBlog;uid=xx;pwd=xx;
            //Data Source=.;Initial Catalog=HeiMablog;Integrated security=True;  用window身份登录
            //Data Source=.;Initial Catalog=HeiMablog;user id=xx;password=xxx;	
            //server 和 data source数据库服务器在哪,dayabase用哪个数据库
            //server =./ip
            SqlConnection conn = new SqlConnection("Data Source= .;Initial Catalog=School;Integrated security=True");
            #region  command的对象获取一个数据
            /* //sqlConnection 连接数据库
            
            //比较消耗网络资源,时间,内存,因此要启用连接池,默认是启用的,Pooling
              
            SqlConnection conn = new SqlConnection("Data Source= .;Initial Catalog=School;Integrated security=True");
            //准备一个命令对象
            SqlCommand cmd = new SqlCommand();
            //设置查询语句
            string a = "select * from School";
            cmd.CommandText =a;
            //设置cmd的执行通道为conn对象
            cmd.Connection = conn;
            //打开连接数据库的通道
            conn.Open();//在命令对象执行之前打开通道再打开
            //输出sql语句执行的结果
             
            //常用的三个方法
            //ExecuteNonQuery()  执行对数据库的增删改,返回受影响的行
            //ExecuteReader()  执行查询,返回DataReader对象
            //ExecuteScalar() 执行查询,返回结果集的首行首列,如果查询结果为空,返回一个null
            // 
            //查询多行数据ExecuteRead()  执行查询,返回多行结果
            Console.WriteLine(cmd.ExecuteScalar().ToString());




            Console.ReadKey();
            //暂时关闭连接数据库通道,可以通过open()打开
            conn.Close();
            //表示当前对象可以被回收
            //conn.Dispose();
            //清空连接池,一般不用
            //SqlConnection.ClearAllPools();
            //SqlConnection.ClearPool(conn);*/
            #endregion


            #region 用DataRead的对象来获得多条数据
            /*
            SqlCommand com = conn.CreateCommand();//申明com并设置com的打开通道为conn
            com.CommandText = "select * from student";
            //com.Connection = conn;
            //conn.CreateCommand();//指定conn为command连接通道
            conn.Open();//打开conn连接通道//多次打开要报错,多次关闭不会报错


            //注 SqlDataReader仅有一个构造函数,不能new
            SqlDataReader dr = com.ExecuteReader();//申明DataRead对象来获取数据
            if (dr.HasRows)//判断dr的HasRows知道结果集有没有数据
            {
                while (dr.Read())//Read方法让读取器向前进一行,并且把这一行的数据装到当前对象了
                {
                    //推荐用下标的方式,字段/字段别名的方式最后还是调用的下标的方式
                    Console.WriteLine(dr[0]);//可以通过dr[字段/字段的别名]来获取该字段/字段的别名的值
                    //dr.Get   
                }
            }
            conn.Close();//在执行完毕后关闭连接通道,减少内存资源占用
            dr.Close();*/
            #endregion


            #region 用参数登录避免SQL注入漏洞攻击
            /*string name= Console.ReadLine();
            string paw=Console.ReadLine();
            SqlCommand cmd = new SqlCommand("select count(id) from Student where Name=@ass and pwd=@add ");
            //第一种写法
            SqlParameter sp = new SqlParameter("@ass", name);
            SqlParameter sp1 = new SqlParameter("@add", paw);
            cmd.Parameters.Add(sp);
            cmd.Parameters.Add(sp1);


            //第二种写法   普通登录项目必须第二种
            //特殊情况下会报错
            cmd.Parameters.Add(new SqlParameter("@ass", name));
            cmd.Parameters.Add(new SqlParameter("@add", paw));


            //第三种写法
            SqlParameter[] spa = new SqlParameter[]{
                new SqlParameter("@ass", name),
                new SqlParameter("@add", paw)
            };
            cmd.Parameters.AddRange(spa);
            //第四种写法
            cmd.Parameters.AddWithValue("@ass", name);
            cmd.Parameters.AddWithValue("@add", paw);


            //第五种写法    大型项目必须用   参数可以为输出参数
            SqlParameter spm = new SqlParameter("@ass",SqlDbType.NVarChar);//变量类型需与SQL里的该参数赋值的参数一致
            SqlParameter spm1 = new SqlParameter("@add", SqlDbType.Char);
            spm.Value = name;
            spm1.Value = paw;
            cmd.Parameters.Add(spm);
            cmd.Parameters.Add(spm1);*/
            #endregion


            #region  用DataAdapter获取多条数据
            SqlDataAdapter adapter = new SqlDataAdapter("select *from student",conn);//声明对象,并设置用conn通道打开数据库
            //可以不用手动打开与关闭连接通道
            DataSet ds = new DataSet();//声明数据临时存放的空间
            adapter.Fill(ds);//将数据存放到da对象中
            #endregion
            Console.ReadKey();
        }
    }
}
----------------------  ASP.Net+Unity开发 、. Net培训 、期待与您交流! ----------------------
详细请查看: http://edu.youkuaiyun.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值