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语句 插入自动返回行号相关推荐

  1. SQL Server R2 报表服务,BIDS中预览带参数的报表,整个BIDS突然关闭

    数据库版本:SQL Server R2 企业版 SP1 + CU 6 操作系统:Windows Server 2003 问题描述:在BIDS中开发报表,预览带有参数的报表时,点查看报表,整个BIDS全 ...

  2. flask + 蓝图 用 sqlalchemy 对 mysql 进行 增删查改 的 demo

    main.py import uuid # UUID: 通用唯一标识符 # from flask import Flask from flask import Flask, request, json ...

  3. (4) hibernate增删查改+批量操作+类似Mybatis动态sql

    简介 采用spring + hibernate + freemaker+ maven搭建起来的一个hibernate增删查改和 类似mybatis动态sql查询的一个案例 增删查改demo + 动态s ...

  4. ASP.NET两个关联的表的增删查改

    两个关联的表的增删查改 主要用了参数 SqlParameter,事务执行多条sql 表Users ID         int Name   varchar 表UsersDetail ID       ...

  5. MySQL - 对数据表进行“增删查改”的基础操作 - 细节狂魔

    文章目录 前文知识点回顾 正文 :对数据表进行"增删查改"操作 新增操作 - insert 关键字 查找语句(基础操作) - select关键字 - 重点!!!!!!!! 1.最基 ...

  6. SQL Server在本地计算机上用SMSS登录不上,错误消息:(Microsoft SQL Server, Error: 18456)...

    今天遇到了一个奇怪的问题,公司目前在SQL Server上都采用AD域账号登录,由于账号人数众多,所以我们建立了一个AD Group(域组),将大家的AD账号加入了这个AD Group,然后我们将这个 ...

  7. server sql 中类型为bit应该插入什么值_关于SQL Server中bit类型字段增删查改的一些事...

    前言 本文主要给大家介绍了关于SQL Server中bit类型字段增删查改的一些事,话说BIT类型字段之前,先看"诡异"的一幕,执行Update成功,但是查询出来的结果依然是1,而 ...

  8. 初学jsp课,一个基于jsp+javabean+servlet+sql server小型房源网站,实现了用户表,房源表,及留言板的增删查改。使用deamwear编译器

    1 设计目的 <Web应用开发课程设计>是实践性教学环节之一,是<Web程序设计>课程的辅助教学课程.通过课程设计,使学生掌握Web网站的基本概念,结合实际的操作和设计,巩固课 ...

  9. 常用SQL语句(增删查改、合并统计、模糊搜索)

    转自:http://www.cnblogs.com/ljianhui/archive/2012/08/13/2695906.html 常用SQL语句 首行当然是最基本的增删查改啦,其中最重要的是查. ...

最新文章

  1. linux apache无法启动,linux mysq 无法启动 apache 无法启动
  2. 这个项目团队能少了谁?
  3. 编译linux内核报错‘make menuconfig‘ requires the ncurses libraries
  4. MySQL 无效数字_ORA-01722: 无效数字的解决方法
  5. python语言中整数1010的二进制表示_爱校码 - Python 语言基础二
  6. ASP.NET MVC:@helper 不能调试
  7. 5.6 前端开发日报
  8. eclipse 中文乱码
  9. 如何为火狐浏览器添加附加组件?火狐浏览器附加组件管理器使用教程
  10. CF540 B 贪心
  11. 输出正反等腰三角形(菱形)
  12. SQL Server 按某一字段分组取最大(小)值所在行的数据
  13. C# Newtonsoft.Json用法
  14. 【题目记录】——2021 年百度之星·程序设计大赛 - 初赛二
  15. 怎么使用小爱同学音响_小爱同学怎么用
  16. adsl双网卡共享上网的设置(win2003)
  17. pcre2 知:介绍
  18. 我的Python心路历程 第十期 (10.12 股票实战可视化之分位数)
  19. html适配手机 响应式,移动端适配(响应式)
  20. 用CBF做DOA原理与MATLAB实例

热门文章

  1. 为什么c语言软件调试不出来,急急急……求指导,程序调试不出来
  2. 月老办事处月云开发微信小程序源码
  3. 通过QQ2010协议技术详细分析QQ登陆过程
  4. 用dynamic增强C#泛型表达力
  5. Swift中文教程(十八) 类型检查
  6. 视差滚动不适合网页的5个原因
  7. lua——赢三张牌型处理相关算法(下)——牌型比较
  8. 如何用Pygame写游戏(二十)
  9. LeetCode 434. Number of Segments in a String
  10. 【AI视野·今日CV 计算机视觉论文速览 第165期】Mon, 21 Oct 2019