ADO知识的运用二(Day 28)
可能是最近有些沉迷于电视剧了,所以,好多天都没写总结了。我知道这样不好,但又老管不住自己,也许是我自控力太差了吧......呵呵,如果在不写总结,可能以后就会成为习惯了。所以今天要赶紧补上......今天就先写一下前几天所学的几个小程序吧。
用户登录程序:
窗体界面:

数据库信息:

主要代码:
首先,要引进命名空间using System.Data.SqlClient;
private void btnok_Click(object sender, EventArgs e) //登录按钮的事件
{
string user = this.txtname.Text;
string pwd = this.txtpwd.Text; //创建连接字符串
string connstr = "Data Source=.;Initial Catalog=db_buiness;Integrated Security=True"; //打开连接
using (SqlConnection conn = new SqlConnection(connstr))
{
conn.Open(); //执行数据库操作 (向SqlCommand的Parameters中添加参数)
string sqltext = "select * from info where name=@user and pwd=@pwd";
SqlParameter sp = new SqlParameter("@user", user);
SqlParameter sp1 = new SqlParameter("@pwd", pwd);
using (SqlCommand cmd = new SqlCommand(sqltext, conn))
{
cmd.Parameters.Add(sp);
cmd.Parameters.Add(sp1); DataTable dt = new DataTable(); //定义一个DateTable类型来存放数据 using (SqlDataAdapter sda = new SqlDataAdapter(cmd))//创建数据适配器
{
sda.Fill(dt); //填充数据
} if (dt.Rows.Count > )
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("登录失败");
}
} }
} private void btnclo_Click(object sender, EventArgs e)
{
this.txtname.Text= "";
this.txtpwd.Text = ""; }
运行结果:

由于每次在对数据库中的表进行操作时,总要去连接数据库,和调用一些SqlCommand的方法。所以,我们可以把这些定义成一个类SqlHelper(里面的方法为静态方法),在用的时候直接调用就行。例如上面的那个用户登录,我们可以用这种方法写。
SqlHelper类
class SqlHelper
{
//连接数据库
static string constr = "Data Source=.;Initial Catalog=db_buiness;Integrated Security=True"; // SqlCommand对象的主要方法 //ExecuteNonQuery用于执行SQL语句,并返回SQL语句所影响的行数,一般用于执行Insert、Delete、Update等命令
public static int ExecuteNonQuery (string sqltext,params SqlParameter[]parms)
{
using (SqlConnection conn = new SqlConnection(constr))
{
conn.Open();
using (SqlCommand comm =new SqlCommand ())
{
comm.CommandText = sqltext;
comm.Connection = conn;
comm.Parameters.AddRange(parms);
return comm.ExecuteNonQuery(); //返回受影响的行数
}
}
}
//ExecuteScalre方法用于执行查询语句,但返回的是首行首列,该方法只适用于只有一个结果的查询,如可以在使用Sum,Avg,Max,Min等函数的SQL语句
public static int ExecuteScalre(string sqltext, params SqlParameter[] parms)
{
using (SqlConnection conn=new SqlConnection (constr))
{
conn.Open();
using (SqlCommand comm= new SqlCommand ())
{
comm.Connection = conn;
comm.CommandText = sqltext;
comm.Parameters.AddRange(parms);
return (int)comm.ExecuteScalar(); //返回首行首列
}
} }
public static DataTable ExecuteDataTable (string sqltext,params SqlParameter[]parms)
{
using (SqlConnection conn=new SqlConnection (constr))
{
conn.Open(); using (SqlCommand comm=new SqlCommand ())
{
comm.Connection = conn;
comm.CommandText = sqltext;
comm.Parameters.AddRange(parms);
DataTable dt = new DataTable(); //创建一个临时容器
using (SqlDataAdapter sda=new SqlDataAdapter(comm))
{
sda.Fill(dt);
}
return dt;
}
}
}
// ExecuteReader用于执行查询语句,返回的是一个DataReader类型的集合
public static SqlDataReader ExecuteSqlDataReader(string sqltext,params SqlParameter[]parms)
{
using (SqlConnection conn=new SqlConnection (constr))
{
conn.Open();
using (SqlCommand comm=new SqlCommand (sqltext,conn))
{
comm.Parameters.AddRange(parms);
using (SqlDataReader da= comm.ExecuteReader(CommandBehavior.CloseConnection)) //关闭连接
{
return da;
}
}
}
}
在登录btton按钮事件下直接调用
private void btnlogin_Click(object sender, EventArgs e)
{
//首先得到用户输入的用户名和密码
string name = this.txtname.Text.Trim();
string pwd = this.txtpwd.Text.Trim();
string sqltext = "select count(*) from student where uname=@uname and upwd=@upwd";
SqlParameter[] parms = { new SqlParameter("@uname",name), new SqlParameter ("upwd",pwd) }; if (SqlHelper.ExecuteScalre(sqltext, parms) > ) //调用SqlHelper的ExecuteScalre方法
{
MessageBox.Show("登陆成功");
}
else
{
MessageBox.Show("登录失败");
}
}
运行结果:

由于时间的关系,今天先写到这里了,明天总结三层架构。加油!
ADO知识的运用二(Day 28)的更多相关文章
- 使用ADO实现BLOB数据的存取 -- ADO开发实践之二
使用ADO实现BLOB数据的存取 -- ADO开发实践之二 http://www.360doc.com/content/11/0113/16/4780948_86256633.shtml 一.前言 在 ...
- [SQL] SQL 基础知识梳理(二) - 查询基础
SQL 基础知识梳理(二) - 查询基础 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5904824.html 序 这是<SQL 基础知识梳理( ...
- Go基础知识梳理(二)
Go基础知识梳理(二) 简单函数的定义 //有参数有返回值 func sum(a int, b int) int { return a + b } //无返回值 func sum(a int, b i ...
- go语言基础知识笔记(二)之数组和切片
数组和切片知识用的也是比较多,的给我们工作带来很大的便利 (一) 数组 定义:在golang中数组的长度是不可变,数组存放要求是同一种数据类型 //golang中数组定义的四种方法1.先声明,后赋值 ...
- python---基础知识回顾(二)(闭包函数和装饰器)
一.闭包函数: 闭包函数: 1.在一个外函数中定义了一个内函数 2.内函数里运用了外函数的临时变量,而不是全局变量 3.并且外函数的返回值是内函数的引用.(函数名,内存块地址,函数名指针..) 正确形 ...
- 【SQL】- 基础知识梳理(二) - SQL简介
一.引言 在梳理这些知识之前,说实话,如果有人问我SQL是什么?我可能会回答就是“INSERT,DELETE,UPDATE,SELECT”语句呗,还能是啥. 二.SQL概念 SQL是什么? SQL是S ...
- java基础知识一览(二)
一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...
- c#基础知识梳理(二)
上期回顾 - https://www.cnblogs.com/liu-jinxin/p/10818256.html 一.变量 一个变量只不过是一个供程序操作的存储区的名字.在 C# 中,每个变量都有一 ...
- c++11-17 模板核心知识(十二)—— 模板的模板参数 Template Template Parameters
概念 举例 模板的模板参数的参数匹配 Template Template Argument Matching 解决办法一 解决办法二 概念 一个模板的参数是模板类型. 举例 在c++11-17 模板核 ...
随机推荐
- Floyd算法应用-医院选址问题
1)问题描述 n个村庄之间的交通图可以用有向网图来表示,图中边<vi, vj>上的权值表示从村庄i到村庄j的道路长度.现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄 ...
- 文件上传与下载/Mail
文件上传与下载 提交方式:post 表单中要有文件上传的表单项 input type=”file”而且必须有name属性 表单类型要加入 encytype=”mulitpart/form-data” ...
- 一封在JSP课程结束之后给学生的信
<JSP应用程序设计>这门课终于考完了,虽然题目有点难,但我看大部分同学考的还可以,算上平时成绩应该都能拿到一个满意的分数. 再次感谢大家一个学期来对我的支持,跟大家一起的这个学期很开心, ...
- Cocoa 之 Core Data(2)- 代码示例
前面详 细讲解了 Core Data 的框架以及设计的类,下面我们来讲解一个完全手动编写代码 使用这些类的示例,这个例子来自 苹果官方示例.在这个例子里面,我们打算做这样一件事 情:记录程序运行记录( ...
- C-Free 您不能使用调试解决方案
什么时候C-Free 当您调试 找不到gdb.exe解决方案 http://www.programarts.com/ C-Free 官方网站 下载Mingw或者其他编译器 版权声明:本文博主原创文章. ...
- Linux学习之rcp命令
rcp代表“remote file copy”(远程文件拷贝).该命令用于在计算机之间拷贝文件.rcp命令有两种格式.第一种格式用于文件到文件的拷贝:第二种格式用于把文件或目录拷贝到另一个目录中. 1 ...
- 在IE6/7下表格td标签没有内容时不显示边框?
有以下几种方法: 1.在单元格中加入一个空格.这样: <td> </td> 2.直接在table里这样写:<table border="0" cell ...
- jenkins 配置安全邮件
Jenkins网页设置界面只支持SSL协议 ,对于STARTTLS协议,需要修改jenkins的配置文件去支持基于TLS的SMTP认证 1.修改jenkins配置文件 打开jenkins配置文件/et ...
- GoF——组合模式
组合模式:将对象组合成树形结构以表示“部分-真题”的结构层次.组合模式使得用户对单个对象和组合对象的使用具有一致性. 结构图: using System; using System.Collectio ...
- Repeat Number
Problem B: Repeat Number Time Limit: 1 Sec Memory Limit: 32 MB Description Definition: a+b = c, if ...