• 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培训、期待与您交流! ----------------------

  • 相关阅读:
    bzoj 1057: [ZJOI2007]棋盘制作
    【NOIP2012】开车旅行
    bzoj 2326: [HNOI2011]数学作业
    一本通1527欧拉回路
    一本通1530 Ant Trip
    一本通1528单词游戏
    luogu1856
    CF1045G
    10.18模拟赛
    10.16模拟赛
  • 原文地址:https://www.cnblogs.com/qwsdxz/p/3186571.html
Copyright © 2020-2023  润新知