zoukankan      html  css  js  c++  java
  • 数据库操作

    数据库操作:ADO.NET

    一:需要用到命名空间:using system.Data;和 using system.Data.SqlClient;

    using system.Data.OleDb或ODBC是通用的数据访问类,所有数据库都可以用OleDb,SqlClient针对SQL优化的数据访问类。

    ODBC--open database connection 开放式数据互联。(慢,需要配置,现在基本不用了,一般是用OleDb)。

    二:步骤

    1.编写连接字符串,建立连接对象:建一个通向数据库的通道。

    2.打开通道

    3.操作数据库

    4.关闭通道

    三:类及使用

    连接字符串:server=.;(本机) database=mydb;(数据库名) uid=sa;(用户名) pwd=123;(密码)

    分号隔开,不加引号,如果没密码等号结束就可以了

    (一)连接对象:SqlConnection:连接数据库的类

    1.构造函数:SqlConnection();或SqlConnection(connectionString);

    2.属性:ConnectionString和state

    3.方法:打开open() 关闭close()
    conn.CreateCommand();生成一个通过本链接对象来访问数据库的SqlCommand实例。

    可以这样用:SqlCommand cmd = conn.CreateCommand();

    (二) 命令对象

    SqlCommand:数据库操作的命令对象

    1.构造函数
    SqlCommand(); 推荐
    SqlCommand(sql)
    SqlCommand(sql,连接对象)

    2.属性
    CommandText:字符串类型,要执行的SQL命令(SQL语句,存储过程)
    commandType: 枚举类型,CommandType.Text执行的是SQL语句,CommandType.StoredProcedure执行的是存储过程
    Connection:SqlConnection类型,通过哪个连接访问数据库
    Parameters:为SQL命令里的局部变量赋值

    3.方法
    ExecuteNonQuery();执行增删改的方法,返回影响的行数
    ExecuteReader();执行查询的方法,返回SqlDataReader对象,用来执行查询。
    ExecuteScalar();返回首行首列object类型,一般用于执行统计查询

    (三)读取器对象

    获得数据库中的数据,它在内存中只占用一条数据的空间。SqlDataReader

    1.构造函数:
    构造函数不是public,无法new出来。它只有一种实例化方式:SqlDataReader dr = cmd.ExecuteReader();

    2.属性:
    HasRows:返回bool型数据,判断读取器是都能读出数据

    3.方法:
    Read();读一行,然后指向下一行
    Read();把数据读取到SqlDataReader对象中来,如果成功返回true,如果失败返回false;
    dr["列名"] dr["索引号"] :读取内存中当前SqlDataReader对象中的某列数据,读出来是Object类型。
    dr.GetString(索引号), dr.GetInt(索引号); 也是读,用的少
    close();关闭读取器。

    四:SQL注入攻击:

    原理:用户可以巧妙的编写一段输入代码,与程序中的SQL语句产生匹配,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL注入。
    规避办法:
    1.单引号替换为双引号。
    2.修改查询语句,使用SQLsever的局部变量来传递参数(cmd.Parameters.AddWithValue)
    cmd.Parameters.AddWithValue(局部变量,参数)

    五:如何调用存储过程?
    1.把commandText赋为存储过程的名;
    2.把commandType赋为CommandType.StoredProcedure;
    3.使用cmd.Parameters.AddWithValue()为存储过程参数赋值。

    六:面向对象设计的六大原则:
    1.单一职责:就一个类而言,应该只专注于做一件事和仅有一个引起它变化的原因。
    2.里氏代换:很严格的原则,规则是子类必须能够替换基类,否则不应当设计为其子类。也就是说,子类只能去扩展基类,而不是隐藏或覆盖基类。
    3.依赖倒转:“设计要依赖于抽象而不是具体化”。换句话说就是设计的时候我们要用抽象来思考,而不是一上来就开始划分我需要哪些哪些类,因为这些是具体。
    4.开闭原则:对扩展开放,对修改关闭。
    5.接口分离:使用多个专一功能的接口比使用一个的总接口总要好。
    6.迪米特法则:对象与对象之间应该使用尽可能少的方法来关联,避免千丝万缕的关系。

    七:装箱与拆箱:

    值类型数据与引用类型数据间的转换

    装箱,值类型变为引用类型:int n = 20; object obj = n; 把数据由栈空间转移到堆空间。
    拆箱,引用类型变为值类型:int m = (int)obj; 把数据由堆空间转到栈空间。

    有什么坏处?
    装箱:占空间,占时间,运行慢。 拆箱:占时间,可能出现类型异常。

    八:异常处理:

    异常:不一定是错误,与正常情况有差异。
    处理异常:
    try //试一试
    {
    可能会出现异常的代码
    }
    catch (异常类型 异常对象) //捕获
    {
    一旦发生异常,将会进入此处
    对错误信息进行处理,比如写日志文件或者友好显示出来。
    }
    finally //最终
    {
    不管上面的执不执行一定会执行,一般写关闭数据库连接
    }

    九:其它小知识点:

    属性简单的写法:public string name(get;set;)

    泛型集合:List<>; List<info>; 只能放info的,list出来不用强转,因为它里面必须放指定类型的。

    十:数据访问相关类的封装:连接类,实体类,数据访问类

    几个类的网盘连接:http://pan.baidu.com/s/1eQnG7pK

  • 相关阅读:
    AJAX需要注意的
    SEO 搜索引擎优化
    jQuery 插件
    CSS BFC和IE Haslayout
    jQuery 插件开发
    jQuery Ajax
    jQuery 工具函数
    jQuery 动画效果
    jQuery 高级事件
    jQuery 事件对象
  • 原文地址:https://www.cnblogs.com/Alvin-ftd/p/4045628.html
Copyright © 2011-2022 走看看