ADO.NET数据库

ASP.NET提供了ADO.NET技术,它是ASP.NET应用程序与数据库进行交互的一种技术。

ADO.NET技术把对数据库的操作分为几个步骤,并为每个步骤提供对象来封装操作过程,从而使对数据库的操作变得简单易行。

ADO.NET组件通过以下两个主要的组件将数据访问与数据处理分离:

  1. ADO.NET体系结构的一个核心元素是.NET数据提供程序,它是专门为数据处理以及快速地只进、只读访问数据而设计的组件,包括Connection、Command、DataReader和DataAdapter对象的组件。

  2. DataSet是ADO.NET体系结构中另一个核心组件,它是专门为各种数据源的数据访问独立性而设计的,所以它可以用于多个不同的数据源、XML数据或管理应用程序的本地数据,如内存中的数据高速缓存。

基本的SQL

1.选择数据

  SELECT语句语法:

    SELECT 列名1,列名2,列名3,...FROM 表名(SELECT * FROM 表名),例如:

      SELECT * FROM Student

      该SQL语句表示从Student表中选取所有的列。

    SELECT 列名1,列名2,列名3,...FROM 表名 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC,列名3 ASC/DESC...(ASC表示升序,DESC表示降序)

      SELECT * FROM Student ORDER BY StuName DESC。

      该SQL语句表示从Student表中选取所有的列并按照StuName降序排序。

    SELECT 列名1,列名2,列名3,...FROM 表名 WHERE子句 ORDER BY 列名1 ASC/DESC,列名2 ASC/DESC,列名3 ASC/DESC... (WHERE子句是条件子句,WHERE子句能够对条件进行设置,只有满足条件的行才会显示到结果中)。

      SELECT * FROM Student WHERE StuClass=‘中药一班’

    有时选择条件不止一个,这时需要逻辑连接符把这些条件连接起来,常用的逻辑连接符有AND和OR,AND表示关系与,OR表示关系或。

      SELECT * FROM Student WHERE StuClass=‘中药一班’OR StuClass=‘中药二班’

2.插入数据

  INSERT INTO 表名(列名1,列名2,列名3,...) 

  VALUES(值1,值2,值3,...)

  向Student表中添加一条数据,SQL语句如下:

    INSERT INTO Student(StuName,StuClass,StuSex)

    VALUES(‘李莹’,‘中药三班’,‘女’)

  也可以采用下面的语句实现:

    INSERT INTO Student

    VALUES(‘李莹’,‘中药三班’,‘女’)

    此语句忽略了列名,此时会按照列在数据表中的排列顺序逐个插入。在执行INSERT语句时值与列的数据类型必须一致,否则会报错。

3.更新数据

  UPDATE 表名 SET

  列名1=值1,

  列名2=值2,

  ...

  WHERE子句

  更新Student表中的数据:

    UPDATE Student Set

    StuClass=“中药四班”,

    WHERE StuName=“李莹”

4.删除数据

  DELETE FROM 表名 WHRER子句

在VS中执行数据查询

  查询数据可以使用SQL语句实现,也可以使用SQL SERVER提供的管理工具来生成和测试SQl语句。在VS中执行数据查询的操作如下:

    1.在“服务器资源管理器”窗口中,找到“表”节点。

    2.右键单击“表”节点,在弹出的菜单中选择“新建查询”。

    3.在弹出的“添加表”对话框中选择要操作的表、视图、函数、同义词,单击“添加”,在新建的查询窗口中会显示被选中的对象。

创建数据库

  在编写ASP.NET网站应用程序之前,首先要做的是设计和创建数据库。

连接数据库

  .NET Framework数据提供程序使用Connection对象提供与Microsoft SQL Server 的连接。

  SqlConnection连接字符串常用参数:

    1.Data Source:数据库服务器的名称。

    2.Initial Catalog:数据库的名称。

    3.Integrated Security:决定连接是否是安全的,取值可以是True、False或SSPI。

    4.User ID:SQL Server登录帐户。

    5.Password:SQL Server帐户的登录密码。

创建数据库连接

  

可以通过以下方式创建数据库连接:

  1.使用Connection对象创建数据库连接。

1 SqlConnection connection=new SqlConnection();
2 connection.ConnectionString="server=localhost; Integrated Security=True;Initial Catalog=SuperMarket";
View Code

  2.使用连接字符串来初始化SqlConnection对象创建数据库连接。

1 string connectionString = "Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True";
2 SqlConnection connection = new SqlConnection(connectionString);
View Code

  3.使用构造函数来初始化SqlConnection对象创建数据库连接。

     构造函数

1 public class ConnectionString
2 {
3     public static string connectionString = "Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True";
4 }
View Code

  4.初始化SqlConnection对象,创建数据库连接。

SqlConnection connection = new SqlConnection(ConnectionString.connectionString);
View Code

  5.获取在配置文件中的<connectionStrings>节中利用键值对存储的数据库连接字符串,创建数据库连接。

    利用键值对存储数据库连接字符串。

1 <connectionStrings >
2     <add name="connection1" connectionString="Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True"/>
3 </connectionStrings>
View Code

    获取配置文件中的数据库连接字符串。

1 SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString());
View Code

查看连接信息

 1             try
 2             {
 3                 connection.Open();
 4                 Response.Write("服务器版本:" + connection.ServerVersion.ToString());
 5                 Response.Write("<br>数据库名称:" + connection.Database.ToString());
 6                 Response.Write("<br>数据库连接:" + connection.State.ToString());
 7                 connection.Close();
 8             }
 9             catch (Exception ex)
10             {
11                 Response.Write("连接错误!" + ex.Message.ToString());
12             }
13             finally
14             {
15                 connection.Close();
16    }    
View Code

获取数据

1.Command对象

  Command对象使用SELECT、INSERT、UPDATE、DELETE等SQL命令与数据源通信,此外,Command对象还可以调用存储过程操作数据库。

  创建Command对象的方法:

    1.创建Command对象,指定SQL命令,设置可利用的数据库连接。

1 SqlCommand command = new SqlCommand();
2 command.Connection = connection;
3 command.CommandText = "select * from Advertisements";
View Code

    

    2.在创建Command对象时指定SQL命令和可利用的数据库连接。

1 SqlCommand command = new SqlCommand("select * from Advertisements", connection);
View Code

2.DataReader对象 

  可以使用DataReader从数据库中检索只读、只进的数据流。“只读”,是指在数据阅读器DataReader上不可更新、删除、增加记录。“只进”是指记录的接收是顺序进行且不可后退的。

  数据阅读器DataReader接收到的数据是以数据库的记录为单位的。查询结果在查询执行时返回,并存储在客户端的网络缓冲区中,直到用户使用DataReader的Read方法对它们发出请求。

  使用DataReader可以提高应用程序的性能,原因是它只要数据可用就立即检索数据,并且在默认情况下一次只在内存中存储一行,减少了系统开销。

  在创建一个Command对象的实例之后,可以通过对命令调用ExecuteReader方法来创建DataReader,该方法从在Command对象中指定的数据源检索一些行,填充DataReader。

  使用

    1.获取数据并绑定到控件中。

      在Default.aspx中:

 1     <div>
 2         <asp:Label ID="Label1" Text="请选择:" runat="server" />
 3         <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
 4             <asp:ListItem Text="请选择" Enabled="true"></asp:ListItem>
 5          </asp:DropDownList>
 6         <br />
 7         <asp:Label ID="Label2" runat="server" Text="广告的详细信息:" />
 8         <br />
 9         <asp:Label ID="Label3" runat="server" Height="200" Width="300" />
10     </div>
View Code

      在Default.aspx.sc中:

 1  protected void Page_Load(object sender, EventArgs e)
 2  {
 3        if (!this.IsPostBack)
 4        {
 5            SqlCommand command = new SqlCommand("select AlternateText,ID  from Advertisements", connection);
 6             SqlDataReader dataReader;
 7             try
 8             {
 9                 connection.Open();
10                 dataReader = command.ExecuteReader();
11 
12                 while (dataReader.Read())
13                 {
14                     ListItem listItem = new ListItem();
15                     listItem.Text = dataReader["AlternateText"].ToString();
16                     listItem.Value = dataReader["ID"].ToString();
17                     DropDownList1.Items.Add(listItem);
18                 }
19                 dataReader.Close();
20             }
21             catch (Exception ex)
22             {
23                 Label3.Text = "读取失败" + ex.Message.ToString();
24             }
25             finally
26             {
27                 connection.Close();
28             }
29         }
30 }
View Code

    2.获取控件数据信息并查询。

      在Default.aspx.sc中:

 1         protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
 2         {
 3             SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString());
 4             string selectSql = "select * from Advertisements where ID='" + DropDownList1.SelectedItem.Value + "'";//定义SQL语句获取广告信息
 5 
 6             SqlCommand command = new SqlCommand(selectSql, connection);
 7             SqlDataReader dataReader;
 8             try
 9             {
10                 connection.Open();
11                 dataReader = command.ExecuteReader();
12                 dataReader.Read();
13                 string stringText;
14                 stringText ="ID:"+ dataReader["ID"].ToString() + "<br>" +"图片地址:"+ dataReader["ImageUrl"].ToString() + "<br>" +"链接地址:"+ dataReader["NavigateUrl"].ToString() + "<br>" +"显示频率:"+ dataReader["Impressions"].ToString() + "<br>" +"描述信息:"+ dataReader["AlternateText"].ToString();
15                 Label3.Text = stringText.ToString();
16                 dataReader.Close();
17 
18             }
19             catch (Exception ex)
20             {
21                 Label3.Text = "读取失败" + ex.Message.ToString();
22             }
23             finally
24             {
25                 connection.Close();
26             }
27         }
View Code

3.DataAdapter对象

  DataAdapter对象充当数据库和ADO.NET对象模型中非连接对象之间的桥梁,能够用来保存和检索数据。DataAdapter对象类的Fill方法用于将查询结果引入DataSet或DataTable中,以便能够脱机处理数据。根据不同的数据源DataAdapter对象,可以分为四类:

    1.SqlDataAdapter:用于对SQL Server数据库执行命令。

    2.OleDBDataAdapter:用于对支持OleDB的数据库执行命令。

    3.OdbcDataAdapter:用于支持Odbc的数据库执行命令。

    4.OracleDataAdapter:用于对Oracle数据库执行命令。

  使用SqlDataAdapter的步骤:

    1. 建立数据库连接。

    2. 建立SqlCommand对象,设置要执行的SQL语句

    3. 建立并实例化一个SqlDataAdapter对象。

    4. 建立一个DataSet对象,用于接收执行SQL命令返回的数据集。

    5. 填充数据集。

    6. 绑定数据控件。

    7. 关闭数据库连接。

4.DataSet对象

  DataSet在ADO.NET对实现从数据库抽取数据起到关键作用,数据从数据库完成数据抽取后存放在DataSet中,是各种数据源中的数据在计算机内存中映射成的缓存,从某种意义上可以把DataSet可以看成是一个数据容器。

  DataSet也被称为内存中的数据库,因为在DataSet可以包含很多数据表以及数据表之间的关系。

  DataSet在客户端实现读取、更新数据库等过程中起到了中间部件的作用。

  DataSet从数据源中获取数据后就会断开与数据源之间的连接。允许在DataSet中定义数据约束和表关系,增加、删除和编辑记录,还可以对DataSet中的数据进行查询、统计等。当完成了各项操作以后还可以把DataSet中的数据送回数据源。DataSet的产生满足了多层分布式程序的需要,它能够在断开数据源的情况下对存放在内存中的数据进行操作,这样可以提高系统整体性能,而且有利于扩展。

  创建DataSet的方式

  

    1.建立一个空的数据集,然后再把建立的数据表放到该数据集里。

      DataSet dataSet = new DataSet();

    2.先建立数据表,然后再建立包含数据表的数据集。

      DataSet dataSet = new DataSet(“表名”);

  DataSet中经常使用的类

    1.DataTable。称为数据表,用来存放数据。一个Dataset对象可以包含多个DataTable,每个DataTable可以包含多个DataRow和DataColumn。

      它的创建方式有两种:

        1.数据加载DataSet时会自动创建DataTable。

        2.以编程方式创建DataTable的对象,然后将对象添加到DataSet的Tables集合中。

      从DataSet中提取DataTable

        DataSet dataset=new DataSet();

        DataTable dataTable=dataset.数据表名

    2.DataRow。数据表里的行,是给定DataTable中的一行数据(记录)。DataRow对象的方法提供了对表中数据的增加、删除、更新、查询等功能。

      提取表中的一行数据(记录)

        DataRow dataRow=DataTable.Row[n];

    3.DataColumn。数据表中的列,定义了数据表的数据结构。

      获取某列的值需要在数据行的基础上进行

        string str=dataRow.Column[“字段名称”].ToString();

         或string str=dataRow.Column[“索引”].ToString();

    4.DataRelation。

      使用DataRelation通过DataColumn对象将两个DataTable对象相互关联,此类关系类似于关系数据库中的主键/外键关系。关系是在父表和子表中匹配的列之间创建的,两个列的数据类型必须相同。

      创建DataRelation时,首先要验证是否可以创建关系。在将它添加到DataRelationCollection之后,通过禁止会使关系无效的任何更改来维持此关系。在创建DataRelation和将其添加到DataRelationCollection之间的这段时间,可以对父行或子行进行其他更改,但是会使关系失效,会产生异常。

  使用

    在配置文件中添加以下内容:

1 <connectionStrings >
2     <add name="connection1" connectionString="Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True"/>
3 </connectionStrings>
View Code

    在Default.aspx.cs中添加以下内容:

 1 <div>
 2         <asp:Label ID="Label1" Text="请选择:" runat="server" />
 3         <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
 4             <asp:ListItem Text="请选择" Enabled="true"></asp:ListItem>
 5          </asp:DropDownList>
 6         <br />
 7         <asp:Label ID="Label2" runat="server" Text="广告的详细信息:" />
 8         <br />
 9         <asp:Label ID="Label3" runat="server" Height="200" Width="300" />
10 </div>
View Code

    Default.aspx.cs中的代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Data;
 4 using System.Data.SqlClient;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Web;
 8 using System.Web.UI;
 9 using System.Web.UI.WebControls;
10 
11 namespace WebApplication1
12 {
13     public partial class Default : System.Web.UI.Page
14     {
15         private static DataSet dataSet = new DataSet();
16         public class ConnectionString
17         {
18             public static string connectionString = "Data Source=追风的蜗牛;Initial Catalog=Adrotator;Integrated Security=True";
19         }
20 
21         protected void Page_Load(object sender, EventArgs e)
22         {
23             if (!this.IsPostBack)
24             {
25                 fillList();
26             }
27         }
28 
29         protected void fillList()
30         {
31             SqlConnection connection = new SqlConnection(System.Web.Configuration.WebConfigurationManager.ConnectionStrings["connection1"].ConnectionString.ToString());
32             SqlCommand command = new SqlCommand("select * from Advertisements", connection);
33             SqlDataAdapter dataAdapter = new SqlDataAdapter(command);
34             //打开数据库连接,读取信息
35             try
36             {
37                 connection.Open();
38                 //填充Dataset
39                 dataAdapter.Fill(dataSet, "Advertisements");
40             }
41             catch (Exception ex)
42             {
43                 Label3.Text = "读取错误" + ex.Message.ToString();
44             }
45             finally
46             {
47                 connection.Close();
48             }
49             foreach (DataRow row in dataSet.Tables["Advertisements"].Rows)
50             {
51                 ListItem item = new ListItem();
52                 item.Text = row["AlternateText"].ToString();
53                 item.Value = row["ID"].ToString();
54                 DropDownList1.Items.Add(item);
55             }
56         }
57 
58         protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
59         {
60             try
61             {
62                 DataRow[] dataRow = dataSet.Tables["Advertisements"].Select("ID=" + DropDownList1.SelectedItem.Value);
63                 string stringText = "ID:" + dataRow[0]["ID"].ToString() + "<br/>图片地址:" + dataRow[0]["ImageUrl"].ToString() + "<br/>链接地址:" + dataRow[0]["NavigateUrl"].ToString() + "<br/>显示频率:" + dataRow[0]["Impressions"].ToString() + "<br/>描述:" + dataRow[0]["AlternateText"].ToString();
64                 Label3.Text = stringText.ToString();
65             }
66             catch (Exception ex)
67             {
68                 Label3.Text = "读取失败" + ex.Message.ToString();
69             }
70         }
71     }
72 }
View Code


 

转载于:https://www.cnblogs.com/spilledlight/p/4862700.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262691.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取滚动文本框TextArea焦点位置信息

//输入参数&#xff1a;// _mOffset 滚动文本框对象//返回值:// OffsetObject 位置信息对象// length 焦点位置长度// leftValue 滚动文本框从开始到焦点所在位置的文本值// rightValue 滚动文本框从焦点位置到结束的文本值// scrollTop 滚动框位置//更新记录:// 2…

十天学会ASP.Net——(2)

2.Web控件 1&#xff09;WebControl基类属性 参考http://msdn.microsoft.com/zh-cn/library/7zt8s89c 2&#xff09;Form控件&#xff08;很简单&#xff09; 应用&#xff1a;实现如下效果 <form id"form1" runat"server"> <div> 班级:<br…

Spring表达式

一、SpEL 其中&#xff0c;直接写也可以赋值&#xff0c;‘ ’ 单引号引起来后成为一个字符串对象&#xff0c;可以调用String的方法&#xff1b; 二、引用另外一个bean 装配这个类的bean&#xff1a; 1、第一种方法&#xff0c;property标签中使用bean引用 2、使用Spring表达…

sama5d3 环境检测 gpio--yk测试

说明:  &#xff47;&#xff50;&#xff49;&#xff4f;的&#xff2d;&#xff21;&#xff30;关系 yk0--pioA7 yk1--pioA5 yk2--pioA9 yk3--pioA3 yk4--pioA1 yk5--pioA8 (端子从左&#xff0d;&#xff0d;&#xff1e;右 QD--pioA21内部总启动信号&#…

【Vegas原创】X connection to localhost:11.0 broken (explicit kill or server shutdown)解决方法...

以oracle 进入系统&#xff08;不要使用su切换到oracle&#xff09; 执行env 显示 DISPLAYlocalhost:10.0 执行dbca &#xff0c;出现图形界面 转载于:https://www.cnblogs.com/amadeuslee/archive/2009/01/04/3744408.html

关于偏微分

在图像处理里面&#xff0c;偏微分主要体现在能量极小化上面&#xff0c;而这种极小化泛函往往包含变量的微分&#xff0c;所以只要掌握Euler-Lagrange方程就可以知道其演化方程了&#xff0c;而这个方程就是极小化能量泛函的解。辅以梯度下降法之类的迭代策略&#xff0c;和离…

集合属性注入值

一、集合注入&#xff0c;装配bean的时候&#xff0c;即在xml中添加bean的时候 1、List集合 2、set集合&#xff0c;无序&#xff0c;即无索引&#xff0c;所以也无重复&#xff0c; 3、map key-value键值对双列集合&#xff0c;内置接口Entry 4、Properties集合&#xff0c;可…

用C/C++实现倒序输出,以12345为例

用C/C语言实现倒序输出12345,代码如下#include <stdio.h>int main(){ int i12345; int b; for(;i>1;ii/10) { bi%10; printf("%d",b); } return 0;}转载于:https://blog.51cto.com/cheng618/1701515

QuerySyntax(查询语法)

Code/// <summary>/// QuerySyntax&#xff08;查询语法&#xff09;的摘要说明/// </summary>public class QuerySyntax { public int ID { get; set; } public string Name { get; set; } public void QuerySyntaxTest() { List<Quer…

名词解释CPC、CPM、CPA.......[来源于网络]

这几天有点忙&#xff0c;所以没有很多时间把写的东西上传上来&#xff0c;这个拿出来是应一些做市场分析的童鞋的要求&#xff0c;我还记得这是我刚去金山工作时整理的&#xff0c;出处我忘记了&#xff0c;如果有谁知道&#xff0c;别忘记提醒我&#xff0c;这个算是扫盲吧&a…

节流防抖学习与实践

先看看概念 函数防抖(debounce)&#xff1a; 在事件被触发n秒后再执行回调&#xff0c;如果在这n秒内又被触发&#xff0c;则重新计时&#xff1b;典型的案例就是输入搜索&#xff1a;输入结束后n秒才进行搜索请求&#xff0c;n秒内又输入的内容&#xff0c;就重新计时。像是两…

SQL SERVER 与ACCESS、EXCEL的数据转换

熟悉SQL SERVER 2000的数据库管理员都知道&#xff0c;其DTS可以进行数据的导入导出&#xff0c;其实&#xff0c;我们也可以使用Transact-SQL语句进行导入导出操作。在Transact-SQL语句中&#xff0c;我们主要使用OpenDataSource函数、OPENROWSET 函数&#xff0c;关于函数的详…

二、ceph编译源码、单机搭建调试环境

2019独角兽企业重金招聘Python工程师标准>>> 准备一台机器&#xff1a; roottest3:~# cat /proc/version Linux version 3.13.0-32-generic (builddkissel) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 一、下载ce…

C#与Unity 数据存储

使用Json存储数据 1.创建Json文件&#xff0c;直接创建txt文件&#xff0c;将后缀名改为xx.json 2.Json文件的数据格式&#xff0c;中括号表示列表&#xff0c;即中括号下的每个逗号隔开的内容都是列表的每个元素&#xff0c;花括号表示对象&#xff0c;冒号前面的表示属性名&a…

stack overflow at line

今天碰到如题的问题&#xff0c;这个问题一般是由于溢出才会报的错误&#xff0c;但是我的页面仅仅是对关闭而已&#xff0c;后来才发现&#xff0c;我自己定义了一个function close(),这个close()跟页面关闭的window.close()重复了&#xff0c;我把我定义的close()删除掉就OK了…

centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课...

centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课 rsync可以增量同步&#xff0c;scp不行 注意&#xff1a;修改sshd_config文件时候&#xff0c;port字段&#xff0c;sshd不支持监听小于1024 &#xff0c;1~1023不允…

注解@Component方式代替xml装配bean

一、Component 用注解来装配bean 1、 2、对类使用注解&#xff0c;装配bean&#xff1a; 3、类中&#xff0c;注入其他对象&#xff1a; 二、bean.xml中配置Componet方式装配bean 1、开启注解装配bean依赖注入方式和类使用的自动注入 2、 其中&#xff0c;通过类型获取对象时候…

ASP.NET2.0数据操作之创建业务逻辑层

导言 本教程的第一节所描述的数据访问层&#xff08;Data Access Layer&#xff0c;以下简称为DAL&#xff09;已经清晰地将表示逻辑与数据访问逻辑区分开了。不过&#xff0c;即使DAL将数据访问的细节从表示层中分离出来了&#xff0c;可它却不能处理任何的业务规则。比如说&a…

http://acm.hrbeu.edu.cn/index.php?act=problemid=1001cid=19 人工湖的公路

1 #include<iostream>2 #define MAX 1000003 using namespace std;4 long A[MAX1];//环形公路数据 5 long com[MAX1];//树状数组 6 long N,M;//节点数和询问次数 7 8 long lowbit(long x)9 {10 return x&(-x);11 }12 13 void modify(long pos,int value)14 {15 …

不使用注解和使用注解的web-service-dao结构

一、未使用注解的web-service-dao结构 1、action类源码 其中&#xff0c;service作为一个成员属性&#xff0c;采用的是层层调用&#xff0c;service类中dao作为一个成员属性&#xff0c;再成员方法中调用&#xff1b; 2、bean.xml中装配bean&#xff1a; 3、创建spring容器&am…