黑马程序员--ADO.Net中的知识点和难点

 1、 ADO.Net基础

程序要和数据库交互要通过ADO.Net进行,通过ADO.Net就能在程序中执行SQL了。

直接在项目中内嵌mdf文件的方式使用SQLServer数据库(基于服务的数据库)。mdf文件随着项目走,用起来方便,和在数据库服务器上创建数据没有什么区别,运行的时候会自动附加(Attach)。

双击mdf文件会在“服务器资源管理器”中打开,管理方式和在Mangement Studio没有什么本质区别,要拷贝mdf文件需要关闭所有指向mdf文件的连接。

 正式生产运行时附加到SQLServer上,修改连接字符串即可,除此之外没有什么区别,它在“数据库”节点上点右键“附加”;在数据库节点上找任务下的分离可以得到可以拷来拷去mdf文件。

用的时候要在控制台、WinForm项目中在Main函数最开始的位置加入备注中的代码。ASP.Net不需要。备注中的代码如下:

 string dataDir=AppDomain.CurrentDomain.BaseDirectory;

  if(dataDir.EndsWith(@"\bin\Debug\")||dataDir.EndsWith(@"\bin\Release\"))

  {

      dataDir=System.IO.Directory.GetParent(dataDir).Parent.Parent.FullName;

       AppDomain.CurrentDomain.SetData("DataDirectory",dataDir);

   }

2、连接SQLServer

连接字符串:程序通过连接字符串指定要连哪台服务器上的、哪个实例的哪个数据、用什么用户名密码等。

项目内嵌mdf文件形式的连接字符串"Data Source=.\SQLEXERPRESS;AttachDBFilename=|DataDirectory|\Database1.mdf;Integrated Security=True;User  Instance=True".  ".\SQLEXERPRESS"表示本机上的SQLEXERPRESS实例",如果数据库实例名不是SQLEXERPRESS,则需要修改。“Database1.mdf”为mdf的文件名。

ADO.Net中通过sqlConnection类创建到SQLServer的连接,sqlConnection代表一个数据库连接,ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理执行备注中的代码如果成功了就ok。

3、执行简单的Insert语句

sqlCommand表示向服务器提交的一个命令(SQL语句等)

CommandText属性为要执行的SQL语句,ExecuteNonQuery方法执行一个非查询语句(Update、Insert、Delete等)

 using(SqlCommand  cmd=conn.CreateCommand())

{

   cmd.CommandText="insert  into T_Users(UserName,Password) values('admin','888888');

   cmd.ExecuteNonQuery();

}

ExecuteNonQuery返回值是执行的影响行数

易错点:string username='test';

            .......

            cmd.CommandText="insert into T_Users(UserName,Password) values(username,'888888');

4、执行查询

 执行有多行结果集的用ExeccuteReader

SqlDataReader  reader=cmd.ExecuteReader();

.................

while(reader.Read())

{

   Console.WriteLine(reader.GetString(1));

}

reader的GetString、GetInt32等方法只接受整数参数, 也就是序号,用GetOrdinal方法根据列名动态得到序号。

5、ExecuteScalar

sqlCommand的ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中在第一行的第一列,因为不能确定返回值的类型,所以返回值是object类型。

cmd.CommandText="select count(*) from T_Users";  int i=Convert.ToInt32(cmd.ExecuteScalar());

cmd.CommandText="select getdate()";DateTime dt=Convert.ToDateTime(cmd.ExecuteScalar());

得到自动增长字段的主键值,在values关键词前加上output inserted.id,其中id为主键字段名。执行结果就是插入的主键值,用ExecuteScalar执行最方便。

cmd.CommandText="insert into T_Users(UserName,Password)output inserted.id values('admin','888888');

int i=Convert.ToInt32(cmd.ExecuteScalar());

6、SQL注入漏洞攻击

构造恶意的Password:'or'1'='1

if(reader.Read())

   Console.WriteLine("登录成功");

else

   Console.WriteLine("登录失败");

防范注入漏洞攻击的方法:不使用SQL语句拼接,通过参数赋值

总结:后面的练习题基本就是用的是前面的知识点,重点掌握前面的知识点。

通过今天的视频学习,感觉后面的习题有点小难度,要解决它,多看多练。

posted @ 2012-11-22 13:16  韩俊  阅读(945)  评论(0编辑  收藏  举报