SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号
SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号
自己学习笔记,转载请注明出处,谢谢!---酸菜
1.什么是ADO.NET
ADO.NET是一组类库,这组类库可以让我们通过程序的方式访问数据库,并以各种方式操作存储在其中的数据;
ADO.NET是基于.NET FrameWork,与.NET FrameWork类库的其余部分是高度集成的
2.连接数据库的步骤
①创建连接字符串
Data Source=XXX-PC; Initial Catalog=MyDataBase; Integrated Security=True;
连接服务器实例 连接数据库 是否Windows验证登录
Data Source=localhost/192.168.1.1; Initial Catalog=MyDataBase; User ID=sa; Password=123;
连接服务器实例 连接数据库 数据库账户密码验证登录
server=.;database=MyDataBase;uid=sa;pwd=123;----以前的老式写法,现在也在用;
string conn="Data Source=XXX-PC; Initial Catalog=MyDataBase; Integrated Security=True";
②创建连接对象,并把连接字符串传进来;
SqlConnection sqlCon=new SqlConnection(conn); //SqlConnection 是SQL Server的类,其他数据库有对应的类;
③打开连接,测试连接/关闭连接,释放资源;
sqlCon.Open();
sqlCon.Close();
sqlCon.Dispose();
如果在连接时使用using 如:
using (SqlConnection sqlCon=new SqlConnection(conn))
{
sqlCon.Open();
//如果使用using 就不用sqlCon.Close();和sqlCon.Dispose();因为using内部已经写好了Dispose,而SQLConnection中的Dispose中写好了Close,所以两者都不用再写;
}
④创建一个可以执行Sql语句的命令对象
string sql="insert into Users values()";
using(SqlCommand cmd=new SqlCommand()/(sql,sqlCon))
{
//因为SQLCommand对象也需要释放,所以此处用了using.
//如果使用无参的的构造函数,可 cmd.CommandText=sql; cmd.Connection=sqlCon;
}
⑤执行语句
无论执行什么SQL语句,调用以下三个方法都可以执行出来结果,但是通常有使用习惯:
<1> cmd.ExecuteNonQuery();//执行 insert /delete/update 语句时使用;
这个方法返回值是int类型,表示执行insert/delete/update 语句后影响的行数
注意:ExecuteNonQuery()只有执行 insert/delete/update语句时会返回影响行数,执行其他的SQL语句时,永远返回的是-1;
<2>cmd.ExecuteScalar(); //查询单行单列结果集时 使用;
这个方法返回值是object类型,当查询语句是使用聚合函数,那么该方法返回不可能是null值,因为聚合函数返回没有null值;如果不是聚合函数可能返回null值,所以使用返回值之前先判断是否为null;
<3>cmd.ExecuteReader();//查询多行多列结果集时使用;
这个方法返回值是SqlDataReader类型,通过该方法将给定的SQL语句在数据库中执行,但是没有返回给程序,只给程序返回一个reader对象,就是用这个对象来获取数据的.
using (SqlDataReader reader=cmd.ExecuteReader())
{
//需要用reader对象一条一条获取数据
//在获取数据之前,先判断一下本次查询是否查到数据;
if(reader.HasRows)//如果有数据返回true,否则false
{
//有数据,需要用reader一条一条获取
//每次获取数据前,都先调用reader.Read()方法,向后移动一条数据,如果成功移动到一条数据上, 返回true;否则false
while(reader.Read())
{
//获取当前reader指向的数据
//reader.FieldCount 可以查出当前语句查询出来的列数;
for (int i =0;i<reader.fieldcount;i++)
{
Console.WriteLine(reader[i]);
//reader[i];reader.GetValue(i); reader[""]列名称;
//当遇到数据为null值,通过reader.GetValue()或reader[]索引器获取列值,返回的是DBNull.Value 不是C#中的null值,而DBNull.Value.ToString()后是空字符串,所以并不报错;
}
}
}
else
{
Console.WriteLine("没有查到任何数据!");
}
}
<4>DataReader的特点:
只读,只进.只能通过reader读取数据,不能修改.reader只能一条一条向前移动,不能向后,也不能跳跃;
使用reader时必须保证连接是否打开状态.当reader使用完毕后, 必须把reader关闭,释放.同时释放连接对象;
默认情况下, reader独占一个连接对象;
3.获取插入数据的自增列
① insert into Table output inserted.ID(自增列或者要取值的列) values('Hello','英语课');
②insert into Table values('Hello','语文课') select @@identity; 这个相对上面那个 因为@@identity是全局变量 所以可能会出错,取到别人执行的最新的自增列;
4.防SQL注入
①SQL注入:使用SQL拼接的方式不安全,会出现SQL注入的问题;解决方法:使用带参数的SQL语句或者使用存储过程.(带参数的SQL 在SQL执行过程中内部会转为存储过程执行)
②使用带参数的SQL语句;如果SQL语句中有参数(以@符号开头),那么必须给Command对象提供参数和参数的值;
using (SqlCommand cmd=new SqlCommand(sql,con))
{
SqlParameter paramUserID=new SqlParameter("@UserID",SqlDbType.varchar,50){Value=txtUserId.Text.Trim()}; //使用对象初始化器
SqlParameter parampwd=new SqlParameter("@pwd",SqlDbType.varchar,50){Value=txtpwd.Text.Trim()}; //使用对象初始化器
cmd.Parameters.Add(paramUserID);
cmd.Parameters.Add(parampwd);
con.Open();
int t=(int) cmd.ExecuteScalar();
if(t>0){}
}
推荐简化版:
SqlParamerter [] params=new SqlParameter[]{
new SqlParameter ("@UserID",SqlDbType.Varchar,50){Value=txtUserID.Text}),
new SqlParameter("@pwd",SqlDbType.Varchar,50){Value=txtpwd.Text}) }
cmd.Parameters.AddRange(params);
另一种不推荐方法:
cmd.Parameters.AddWithValue("@UserID",txtUserId.Text);
cmd.Parameters.AddWithValue("@pwd",txtpwd.Text);
注:所有对数据库引擎的操作在这里都可以监视到 工具→SQL Server Profiler(SQL Server事件探查器)→连接→运行.
转载于:https://www.cnblogs.com/sauerkraut/p/6665939.html
SQL Server之 (四) ADO增删查改 登录demo 带参数的sql语句 插入自动返回行号相关推荐
- SQL Server R2 报表服务,BIDS中预览带参数的报表,整个BIDS突然关闭
数据库版本:SQL Server R2 企业版 SP1 + CU 6 操作系统:Windows Server 2003 问题描述:在BIDS中开发报表,预览带有参数的报表时,点查看报表,整个BIDS全 ...
- flask + 蓝图 用 sqlalchemy 对 mysql 进行 增删查改 的 demo
main.py import uuid # UUID: 通用唯一标识符 # from flask import Flask from flask import Flask, request, json ...
- (4) hibernate增删查改+批量操作+类似Mybatis动态sql
简介 采用spring + hibernate + freemaker+ maven搭建起来的一个hibernate增删查改和 类似mybatis动态sql查询的一个案例 增删查改demo + 动态s ...
- ASP.NET两个关联的表的增删查改
两个关联的表的增删查改 主要用了参数 SqlParameter,事务执行多条sql 表Users ID int Name varchar 表UsersDetail ID ...
- MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔
文章目录 前文知识点回顾 正文 :对数据表进行"增删查改"操作 新增操作 - insert 关键字 查找语句(基础操作) - select关键字 - 重点!!!!!!!! 1.最基 ...
- SQL Server在本地计算机上用SMSS登录不上,错误消息:(Microsoft SQL Server, Error: 18456)...
今天遇到了一个奇怪的问题,公司目前在SQL Server上都采用AD域账号登录,由于账号人数众多,所以我们建立了一个AD Group(域组),将大家的AD账号加入了这个AD Group,然后我们将这个 ...
- server sql 中类型为bit应该插入什么值_关于SQL Server中bit类型字段增删查改的一些事...
前言 本文主要给大家介绍了关于SQL Server中bit类型字段增删查改的一些事,话说BIT类型字段之前,先看"诡异"的一幕,执行Update成功,但是查询出来的结果依然是1,而 ...
- 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器
1 设计目的 <Web应用开发课程设计>是实践性教学环节之一,是<Web程序设计>课程的辅助教学课程.通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课 ...
- 常用SQL语句(增删查改、合并统计、模糊搜索)
转自:http://www.cnblogs.com/ljianhui/archive/2012/08/13/2695906.html 常用SQL语句 首行当然是最基本的增删查改啦,其中最重要的是查. ...
最新文章
- linux apache无法启动,linux mysq 无法启动 apache 无法启动
- 这个项目团队能少了谁?
- 编译linux内核报错‘make menuconfig‘ requires the ncurses libraries
- MySQL 无效数字_ORA-01722: 无效数字的解决方法
- python语言中整数1010的二进制表示_爱校码 - Python 语言基础二
- ASP.NET MVC:@helper 不能调试
- 5.6 前端开发日报
- eclipse 中文乱码
- 如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程
- CF540 B 贪心
- 输出正反等腰三角形(菱形)
- SQL Server 按某一字段分组取最大(小)值所在行的数据
- C# Newtonsoft.Json用法
- 【题目记录】——2021 年百度之星·程序设计大赛 - 初赛二
- 怎么使用小爱同学音响_小爱同学怎么用
- adsl双网卡共享上网的设置(win2003)
- pcre2 知:介绍
- 我的Python心路历程 第十期 (10.12 股票实战可视化之分位数)
- html适配手机 响应式,移动端适配(响应式)
- 用CBF做DOA原理与MATLAB实例