前一篇 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();
}
}
  1.   查
    1.   根据id查询数据库中是否存在对应数据,有则返回,没有则提示
    2.         #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
    1.   检查是否存在id,不存在则添加
    2.         #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
    1.   检测是否存在id,若存在则修改,不存在则告知用户
    2.         #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
    1.   检测id是否存在,存在则删除该行,不存在则告知用户
    2.         #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入门(二)--增删改查的更多相关文章

  1. VisualStudio2013内置SQLServer入门

    最近做项目老大要求用到sqlserver,但是这项目的数据库只是本地演示用并不复杂,于是决定试试VisualStudio2013内置的SQLServer.对于这个东西的了解并没有多少,然后项目初学习的 ...

  2. mybatis入门(二):增删改查

    mybatis的原理: 1.mybatis是一个持久层框架,是apache下的顶级项目 mybatis托管到googlecode下,目前托管到了github下面 2.mybatis可以将向prepar ...

  3. mybatis入门二-----增删改查

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  4. MyBatis学习系列二——增删改查

    目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring 数据库的经典操作:增删改查. 在这一章我们主要说明一下简单的查询和增删改, ...

  5. Mybatis入门之增删改查

    Mybatis入门之增删改查 Mybatis如果操作成功,但是数据库没有更新那就是得添加事务了.(增删改都要添加)----- 浪费了我40多分钟怀疑人生后来去百度... 导入包: 引入配置文件: sq ...

  6. Redis入门之增删改查等常用命令总结

    Redis是用C语言实现的,一般来说C语言实现的程序"距离"操作系统更近,执行速度相对会更快. Redis使用了单线程架构,预防了多线程可能产生的竞争问题. 作者对于Redis源代 ...

  7. Hibernate入门_增删改查

    一.Hibernate入门案例剖析:  ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private ...

  8. MyBatis入门2_增删改查+数据库字段和实体字段不一致情况

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 当数据库字段和实体bean中属性不一致时 之前数据库P ...

  9. JDBC【1】-- 入门之增删改查

    目录 1.jdbc是什么 2.使用IDEA开发 2.1 创建数据库,数据表 2.2 使用IDEA创建项目 1.jdbc是什么 JDBC(Java DataBase Connectivity,java数 ...

随机推荐

  1. 【HDOJ】1429 胜利大逃亡(续)

    BFS+状态压缩,做了很多状态压缩了.今晚把八数码问题给搞定了. #include <iostream> #include <queue> #include <cstri ...

  2. Java 语言中 Enum 类型的使用介绍

    Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...

  3. 【JS】JS外联不执行,内联执行

    匹配域名http://lb.qq.com 或 http://lb.l.qq.com

  4. Quartus中例化工程

    一般的例化工程,需要将要例化的对象的硬件语言放入到当前工程中,比如A要例化B,需要将B的编程文件加入当前工程进来. 还有一种方法不用这么麻烦,A工程用要例化B时,在library添加B的工程路径,就可 ...

  5. Mac下搭建Eclipse Android开发环境

    之前一直是用windows搞android开发,但windows这个性能也真是让人醉了,终于一狠心,砸锅卖铁买了Mac.然后就开始在Mac上搭建android开发环境, 其实也不麻烦,关键是找准下载地 ...

  6. c++函数模板声明与定义相分离

    最近在仿写stl,发现stl源码中将模板的声明与定义写在一起实在很不优雅.自己尝试用“传统”方法,及在.h文件里声明,在.cpp文件里定义,然后在main函数里包含.h头文件,这样会报链接错误.这是因 ...

  7. [Java] HashMap 导致的高 CPU 使用率

    今天在生产环境遇到一个问题,Java 应用程序的 cpu 使用比例很高,导致整台机器的 cpu 使用率高达 90% ,正常情况下是 20% 左右. 把 Thread dump 导出来,利用 IBM T ...

  8. Ubuntu 虚拟机环境安装配置指南

    1. 安装Ubuntu到虚拟机. 到 Ubuntu 上下载桌面版iso文件,加载到虚拟机,开始安装,傻瓜式操作不用多说.2. 调整屏幕分辨率. 虚拟机软件我是用的virtual box,在工具栏上设备 ...

  9. 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 ...

  10. 【大盛】HTC one/M7 ROM 最新本地化OrDroid8.2.6 高级、快速设置 永久root 更多自定义 稳定 流畅

    了解更多:点击下载ROM和学习更多 ROM版本 HTC-one_OrDroid8.2.6 ROM作者 雪狼团队·大盛 http://weibo.com/DaShengdd Android版本 Andr ...