ado.net

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

Ado.net

程序要和数据库交互要通过ADO.net进行,通过ADO.net就能在程序中执行SQL了。ADO.net中提供了对各种不同数据的统一操作接口

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

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

正式生产的时候附加到SQLServer上、修改连接字符串即可,除此之外没有任何的区别,在“数据库”节点上右键“附加”;在数据库节点上→ 任务→分离就可以得到可以拷贝的mdf文件

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

连接SQLServer

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

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

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

执行简单的Insert语句

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

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

Using(SqlCommand cmd=conn.CreateCommand())

{cmd.CommandText=”Insert  into  T_User(UserName.Password)  value(‘admin’,’88888’)”;

cmd.ExecuteNonQuery();

}

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

常犯错:

String username=’text’;

……..

cmd.CommandText=”Insert  into  T_User(UserName,Password)  values(username,’888888’)”;

执行查询

执行有多行结果集的用ExecuteRead

SqlDataReader  reader=cmd.ExecuteReader();

While(reader.Read())

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

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

ExecuteScalar

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

         Cmd Commandtext=”select  count(*)  from  T_User”;

         Int i=convert  ToInt32(cmd.ExcuteScalar());

         cmd.CommandText=”select  getdate()”;

         DateTime  dt=convert.ToInt32(cmd.ExcuteSalar());

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

         Cmd CommandText=”Insert  into  T_User(UserName,Password)  ouput  inserted.Id value(‘admin’,’88888’)”;

         Int i=convert.ToInt32(cmd.ExecuteSalar())

SQL注入攻击

cmd.Parameters.Add(new  SqlParameter(“UserName”,username));替换@UserName

查询参数

SQL语句使用@UserName表示“此处用参数代替”,向SqlCommand的Parameters中添加参数

         Cmd。CommandText=”select  *  from  T_Users  where  UserName=@UserName  and  Password=@Password”;

Cmd.Parameters.Add(newSqlParameter(”UserName”,admin));

cmd.Parameters.Add(new SqlParameter(“Password”,password));

参数在SQLServer内部不是简单地字符串替换,SQlserver直接用添加的值进行数据比较,因此不会有注入漏洞攻击。

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

原文地址:https://www.cnblogs.com/qwsdxz/p/3186571.html