使用ADO.NET访问数据库

   

目录

访问数据库的步骤

1、建立数据库

2、设置链接参数

(1)web网页和数据库连接的方法一

(2)web网页和数据库连接的方法二

3、建立链接对象

4、显示数据库

5、数据库的删除

6、数据库的添加


  

   ADO.NET可通过DateSet对象在“断开连接模式”下访问数据库。

        访问数据库中的数据时,首先要建立连接下载数据到本地缓冲区,之后断开与数据库的连接。    

        此时用户对数据的操作(查询、添加、修改、删除等)都是在本地进行的。    

        只有需要更新数据库中的数据时,才再次与数据库连接,在发送修改后的数据到数据库后关闭连接。

VS Studio中集成了sql server,虽然不是很完整,但是是可用的。所以下面的演示都是直接在VS studio中操作。

访问数据库的步骤

1、建立数据库

        新建数据库的时候操作和前面新建aspx文件的一样,只不过这里不选新建web窗体,而是选择新建数据中的sql server数据库

        操作步骤:添加-新建项-数据-sql server数据库-(修改名称)- 添加 -(是)

 

然后双击新建的项目,左侧就会出现这个项目,然后右击表,选择添加新表(也可以新建查询,不过就要自己写SQL语句):

然后添加其他属性:

 然后点击左上角的更新,更新数据库,再刷新,就能看到我们新添加的数据库了:

然后就在表的里面能看到添加的表了,右击-显示表数据

 在里面添加相应的数据即可。

这样就完成了数据库的新建。 

2、设置链接参数

首先,要访问数据库,就要将web网页和数据库连接起来,那么应该怎么连接呢?有两种方法,下面我们分别介绍:

在这之前,我们要先清楚数据库的连接字符串以及需要导入命名空间和引用类库,这个在两种方法中都要用到:

首先,找到新建的数据库,双击,下面的属性中就可以看到连接字符串这个属性

然后,点击到.aspx.cs文件中,添加需要导入命名空间和引用类库:

 代码:

using System.Data;
using System.Data.SqlClient;

(1)web网页和数据库连接的方法一

直接在.aspx.cs文件中复制进去,但是需要将所有的转义字符改成双斜杠\\,这是因为:

反斜线\字符是转义字符的起头字符,所以连续两个反斜线,表示一个真正的反斜线字符

所以这里要表示为反斜线字符的话就需要修改掉。

不修改为双斜杠的话会出错,然后修改之后: 

修改之后就不会出错了。 

使用方式(应用的时候最好是直接设置为全局变量,不然后面每次使用都需要重新定义,会很麻烦):

要怎么验证配置的参数是否正确呢,这就需要查看数据库是否能够正确打开和关闭了,所以添加一个label显示数据库的开启状态,然后添加两个button,分别用于打开和关闭数据库:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;namespace WebApplication9
{public partial class WebForm1 : System.Web.UI.Page{//首先配置链接参数(指明所要连接的数据库的字符串)string sqlcon = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\.net_\\WebApplication9\\WebApplication9\\App_Data\\student.mdf;Integrated Security=True";//然后建立链接对象SqlConnection myconnection = new SqlConnection();protected void Page_Load(object sender, EventArgs e){//为 myconnection 的数据库连接对象的 ConnectionString 属性赋值,myconnection 对象就知道了要连接哪个数据库,并且具备了连接所需的信息。myconnection.ConnectionString = sqlcon;//下面显示数据库的初始状态Label1.Text = myconnection.State.ToString();}protected void Button1_Click(object sender, EventArgs e){//打开数据库,然后显示状态myconnection.Open();Label1.Text = myconnection.State.ToString();}protected void Button2_Click(object sender, EventArgs e){//关闭数据库,然后显示状态myconnection.Close();Label1.Text = myconnection.State.ToString();}}
}

初始状态:

点击打开按钮:

点击关闭按钮:

可以看到,数据库可以正确打开和关闭,所以说明前面的配置是正确的。

上面的这种方法并不常用,常用的是方法二。

(2)web网页和数据库连接的方法二

使用该方法,就需要在web.config中添加一个ConnectionString,用来定义与数据库或其他数据存储源的连接信息,再导入一个命名空间:

需要添加的web.config代码:

<connectionStrings><!-- 定义名为 "studentcnnstring" 的连接字符串 --><add name="studentcnnstring"<!-- 指定连接字符串 -->connectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=D:\.net_\WebApplication9\WebApplication9\App_Data\student.mdf;Integrated Security=True"<!-- 指定连接的提供程序 -->providerName="System.Data.SqlClient"/>
</connectionStrings>

这里要注意大小写需要注意,不然也是会出错的。

需导入的命名空间:

using System.Configuration;

然后注释掉方法一的代码,尝试是否能实现数据库的打开和关闭:
 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace WebApplication9
{public partial class WebForm1 : System.Web.UI.Page{//首先配置链接参数(指明所要连接的数据库的字符串)//string sqlcon = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\.net_\\WebApplication9\\WebApplication9\\App_Data\\student.mdf;Integrated Security=True";string sqlcon = ConfigurationManager.ConnectionStrings["studentcnnstring"].ToString();//然后建立链接对象SqlConnection myconnection = new SqlConnection();protected void Page_Load(object sender, EventArgs e){//为 myconnection 的数据库连接对象的 ConnectionString 属性赋值,myconnection 对象就知道了要连接哪个数据库,并且具备了连接所需的信息。myconnection.ConnectionString = sqlcon;//下面显示数据库的初始状态Label1.Text = myconnection.State.ToString();}protected void Button1_Click(object sender, EventArgs e){//打开数据库,然后显示状态myconnection.Open();Label1.Text = myconnection.State.ToString();}protected void Button2_Click(object sender, EventArgs e){//关闭数据库,然后显示状态myconnection.Close();Label1.Text = myconnection.State.ToString();}}
}

运行初始状态:

点击打开:

点击关闭:
 

配置正确。 

3、建立链接对象

前面的例子中其实已经使用了,即:

 SqlConnection myconnection = new SqlConnection();

表示在代码中创建一个新的 SqlConnection 对象,并将其赋值给名为 myconnection 的变量。

SqlConnection 是用于与 SQL Server 数据库建立连接的类。它提供了一种在应用程序中与数据库进行通信的方式。通过使用 SqlConnection 对象,可以打开、关闭、执行命令和事务,并在应用程序和数据库之间传输数据。

在上述代码中,通过调用 SqlConnection 类的默认构造函数来创建一个新的 SqlConnection 对象。这个对象还没有与任何特定的数据库连接关联。要与数据库建立实际的连接,需要为 SqlConnection 对象设置相应的连接字符串,并调用 Open() 方法。

即:

//配置链接参数
string sqlcon = ConfigurationManager.ConnectionStrings["studentcnnstring"].ToString();
//建立链接对象
SqlConnection myconnection = new SqlConnection();
//为链接对象配置链接参数
myconnection.ConnectionString = sqlcon;
//打开数据库连接
myconnection.Open();

4、显示数据库

要实现该操作,首先就按照我们原先的学习,需要使用一个控件来显示,这里使用的是gridView控件。

除此之外,我们要使用SQL查询语句,以及我们应该学习在c#中如何将数据库的内容绑定到grid view控件中,代码和详细解释如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace WebApplication9
{public partial class WebForm1 : System.Web.UI.Page{//首先配置链接参数(指明所要连接的数据库的字符串)//string sqlcon = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\.net_\\WebApplication9\\WebApplication9\\App_Data\\student.mdf;Integrated Security=True";string sqlcon = ConfigurationManager.ConnectionStrings["studentcnnstring"].ToString();//然后建立链接对象SqlConnection myconnection = new SqlConnection();protected void Page_Load(object sender, EventArgs e){//为 myconnection 的数据库连接对象的 ConnectionString 属性赋值,myconnection 对象就知道了要连接哪个数据库,并且具备了连接所需的信息。myconnection.ConnectionString = sqlcon;//下面显示数据库的初始状态Label1.Text = myconnection.State.ToString();}protected void Button1_Click(object sender, EventArgs e){//打开数据库,然后显示状态myconnection.Open();Label1.Text = myconnection.State.ToString();}protected void Button2_Click(object sender, EventArgs e){//关闭数据库,然后显示状态myconnection.Close();Label1.Text = myconnection.State.ToString();}protected void Button3_Click(object sender, EventArgs e){//打开数据库连接myconnection.Open();//建立SQL语句string sqlcmd = "select * from studentscore";/*创建了一个 `SqlCommand` 对象,该对象可以执行 SQL 命令并将其发送到数据库,同时将该命令与之前创建的 `SqlConnection` 对象 `myconnection` 相关联。这样,就可以使用 `mycommand` 对象在数据库上执行特定的 SQL 操作,例如查询、插入、更新或删除数据。*/SqlCommand mycommand = new SqlCommand(sqlcmd, myconnection);//建立记录集,执行SQL语句,并赋值给记录集SqlDataReader myreader = mycommand.ExecuteReader();/*这行代码创建了一个 `SqlDataReader` 对象 `myreader`,用于执行 `mycommand` 对象所表示的 SQL 命令,并从数据库中读取返回的数据流。`ExecuteReader()` 方法用于执行 SQL 查询,并返回一个数据读取器,可以逐行读取查询结果。*///记录集绑定到gridview控件GridView1.DataSource = myreader;GridView1.DataBind();/*这两行代码将 `myreader` 中的数据绑定到名为 `GridView1` 的 ASP.NET 控件上,并通过 `DataBind()` 方法将数据显示在网格视图中。这样,从数据库中查询到的数据将以表格的形式展示在页面上。*///关闭记录集和链接对象myreader.Close();myconnection.Close();}}
}

运行初始状态:
 

点击显示数据库:

即可看到数据库里的内容。

上面的示例是用于显示整个数据库的内容,但如果想要显示某一条的话,就只需要修改SQL语句即可。那么这时候就需要在显示所有数据库中加一个判断语句,如果是第一次访问,就显示所有的,如果不是,就显示需要查询的。(在初始化下判断,然后点击button的时候,就显示满足条件的)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;namespace WebApplication9
{public partial class WebForm1 : System.Web.UI.Page{//首先配置链接参数(指明所要连接的数据库的字符串)//string sqlcon = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=D:\\.net_\\WebApplication9\\WebApplication9\\App_Data\\student.mdf;Integrated Security=True";string sqlcon = ConfigurationManager.ConnectionStrings["studentcnnstring"].ToString();//然后建立链接对象SqlConnection myconnection = new SqlConnection();protected void Page_Load(object sender, EventArgs e){//为 myconnection 的数据库连接对象的 ConnectionString 属性赋值,myconnection 对象就知道了要连接哪个数据库,并且具备了连接所需的信息。myconnection.ConnectionString = sqlcon;//下面显示数据库的初始状态Label1.Text = myconnection.State.ToString();if (!IsPostBack){myconnection.Open();//建立SQL语句string sqlcmd = "select * from studentscore";SqlCommand mycommand = new SqlCommand(sqlcmd, myconnection);//建立记录集,执行SQL语句,并赋值给记录集SqlDataReader myreader = mycommand.ExecuteReader();//记录集绑定到gridview控件GridView1.DataSource = myreader;GridView1.DataBind();//关闭记录集和链接对象myreader.Close();myconnection.Close();}}protected void Button1_Click(object sender, EventArgs e){//打开数据库,然后显示状态myconnection.Open();Label1.Text = myconnection.State.ToString();}protected void Button2_Click(object sender, EventArgs e){//关闭数据库,然后显示状态myconnection.Close();Label1.Text = myconnection.State.ToString();}protected void Button3_Click(object sender, EventArgs e){//打开数据库连接myconnection.Open();//建立SQL语句string sqlcmd = "select * from studentscore where id=1";//这里条件是字符型,就需要加一个单引号。SqlCommand mycommand = new SqlCommand(sqlcmd, myconnection);//建立记录集,执行SQL语句,并赋值给记录集SqlDataReader myreader = mycommand.ExecuteReader();//记录集绑定到gridview控件GridView1.DataSource = myreader;GridView1.DataBind();//关闭记录集和链接对象myreader.Close();myconnection.Close();}}
}

初始状态:

点击显示数据库(即查询满足条件的):

如果想要查找的不是指定的某一条,而是输入文本框的,那么就需要定义两个变量即可:
 

运行初始状态:

输入相应的内容,显示输入: 

但是,会出现这个错误:

这个我在课上也遇到了,我觉得可能是不能同时出现两个ExecuteReader(),我注释掉一个,就可以正常运行了,但是,那可能是凑巧前面有错误,被我注释掉了,碰到这种错误,就查看给出的提示,这里说System.Data.SqlClient.SqlException:“Incorrect syntax near 'name'.”,就去这个地方找错误,一般是语法错了,而我出错的原因就是忘记在两个条件之间加and了。修改了之后,就可以成功运行了。

 

运行代码:

protected void Button4_Click(object sender, EventArgs e){myconnection.Open();//建立SQL语句int id = Convert.ToInt32(TextBox1.Text);string name = TextBox2.Text;//这里条件是字符串型,就需要加一个单引号。string sqlcmd = "select * from studentscore where id="+ id + "and name='" +  name + "'";SqlCommand mycommand = new SqlCommand(sqlcmd, myconnection);//建立记录集,执行SQL语句,并赋值给记录集SqlDataReader myreader = mycommand.ExecuteReader();//记录集绑定到gridview控件GridView1.DataSource = myreader;GridView1.DataBind();//关闭记录集和链接对象myreader.Close();myconnection.Close();}

 如果想要查看数据库中数据的条数,则:

        protected void Button5_Click(object sender, EventArgs e){myconnection.Open();//建立SQL语句string sqlcmd = "select count(*) from studentscore";SqlCommand mycommand = new SqlCommand(sqlcmd, myconnection);int count;count = (int)mycommand.ExecuteScalar();//ExecuteScalar() 方法用于执行查询并获取单一值,常用于获取汇总信息,如计数、总和等。Label2.Text = count.ToString();//关闭记录集和链接对象myconnection.Close();}

运行结果:

5、数据库的删除

        protected void Button6_Click(object sender, EventArgs e){//打开数据库连接myconnection.Open();//建立SQL语句string sqlcmd = "delete from studentscore where id=1";//这里条件是字符型,就需要加一个单引号。SqlCommand mycommand = new SqlCommand(sqlcmd, myconnection);mycommand.ExecuteNonQuery();//关闭记录集和链接对象myconnection.Close();}

初始状态:

删除后:

6、数据库的添加

添加指定的:

        protected void Button7_Click(object sender, EventArgs e){myconnection.Open();string sqlcmd = "insert into studentscore(name,sex,score) values('nnn','man','91') ";SqlCommand mycommand = new SqlCommand(sqlcmd, myconnection);mycommand.ExecuteNonQuery();Response.Write("<script>alert('添加成功');window.location.href='webform.aspx'</script>");}

结果: 

添加文本框内的,跟前面的显示类似,用+号连接起来即可,例:

 注意

        这里的插入语句时错误的,有两个错误地方:

  1. values后面不应该有+号
  2. 单引号‘’是引用在变量名上的,而不是给每个符号都加。

OK,晚上再试一下,再练习。

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

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

相关文章

openwrt局域网配置多个IP

在局域网配置过程中&#xff0c;若是DHCP服务器关闭&#xff0c;又忘记了配置的ip&#xff0c;将很难访问到路由器重新进行配置。这种情况可以在路由器出厂时做一个备用ip去避免。 1.配置 以下是备用ip的配置方法&#xff0c;以SKYLAB的SKW99 WIFI模组为例进行说明&#xff1…

Android使用shape属性绘制边框内渐变色

目录 先上效果图实现方法shape属性介绍代码结果 先上效果图 这是使用AndroidStudio绘制的带有渐变色的边框背景色 实现方法 项目中由于UI设计需求&#xff0c;需要给按钮、控件设置带有背景色效果的。以下是UI效果图。 这里我们使用shape属性来绘制背景效果。 shape属性介…

ffmpeg命令与批处理编程

(一) CMD脚本查找所有文件 powershell与cmd转换 powershell与cmd虽然同为windows命令&#xff0c;但许多命令并不通用。 CMD换行符 a 在CMD下&#xff0c;可以用^作为换行符&#xff0c;类似于Linux下的\。举例如下&#xff1a; start pemu.exe ^ -net nic,vlan1,macaddr…

最新版IntelliJ IDEA 2024.1安装和配置教程 详细图文解说版安装教程

IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版 文章目录 IntelliJ IDEA 2024.1 最新版如何快速入门体验?IntelliJ IDEA 2024.1 安装和配置教程 图文解说版前言 第一步&#xff1a; IntelliJ IDEA 2024.1安装教程第 0 步&…

如何通过Linux pciehp sysfs接口控制PCIe Slot电源状态?-2

NVME SSD电源状态判断 通过pciehp sysfs接口对NVMe SSD所在的PCIe插槽进行Power On/Off操作时&#xff0c;确实会间接影响到NVMe SSD本身的电源状态。因为NVMe SSD是作为PCIe设备连接到特定插槽上的&#xff0c;插槽电源状态的变化通常会直接影响到与其相连的设备。 当对PCIe…

Python学习笔记16 - 函数

函数的创建和调用 函数调用的参数传递 函数的返回值 函数的参数定义 变量的作用域 递归函数 斐波那契数列 总结

fiddler常用操作汇总

1、过滤 2、查看数据包内容 3、弱网测试 弱网测试其实就是提前设置好一个值&#xff0c;在这个环境下进行测试就行了。 &#xff08;1&#xff09;进入定制规则页面&#xff1a; (2) 点击CtrlF调起搜索&#xff0c;在Find what 中输入300进行查找&#xff0c;更改上行、下行网…

【Java】SpringBoot快速整合mongoDB

目录 1.什么是mongoDB&#xff1f; 2.Docker安装mongoDB 3.SpringBoot整合mongoDB步骤 4.验证 1.什么是mongoDB&#xff1f; MongoDB是一种非关系型数据库&#xff0c;被广泛用于大型数据存储和分布式系统的构建。MongoDB支持的数据模型比传统的关系型数据库更加灵活&#x…

UDTF函数 explode

场景&#xff1a; 原hive数据形式 split 处理到一个Array 形式 使用explode炸开后的效果是 explode结合侧面视图达到targeType 目标形式&#xff1a; 一进多出 explode 将hive 中复杂的 array 炸成多行 因为炸开后&#xff0c; movie 列值少于categoryname 列所以这里为了达到…

SpringBoot的旅游管理系统+论文+ppt+免费远程调试

项目介绍: 基于SpringBoot旅游网站 旅游管理系统 本旅游管理系统采用的数据库是Mysql&#xff0c;使用SpringBoot框架开发。在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 &#xff08;1&…

《TinyLlama: An Open-Source Small Language Model》全文翻译

【Title】 TinyLlama&#xff1a;开源小语言模型 【Abstract】 我们推出了 TinyLlama&#xff0c;这是一个紧凑的 1.1B 语言模型&#xff0c;在大约 1 万亿个令牌上进行了大约 3 个时期的预训练。 TinyLlama 基于 Llama 2&#xff08;Touvron 等人&#xff0c;2023b&#xff…

【攻防世界】Confusion1

php的标志是大象&#xff0c;Python的标志是蛇 。Python 的 Flask 框架( Flask 使用 Jinja2 作为模板引擎 ) 点进register.php 输入{{3*4}} 输入 {{config}} 也有回显&#xff0c;ssti 判断是否存在ssti注入&#xff1a; 1. {{8*8}} 2. {{config}} 过滤了关键字&#xff0…

动态规划|63.不同路径II

力扣题目链接 class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m obstacleGrid.size();int n obstacleGrid[0].size();if (obstacleGrid[m - 1][n -1] 1 || obstacleGrid[0][0] 1) return 0;vector<ve…

Pygame经典游戏:贪吃蛇

------------★Pygame系列教程★------------ Pygame经典游戏&#xff1a;贪吃蛇 Pygame教程01&#xff1a;初识pygame游戏模块 Pygame教程02&#xff1a;图片的加载缩放旋转显示操作 Pygame教程03&#xff1a;文本显示字体加载transform方法 Pygame教程04&#xff1a;dra…

CameraCtrl、EDTalk、Sketch3D、Diffusion^2、FashionEngine

本文首发于公众号&#xff1a;机器感知 CameraCtrl、EDTalk、Sketch3D、Diffusion^2、FashionEngine NVINS: Robust Visual Inertial Navigation Fused with NeRF-augmented Camera Pose Regressor and Uncertainty Quantification In recent years, Neural Radiance Fields …

【电控笔记0】稳定度判断

简要概括 现控:远离虚轴,稳定度越高 自控:相位裕度PM 增益裕度GM 开环传函 不稳定条件判断

15 - Debian如何配置共享服务Samba

作者&#xff1a;网络傅老师 特别提示&#xff1a;未经作者允许&#xff0c;不得转载任何内容。违者必究&#xff01; Debian如何配置共享服务Samba 《傅老师Debian小知识库系列之15》——原创 前言 傅老师Debian小知识库特点&#xff1a; 1、最小化拆解Debian实用技能&…

Groovy程序设计-【第一部分Groovy起步】-01-起步

前言&#xff1a; 知识点记录来源于【Groovy程序设计】一书中&#xff0c;本文仅作知识点记录供日后使用查询&#xff0c;不做教程使用。 1.安装Groovy 安装非常简单&#xff0c;百度一下很多教程&#xff0c;安装过JDK的都懂。 查看安装的groovy的版本&#xff1a; groov…

总结SQL相对常用的几个字符函数

目录 字符的截取 substr() trim()、ltrim()、rtrim() 字符串的拼接 ||、 字符的大小写转换 upper(column_name):大写 lower(column_name):小写 字符替换 replace() 搜索字符 instr(column_name, substring_to_find,start,n_appearence) charindex(substring_to_fi…

自然语言处理、大语言模型相关名词整理

自然语言处理相关名词整理 零样本学习&#xff08;zero-shot learning&#xff09;词嵌入&#xff08;Embedding&#xff09;为什么 Embedding 搜索比基于词频搜索效果好&#xff1f; Word2VecTransformer检索增强生成&#xff08;RAG&#xff09;幻觉采样温度Top-kTop-p奖励模…