zoukankan      html  css  js  c++  java
  • 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培训、期待与您交流! ----------------------

  • 相关阅读:
    Java实现 LeetCode 56 合并区间
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
  • 原文地址:https://www.cnblogs.com/qwsdxz/p/3186571.html
Copyright © 2011-2022 走看看