.net 连接SqlServer数据库及基本增删改查
一、写在前面
因为这学期选修的 .net 课程就要上机考试了,所以总结下.net 操作 SqlServer 数据的方法。(因为本人方向是 Java,所以对.net 的了解不多,但以下所写代码均是经过测试成功的)
二、.net 连接数据库
在web.config文件中配置数据库连接,代码写在<configuration></configuration>内
<appSettings>
<add key="connstring" value="user id=sa; password=sa123456; database=dataset; server=(local)" />
</appSettings>
其中 sa 为 SqlServer 数据库账号,sa123456 为数据库账号密码,dataset 位数据库名。
通过上面的代码大家不难看出这是通过SqlServer数据库的账号连接的。那么如果需要通过Windows身份认证连接呢?
<appSettings>
<add key="connstring" value="Data Source=.;Initial Catalog=dataset;Integrated Security=True"/>
</appSettings>
其中,dataset 为数据库名。
配置好了之后,再在cs后台文件中使用 Connection 对象连接
String constr = ConfigurationManager.AppSettings["connstring"].ToString();
SqlConnection myconn = new SqlConnection(constr);
很明显,第一个句获取我们在 web.config 中配置的数据库的信息的字符串,然后 new 一个 SqlConnection 对象。
这个时候也许你会想,既然是获取配置文件中的字符串,那么可不可以直接在cs后台文件中写而不需要再配置文件中配置后再获取呢?答案是肯定的。
String constr = "Data Source=.;Initial Catalog=dataset;Integrated Security=True";
SqlConnection myconn = new SqlConnection(constr);
仔细对比下先前写的配置文件,就知道这两种方式的相同点了。
那么现在简单说下 Connection 对象是个什么。在 ADO.NET 中 Connection 对象的主要用途是打开和关闭数据库的连接,通过这个对象,可以对数据库进行访问和操作。
String constr = "Data Source=.;Initial Catalog=dataset;Integrated Security=True";
SqlConnection myconn = new SqlConnection(constr);
myconn.Open();
//相关数据库操作
myconn.Close();
Open 就是打开数据库,Close 就是关闭数据库。
三、.net 操作数据库
那么通过 Connection 对象打开数据库后怎么对数据库操作呢?在 Dao.Net 中提供了Command 对象,主要就是用来对数据库进行增、删、改、查的操作。
下面我们直接看个查找操作的例子:
String constr = "Data Source=.;Initial Catalog=dataset;Integrated Security=True";
SqlConnection myconn = new SqlConnection(constr);
myconn.Open();
string sql = "select * from custom ";
SqlCommand cmd = new SqlCommand(sql, sqlConnection);
SqlDataReader dataReader = cmd.ExecuteReader();
Show.Text = "<tr><td>学号</td><td>姓名</td><td>学院</td><td>年龄</td><td>昵称</td></tr>";
while (dataReader.Read())
{
Show.Text = Show.Text + "<tr><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString() + "</td></tr>"; }
sqlConnection.Close();
通过上面这段代码,不难发现,在开启Connection对象后,首先我们需要写一段查询的sql语句:
string sql = "select * from custom ";
然后,new 一个SqlCommand对象,参数是 sql 语句 和 Connection 对象 。
SqlCommand cmd = new SqlCommand(sql, sqlConnection);
再然后,我们通过 SqlCommand 对象的 ExecuteReader 方法,执行查询语句,并返回一个DataReader 对象。
SqlDataReader dataReader = cmd.ExecuteReader();
再再然后,就是将 DataReader 对象中的数据(也就是我们查询的数据)读取出来了
while (dataReader.Read())
{
Show.Text = Show.Text + "<tr><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString()
+ "</td><td>" + dataReader[].ToString() + "</td></tr>"; }
最后,当然是关闭我们的 Connection 对象了。
sqlConnection.Close();
查询操作是通过 Command 对象的 ExecuteReader 方法来操作,那么增删改呢?
增删改的话就得用到 Command 对象的 ExecuteNonQuery 方法了。这个方法返回的是受影响的行数,也就是说如果操作失败,返回的是0。
还是看个增加数据的例子吧:
myconn.Open();
String sql = "insert into custom values('" + uid.Text + "','" + uname.Text + "','" + udepart.Text
+ "'," + uage.Text + ",'" + uename.Text + "','" + upassword.Text + "')";
SqlCommand cmd = new SqlCommand(sql, myconn);
if (cmd.ExecuteNonQuery() > )
{
this.Response.Write("<script language='javascript'>alert('增加成功!')</script>");
}
else
{
this.Response.Write("<script language='javascript'>alert('添加失败!')</script>");
}
myconn.Close();
通过上面代码,不难发现,其实套路和我们写的查询差不多,就是sql语句不同和调用的Command对象不同而已。
但是,仔细看会发现这段代码是使用了 sql 语句拼接的。这种方式写起来比较乱(又是双引号又是单引号的),还有可能被 sql 注入。这个时候就会想,能不能有占位符呢?答案是肯定的。
myconn.Open();
SqlCommand cmd = myconn.CreateCommand();
cmd.CommandText = "insert into custom values(@uid,@uname,@udepart,@uage,@uename,@upassword)";
cmd.Parameters.AddWithValue("@uid", uid.Text);
cmd.Parameters.AddWithValue("@uname", uname.Text);
cmd.Parameters.AddWithValue("@udepart", udepart.Text);
cmd.Parameters.AddWithValue("@uage", uage.Text);
cmd.Parameters.AddWithValue("@uename", uename.Text);
cmd.Parameters.AddWithValue("@upassword", upassword.Text);
if (cmd.ExecuteNonQuery() > )
{
this.Response.Write("<script language='javascript'>alert('增加成功!')</script>");
}
else
{
this.Response.Write("<script language='javascript'>alert('添加失败!')</script>");
}
myconn.Close();
ShowAll();
这段代码与之前代码的不同之处在于:
1.使用 Connection 对象的 CreateCommand 方法创建了一个SqlCommand 对象。
SqlCommand cmd = myconn.CreateCommand();
2.使用了Command 对象的 CommandText 属性写 sql 语句文本,当然也可以是存储过程的名称。
cmd.CommandText = "insert into custom values(@uid,@uname,@udepart,@uage,@uename,@upassword)";
3.使用了Command 对象的 Parameters 属性 输入参数。
cmd.Parameters.AddWithValue("@uid", uid.Text);
cmd.Parameters.AddWithValue("@uname", uname.Text);
cmd.Parameters.AddWithValue("@udepart", udepart.Text);
cmd.Parameters.AddWithValue("@uage", uage.Text);
cmd.Parameters.AddWithValue("@uename", uename.Text);
cmd.Parameters.AddWithValue("@upassword", upassword.Text);
嗯这样一改看起来就很舒服了^_^
修改、删除和增加的套路是差不多的。这里就不贴代码了。
.net 连接SqlServer数据库及基本增删改查的更多相关文章
- python连接sqlserver和MySQL实现增删改查
参考python核心编程 编写一个用户洗牌的脚本,根据用户输入,选择连接sqlserver或者MySQL,创建数据库.表,随机生成数据,并实现增删改查. 其中,为了兼容python2和python3, ...
- 【Python + Mysql】之用pymysql库连接Mysql数据库并进行增删改查操作
用pip下载pymysql并引用 具体请参考文章: <Python之MySQL数据库增删改查操作> <python3.6 使用 pymysql 连接 Mysql 数据库及 简单的增删 ...
- java连接mysql数据库 三 实现增删改查操作
同以前一样,先写一个数据库打开和关闭操作类 public class DBConnection { String driver = "com.mysql.jdbc.Driver"; ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- Android(java)学习笔记245:ContentProvider使用(银行数据库创建和增删改查的案例)
1. Android的四大组件: (1)Activity 用户交互的UI界面 (2)Service 后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...
- ORM 实现数据库表的增删改查
这次通过反射技术来实现一下数据库表的增删改查对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 注:引用时约束了以下几点: 数据 ...
- Flutter数据库Sqflite之增删改查
Flutter数据库Sqflite之增删改查 简介 sqflite是Flutter的SQLite插件,支持iOS和Android,目前官方版本是sqflite1.1.3 sqflite插件地址:h ...
- Vc数据库编程基础MySql数据库的表增删改查数据
Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...
- Android(java)学习笔记189:ContentProvider使用(银行数据库创建和增删改查的案例)
1. Android的四大组件: (1)Activity 用户交互的UI界面 (2)Service 后台运行的服务 (3)BroadcastReceiver 广播接收者 (4)ContentPro ...
随机推荐
- WPF开发的彩票程序(练手好例子) 附源码
前言 WPF是.NET最新的界面开发库,开发界面非常灵活!但是学习WPF难度也非常大. 应朋友之邀,编写了一个小程序.程序虽小,五脏俱全,WPF开发的灵活性可窥见一斑. 对于新手学习有很好的借鉴意义, ...
- spark2的编译
0.操作系统 centos:6.4 hadoop:2.5.0-cdh5.3.6 1.为什么要编译 spark 源码? 学习spark的第一步 就应该是编译源码,后期修改和调试,扩展集成的功能模块 2. ...
- openstack pike 集群高可用 安装 部署 目录汇总
# openstack pike 集群高可用 安装部署#安装环境 centos 7 史上最详细的openstack pike版 部署文档欢迎经验分享,欢迎笔记分享欢迎留言,或加QQ群663105353 ...
- OpenStack搭建遇到的问题
前言:对于像我这种新手来说,搭建OpenStack真的很费劲,因为我总是每配置一个服务,我就想弄懂,后来搭建过程很累人,因此我想了个办法,等我搭建出来再学.我这里将记录我从开始之初到我学习,再到我毕业 ...
- P1092 虫食算
题目传送:https://www.luogu.org/problem/show?pid=1092 #include <iostream> #include <cstring> ...
- 摘要算法---hashlib模块下MD5和SHA的使用
作用: 任意长度的字符串内容通过摘要算法都可以生成唯一序列摘要值,通过摘要算法,可以校验某个文档或者某组字符串是否被修改. 应用: 1.文件内容一致性校验 2.用户登录验证 常用方法 update() ...
- 【JDK1.8】JDK1.8集合源码阅读——IdentityHashMap
一.前言 今天我们来看一下本次集合源码阅读里的最后一个Map--IdentityHashMap.这个Map之所以放在最后是因为它用到的情况最少,也相较于其他的map来说比较特殊.就笔者来说,到目前为止 ...
- Hibernate学习(五)Hibernate 多对多映射
说到多对多关系,印象最深刻的就是大学的选修课.一个学生可以选修多门课程,一门课程可以有多个学生选修,学生所选的每一门课程还有成绩.这个场景的E-R图如下: 对于多对多的关系,我们通常会抽出一张中间表( ...
- axure扫盲
axure扫盲 zhuyuansj 2017.10.18 20:39* 字数 162 阅读 25评论 2喜欢 3 编辑文章 坐我旁边的前端今天正好初学axure,然后我就顺便学了几招比较基础的,这 ...
- NGUI_概述
序言:这是张三疯第一次开始NGUI插件的学习,刚开始学习,肯定有很多漏洞,后期会及时的补上的. 希望大家可以见谅,希望大佬多多指教. 一.什么是NGUI: NGUI是严格遵循KISS原则并用C#编写的 ...