ADO.NET

ADO.NET

 

 

 

在线对象:

Connection 用来和数据库建立连接

Command    表示执行的数据操作命令

Parameter  表示数据操作命令中的参数

DataReader 用来以只读只进方式读取数据

Transaction用来实现事务

DataAdapter用来为数据容器加载数据和把更新后的数据传回数据库

离线对象:

DataSet    数据容器,就好像一个数据库,容纳多个DataTable和关系

DataTable  数据容器,就好像一个数据表,又DataRowDataColunn构成

DataRow    代表DataTable中的一行记录

DataColumn 代表DataTable的列,就好像字段

DataView   和数据库的视图差不多,用来为一个DataTable建立多种视图

DataRelation 表示各个DataTable之间的关系,并提供浏览父表记录和子表记录的方式

Constraint 表示DataTable的主键约束和外键约束

二、命名空间

Using      System.Data

Using     System.Data.SqlClient

Using     System.Configuration;

三、基本链接

          //创建数据链接对象

SqlConnection sqlcon = new SqlConnection("server=.;dataBase=adoTest;uid=sa;pwd=10055154");

       //打开数据库

       sqlcon.Open();

       //创建Sql语句

       string sqlString = "select * from t1";

       //创建命名语句

       SqlCommand sqlCmd = new SqlCommand(sqlString,sqlcon);

       //创建数据集

       SqlDataAdapter sdr = new SqlDataAdapter(sqlCmd);

       DataSet ds = new DataSet();

       sdr.Fill(ds);

       //关闭数据库

       sqlcon.Close();

       GridView1.DataSource = ds;

       GridView1.DataBind();

四、操作数据库

关键字:

ExecuteReader():返回一行或多行。多用于SELECT查询数据

ExecuteNonQuery():对Connection执行SQL语句,并返回受影响的行数(int),多用于INSERT,UPDATE,DELETE,CREATE等操作

ExecuteScalar():返回单个值。返回结果集中第一行的第一列。忽略额外的列或行

1、查

SqlConnection con = new SqlConnection("server=.;dataBase=adoTest;uid=sa;pwd=10055154");

        con.Open();

        SqlCommand cmd = new SqlCommand("select * from t1 where address = @address",con);

        cmd.Parameters.AddWithValue("@address",DropDownList1.SelectedItem.Value);

        SqlDataReader dr = cmd.ExecuteReader();//******重点******//

        GridView1.DataSource = dr;

        GridView1.DataBind();

 

2、增、删、改

        SqlConnection sqlcon = new SqlConnection("server=.;dataBase=adoTest;uid=sa;pwd=10055154");

        sqlcon.Open();

        SqlCommand cmd = new SqlCommand("update t1 set age = 19 where name = @name",sqlcon);      //********增、删、改的不同只在于Sql语句的不同*****//

        cmd.Parameters.AddWithValue("@name","张三");

        cmd.ExecuteNonQuery();

        sqlcon.Close();

        ClientScript.RegisterClientScriptBlock(this.GetType(), "提示", "alert('修改成功');", true);

3、数据库链接状态判定

if (state == "Open")

            {

                Sqlcon.Close();//关闭数据库

                Sqlcon.Dispose();//释放连接占用的资源

                MessageBox.Show("连接已成功断开");

            }

             else

            {

                MessageBox.Show("当前连接为关闭状态");

            }

五、安全性

1、参数化SQL语句(防SQL注入式攻击)

SqlConnection sqlcon = new SqlConnection("server=.;dataBase=adoTest;uid=sa;pwd=10055154");

       sqlcon.Open();

       SqlCommand cmd = new SqlCommand("select * from t1 where id>@tj",sqlcon);

       cmd.Parameters.AddWithValue("@tj",TextBox7.Text);

       /*

        或:

        cmd.Parameters.Add("@tj", SqlDbType.Int);

        cmd.Parameters["@tj"].Value = TextBox7.Text;

        */

       SqlDataAdapter sda = new SqlDataAdapter(cmd);

       DataSet ds = new DataSet();

       sda.Fill(ds);

       GridView1.DataSource = ds;

       GridView1.DataBind();

 

        /// <summary>
        /// 获取排序分页数据
        /// </summary>
        /// <param name="start">起始行</param>
        /// <param name="end">结束行</param>
        /// <param name="categoryId">条件表达式</param>
        /// <param name="orderby">排序表达式</param>
        /// <returns></returns>
        public DataSet GetPageList(int start, int end, int categoryId,string orderby)
        {
            string sql = "select * from(select row_number()over(order by {1})as num,* from Books {0}) as t where num>=@start and num<=@end";
            sql = string.Format(sql, categoryId != 0 ? " where CategoryId=@CategoryId" : "",(orderby!=""&&orderby!=null)?orderby:"id");
            SqlParameter[] pars ={
                               new SqlParameter("@start",start),
                                  new SqlParameter("@end",end),
                                     new SqlParameter("@CategoryId",categoryId)
                               };
            return DbHelperSQL.Query(sql, pars);
            //List<SqlParameter> listP = new List<SqlParameter>();
            //listP.Add(new SqlParameter("@start", SqlDbType.Int) { Value = start });
            //listP.Add(new SqlParameter("@end", SqlDbType.Int) { Value = end });
            //listP.Add(new SqlParameter("@CategoryId", SqlDbType.Int) { Value = categoryId });
            //return DbHelperSQL.Query(sql, listP.ToArray());
        }

2、事务处理(一串操作不成功则返回最初状态)

       事务处理的主要特征是,任务要么全部完成,要么都不完成。在写入一些记录时,要么写入所有的记录,要么什么都不写入。如果在写入一个记录时出现了失败,那么在事务处理中已写入的其他数据就会回滚。事务可能由很多单个任务构成。

操作过程:

1) 创建事务

2) 指定SQL语句为事务

3) Try当所有操作都正确完成时:事务.commit()

4) Ctrch当有任何错务时:事务.RollBack();

        SqlConnection sqlcon = new SqlConnection("server=.;dataBase=adoTest;uid=sa;pwd=10055154");

       sqlcon.Open();

       //创建事务

       SqlTransaction myTrans = sqlcon.BeginTransaction();

       SqlCommand cmd = new SqlCommand("update t1 set age = 19 where name = @name",sqlcon);

        cmd.Parameters.AddWithValue("@name","张三");

       //指定SQL语句为事务

       cmd.Transaction = myTrans;

       try

       {

           cmd.ExecuteNonQuery();

           myTrans.Commit();//提交事务

           ClientScript.RegisterClientScriptBlock(this.GetType(), "提示", "alert('修改成功');", true);

       }

       catch (Exception ex)

       {

           myTrans.Rollback();//回省滚事务

           ClientScript.RegisterClientScriptBlock(this.GetType(),"提示","alert('出错,事务回滚');",true);

       }      

       sqlcon.Close();

3、存储过程

1)执行不带返回参数(Input)的存储过程

A、在数据库中编写存储过程

create procedure procTest1

(

       @id int

)

as

begin

       select * from t1 where id >=@id

end

go

B、创建并初始SqlCommand对象

 SqlConnection con = new SqlConnection("server=.;dataBase=adoTest;uid=sa;pwd=10055154");

        con.Open();

        SqlCommand cmd = new SqlCommand();

        //指定调用哪个存储过程

        cmd.CommandText = "procTest1";

        //指定SQL命令类型是存储过程,默认为SQL语句

        cmd.CommandType = CommandType.StoredProcedure;

        //建立连接

        cmd.Connection = con;

C、向SqlCommand对象添加存储过程参数

        //指定参数对象

        SqlParameter param = new SqlParameter();

        //设置该参数对象的值

        cmd.Parameters.AddWithValue("@id",Convert.ToInt32(TextBox1.Text.Trim()));

D、执行命令

        //执行命令

        SqlDataReader dr = cmd.ExecuteReader();

        GridView1.DataSource = dr;

        GridView1.DataBind();

2)执行带返回参数(output)的存储过程

A、SQL存储过程

create procedure proc2

(

       @address nchar(20),

       @value int output

)

as

begin

       select @value = (select COUNT(*) from t1 where address=@address)

end

B、在VS中调用

        SqlConnection con = new SqlConnection("server=.;dataBase=adoTest;uid=sa;pwd=10055154");

        con.Open();

        SqlCommand cmd = new SqlCommand();

        cmd.CommandText = "proc2";

        cmd.CommandType = CommandType.StoredProcedure;

        cmd.Connection = con;

        cmd.Parameters.AddWithValue("@address",DropDownList1.SelectedItem.Value);

        SqlParameter spr = new SqlParameter();

        spr.ParameterName = "@value";

        spr.SqlDbType = SqlDbType.Int;

        spr.Direction = ParameterDirection.Output;

        cmd.Parameters.Add(spr);

        SqlDataReader sda = cmd.ExecuteReader();

        GridView1.DataSource = sda;

        GridView1.DataBind();

        con.Close();

        Label1.Text = spr.Value.ToString();

六、数据库链接时间设定

默认情况下连接数据库的超时时间是15秒,我们可以通过调整连接字符串的方法来改变只读的ConnectionTimeout属性。只需在初始化SqlConnection类的变量时加上一句: Connection Timeout= 2;即可将超时时间调为2秒。

七、web.config配置及调用

1、数据库链接

配置:<connectionStrings>

                  <addname="sqloledb"connectionString="server = .;Database=10msg;uid=sa;pwd=10055154" />

           </connectionStrings>

调用: public SqlConnection GetConnection()

    {

        try

        {

            returnnew SqlConnection(ConfigurationManager.AppSettings["sqloledb"].ToString());

        }

        catch (Exception ex)

        {

            ClientScript.RegisterClientScriptBlock(this.GetType(),"提示","alert('链接出错');",true);

        }

    }

获取类中:SqlConnection mycon = GetConnection();

2、页面访问异常

  <system.web>

    <customErrorsmode="On">

      <errorstatusCode="404"redirect ="404.aspx"/>     

    </customErrors>

  </system.web>

说明:

1.      mode:表示什么时候显示错误信息,共三种状态:

on:表示始终显示自定义的信息。此时跳转到接收出错页面显示页

Off:表示始终显示详细的asp.net错误信息。此时出错出显示哪行出错等详细信息。

RemoteOnly:表示只对不在本地Web服务器上运行的用户显示自定义信息。

2.      statusCode:指明错误状态码,指明一种特定的出错状态。如:404

3.      redirect:出错时重定向的URL

 

八、GridViewADO.NET

1、一键更新数据

        privatevoid btnShowData_Click(object sender,EventArgs e)

        {

            //用此语句,不能实现对设有主外键及有多表级联更新的表操作

            // 创建一个与查询数据一样的SqlDataAdapter对象,并且保证要有主键

            string connStr =ConfigurationManager.ConnectionStrings["adb"].ConnectionString;

            string sqlStr ="select * from Student";

            DataSet ds = new System.Data.DataSet();

            using (SqlDataAdapter sda =new SqlDataAdapter(sqlStr,connStr))

            {

                //自动生成表单,实现对DataSet的更改与对应的数据库相关联

                SqlCommandBuilder scb = new SqlCommandBuilder(sda); //**核心**//

                sda.Update(dgvData.DataSourceas DataTable); //**核心**//

            }

        }

 

1、GridView美化、绑定、与日期格式化

<RowStyleBackColor="#EFF3FB"/>

<Columns>

  <asp:BoundFieldDataField="id" HeaderText="编号"/>

  <asp:HyperLinkFieldDataTextField="标题"HeaderText="标题"NavigateUrl="~/gl/gxxw.aspx?id={id}"

        DataNavigateUrlFields="id"DataNavigateUrlFormatString="gxxw.aspx?id={0}"/>

    <asp:BoundFieldDataField="发布日期"HeaderText="发布日期"SortExpression="发布日期"DataFormatString="{0:d}"/>

    <asp:BoundFieldDataField="类别"HeaderText="类别"/>

    <asp:HyperLinkFieldHeaderText="更新"NavigateUrl="~/gl/gxxw.aspx?id={id}"Text="更新"

        DataNavigateUrlFields="id"DataNavigateUrlFormatString="gxxw.aspx?id={0}"/>

    <asp:CommandFieldHeaderText="删除"ShowDeleteButton="True"/>

</Columns>

<FooterStyleBackColor="#507CD1"Font-Bold="True" ForeColor="White" />

效果图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值