VisualStudio2013内置SQLServer入门(二)--增删改查
前一篇 http://www.cnblogs.com/qixi233/p/4766451.html
这篇是sqlserver的操作

界面比较走心哈哈哈,将就着看,主要就是下面增删改查四个btn
对于sqlserver的操作基本就几个:
- 开关SqlConnection
- SqlCommand将"SQL命令"与"SQLConnection"连接
- 执行命令并根据返回值来将操作结果反馈给用户
现在开始操作:(代码比较简单,如果有书写不够规范之处请告知谢谢)
代码结构:

数据库视图:

0. 开关数据库连接
优先于四大操作的存在,每次用户操作之前开启,每次用户操作之后关闭
/// <summary>
/// 开启数据库
/// </summary>
private void openCon() {
string str_con = "server=(LocalDB)\\v11.0;database=master;integrated security=true";
con = new SqlConnection(str_con);
if (con.State == ConnectionState.Closed)
{
con.Open();
return;
}
if(con.State==ConnectionState.Broken){
con.Close();
con.Open();
}
} /// <summary>
/// 关闭数据库
/// </summary>
private void closeCon() {
if (con.State !=ConnectionState.Closed) {
con.Close();
con.Dispose();
}
}
- 查
- 根据id查询数据库中是否存在对应数据,有则返回,没有则提示
#region btn_查询
private void btn_check_Click(object sender, RoutedEventArgs e)
{
openCon();
//查询是否有id
if (tb_id.Text.Trim() != "")
{
string sql_cmd = "select userName,cardType from tb_card where cardID='" + tb_id.Text.Trim() + "'";
//可以试试用open直接返回SqlConnection对象,然后查询暂时不封装
using (cmd = new SqlCommand(sql_cmd, con))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
tb_name.Text = reader.GetString();
tb_type.Text = reader.GetString();
}
else
{
MessageBox.Show("查询失败");
}
}
}
}
else
{
MessageBox.Show("id输入框不得为空");
}
closeCon();
}
#endregion- 增
- 检查是否存在id,不存在则添加
#region btn_添加
private void btn_add_Click(object sender, RoutedEventArgs e)
{
openCon();
if (tb_id.Text.Trim() != "" && tb_name.Text.Trim() != "" && tb_type.Text.Trim() != "")
{
try
{
//查询是否有id
string cmd_check = "select userName,cardType from tb_card where cardID='" + tb_id.Text.Trim() + "'";
using (cmd = new SqlCommand(cmd_check, con))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
{
MessageBox.Show("数据库中已有此卡信息,无法添加");
return; //有重复就退出不处理
}
}
}
//插入
string cmd_add = String.Format("insert into tb_card(cardID,userName,cardType) values ({0},{1},{2})",
"\'" + tb_id.Text.Trim() + "\'", "N\'" + tb_name.Text.Trim() + "\'", "\'" + tb_type.Text.Trim() + "\'");
using (cmd = new SqlCommand(cmd_add, con))
{
if (cmd.ExecuteNonQuery() != -)
{
MessageBox.Show("添加成功");
}
}
}
catch (Exception ex)
{
MessageBox.Show("添加失败,详细信息:" + ex.ToString());
}
}
else
{
MessageBox.Show("信息不得为空");
}
closeCon();
}
#endregion
- 改
- 检测是否存在id,若存在则修改,不存在则告知用户
#region btn_更新
private void btn_update_Click(object sender, RoutedEventArgs e)
{
openCon();
if (tb_id.Text.Trim() != "" && tb_name.Text.Trim() != "" && tb_type.Text.Trim() != "")
{
try
{
//查询id是否存在
string cmd_check = "select userName,cardType from tb_card where cardID='" + tb_id.Text.Trim() + "'";
using (cmd = new SqlCommand(cmd_check, con))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (!reader.Read())
{
MessageBox.Show("数据库中没有此卡信息,无法修改");
return;
}
}
}
string cmd_update = String.Format("update tb_card set userName={0},cardType={1} where cardID={2}",
"N\'" + tb_name.Text.Trim() + "\'", "\'" + tb_type.Text.Trim() + "\'", "\'" + tb_id.Text.Trim() + "\'");
using (cmd = new SqlCommand(cmd_update, con))
{
if(cmd.ExecuteNonQuery()!=-){
MessageBox.Show("更新成功");
}
}
}
catch (Exception ex)
{
MessageBox.Show("更新失败,详细信息:" + ex.ToString());
}
}
else
{
MessageBox.Show("信息不得为空");
}
closeCon();
}
#endregion
- 删
- 检测id是否存在,存在则删除该行,不存在则告知用户
#region btn_删除
private void btn_delete_Click(object sender, RoutedEventArgs e)
{
openCon();
if (tb_id.Text.Trim().Length != )
{
try
{
string cmd_check = "select * from tb_card where cardID='" + tb_id.Text.Trim() + "'";
using (cmd = new SqlCommand(cmd_check, con))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (!reader.Read())
{
MessageBox.Show("数据库中没有此卡信息,无法删除");
return;
}
}
}
string cmd_delete = "delete from tb_card where cardID='" + tb_id.Text.Trim() + "'";
using (cmd = new SqlCommand(cmd_delete, con))
{
if (cmd.ExecuteNonQuery() != -)
{
MessageBox.Show("删除成功");
}
}
}
catch (Exception ex)
{
MessageBox.Show("删除失败,详细信息:" + ex.ToString());
}
}
else {
MessageBox.Show("id不得为空");
}
closeCon();
}
#endregion
大家最喜欢的直接上代码上完了,再说说我遇到的几个坑:
第一个就是一开始不知道为什么只能添加数字,连英文字母都不能添加,后来经过查看代码中的sql命令发现是在有英文的地方没有加上''将其包围起来;
第二个就是每次中文添加之后就乱码,后来知道有nvarchar这种东西,然后再再添加中文的地方之前加个N,例如:七喜--》N'七喜',这样就搞定了
第三个就是cmd命令的执行,我一开始无论增删改查都用ExecuteReader,但是觉得怪怪的,最后看stackoverflow的大神的答案和官方文档才知道一般增删改都用ExecuteNonQuery
最后发几条学习过程中参考的链接:
http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html 21分钟 MySQL 入门教程
https://msdn.microsoft.com/en-us/library/ms187752.aspx 微软的数据库类型参考
http://www.w3school.com.cn/sql/sql_datatypes.asp w3c的各种数据库类型参考
http://stackoverflow.com/questions/5349114/executenonquery stackoverflow关于executenonquery使用
有神马地方说错或者有神马意见欢迎提出谢谢
VisualStudio2013内置SQLServer入门(二)--增删改查的更多相关文章
- VisualStudio2013内置SQLServer入门
最近做项目老大要求用到sqlserver,但是这项目的数据库只是本地演示用并不复杂,于是决定试试VisualStudio2013内置的SQLServer.对于这个东西的了解并没有多少,然后项目初学习的 ...
- mybatis入门(二):增删改查
mybatis的原理: 1.mybatis是一个持久层框架,是apache下的顶级项目 mybatis托管到googlecode下,目前托管到了github下面 2.mybatis可以将向prepar ...
- mybatis入门二-----增删改查
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MyBatis学习系列二——增删改查
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...
- Mybatis入门之增删改查
Mybatis入门之增删改查 Mybatis如果操作成功,但是数据库没有更新那就是得添加事务了.(增删改都要添加)----- 浪费了我40多分钟怀疑人生后来去百度... 导入包: 引入配置文件: sq ...
- Redis入门之增删改查等常用命令总结
Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多线程可能产生的竞争问题. 作者对于Redis源代 ...
- Hibernate入门_增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private ...
- MyBatis入门2_增删改查+数据库字段和实体字段不一致情况
本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 当数据库字段和实体bean中属性不一致时 之前数据库P ...
- JDBC【1】-- 入门之增删改查
目录 1.jdbc是什么 2.使用IDEA开发 2.1 创建数据库,数据表 2.2 使用IDEA创建项目 1.jdbc是什么 JDBC(Java DataBase Connectivity,java数 ...
随机推荐
- 【HDOJ】1429 胜利大逃亡(续)
BFS+状态压缩,做了很多状态压缩了.今晚把八数码问题给搞定了. #include <iostream> #include <queue> #include <cstri ...
- Java 语言中 Enum 类型的使用介绍
Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...
- 【JS】JS外联不执行,内联执行
匹配域名http://lb.qq.com 或 http://lb.l.qq.com
- Quartus中例化工程
一般的例化工程,需要将要例化的对象的硬件语言放入到当前工程中,比如A要例化B,需要将B的编程文件加入当前工程进来. 还有一种方法不用这么麻烦,A工程用要例化B时,在library添加B的工程路径,就可 ...
- Mac下搭建Eclipse Android开发环境
之前一直是用windows搞android开发,但windows这个性能也真是让人醉了,终于一狠心,砸锅卖铁买了Mac.然后就开始在Mac上搭建android开发环境, 其实也不麻烦,关键是找准下载地 ...
- c++函数模板声明与定义相分离
最近在仿写stl,发现stl源码中将模板的声明与定义写在一起实在很不优雅.自己尝试用“传统”方法,及在.h文件里声明,在.cpp文件里定义,然后在main函数里包含.h头文件,这样会报链接错误.这是因 ...
- [Java] HashMap 导致的高 CPU 使用率
今天在生产环境遇到一个问题,Java 应用程序的 cpu 使用比例很高,导致整台机器的 cpu 使用率高达 90% ,正常情况下是 20% 左右. 把 Thread dump 导出来,利用 IBM T ...
- Ubuntu 虚拟机环境安装配置指南
1. 安装Ubuntu到虚拟机. 到 Ubuntu 上下载桌面版iso文件,加载到虚拟机,开始安装,傻瓜式操作不用多说.2. 调整屏幕分辨率. 虚拟机软件我是用的virtual box,在工具栏上设备 ...
- reloadData should be in main thread
reloadData should be called in main thread, so if you call it in work thread, you should call it as ...
- 【大盛】HTC one/M7 ROM 最新本地化OrDroid8.2.6 高级、快速设置 永久root 更多自定义 稳定 流畅
了解更多:点击下载ROM和学习更多 ROM版本 HTC-one_OrDroid8.2.6 ROM作者 雪狼团队·大盛 http://weibo.com/DaShengdd Android版本 Andr ...