SqlConnection
连接池:可以通过连接字符串配置连接池。
对象池技术:HttpApplication :Asp.Net
生产者 消费者。 线程。
应用程序跟数据连接非常耗时,而且连接使用非常频繁,使用连接池可以提高连接对象重用效率
SqlCommand
ExcuteNonQuery() 执行非查询类的sql脚本,返回影响的行数
ExcuteScalar() 执行sql,返回第一行第一列的值
ExcuteReader() 返回SqlDataReader
Reader默认指向 数据行
Read()方法执行一次,指针向下走一次。

省市选择。
导出数据

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Drawing;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13.  
  14. namespace _02ProvinceCitySelect
  15. {
  16. public partial class MainFrm : Form
  17. {
  18. public MainFrm()
  19. {
  20. InitializeComponent();
  21. }
  22.  
  23. private void MainFrm_Load(object sender, EventArgs e)
  24. {
  25. //加载数据库中的所有的省的数据
  26. string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString;
  27.  
  28. //创建链接对象
  29. using (SqlConnection conn =new SqlConnection(connStr))
  30. {
  31. using (SqlCommand cmd =conn.CreateCommand())
  32. {
  33. conn.Open();//***********8
  34. cmd.CommandText =@"select AreaId, AreaName, AreaPid from [dbo].[AreaFull] where AreaPId=0";
  35. using (SqlDataReader reader = cmd.ExecuteReader())
  36. {
  37. while ( reader.Read())
  38. {
  39. //int AreadId = int.Parse(reader["AreaId"].ToString());
  40. //把表格的数据转换成 对象数据
  41. AreaInfo areaInfo = new AreaInfo();
  42. areaInfo.AreaId = int.Parse(reader["AreaId"].ToString());
  43. areaInfo.AreaName = reader["AreaName"].ToString();
  44. areaInfo.AreaPId = int.Parse(reader["AreaPId"].ToString());
  45. //把省的信息放到 ComboBox中。ComboBox显示信息是 Item对象的ToString()
  46. this.cbxProvince.Items.Add(areaInfo);
  47. }
  48. }//end useing reader
  49. }//end useing cmd
  50. }//end using conn
  51.  
  52. this.cbxProvince.SelectedIndex = ;
  53. }
  54.  
  55. private void cbxProvince_SelectedIndexChanged(object sender, EventArgs e)
  56. {
  57. AreaInfo provinceAreaInfo= this.cbxProvince.SelectedItem as AreaInfo;
  58. //判断是否 拿到的城市为空
  59. if (provinceAreaInfo == null)
  60. {
  61. return;
  62. }
  63. //根据省的Id获取所有的城市信息
  64.  
  65. //加载数据库中的所有的省的数据
  66. string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString;
  67.  
  68. //创建链接对象
  69. using (SqlConnection conn = new SqlConnection(connStr))
  70. {
  71. using (SqlCommand cmd = conn.CreateCommand())
  72. {
  73. conn.Open();//***********8
  74. cmd.CommandText = @"select AreaId, AreaName, AreaPid from [dbo].[AreaFull] where AreaPId="+provinceAreaInfo.AreaId;
  75. using (SqlDataReader reader = cmd.ExecuteReader())
  76. {
  77. this.cbxCity.Items.Clear();
  78. while (reader.Read())
  79. {
  80. //int AreadId = int.Parse(reader["AreaId"].ToString());
  81. //把表格的数据转换成 对象数据
  82. AreaInfo areaInfo = new AreaInfo();
  83. areaInfo.AreaId = int.Parse(reader["AreaId"].ToString());
  84. areaInfo.AreaName = reader["AreaName"].ToString();
  85. areaInfo.AreaPId = int.Parse(reader["AreaPId"].ToString());
  86. //把省的信息放到 ComboBox中。ComboBox显示信息是 Item对象的ToString()
  87. this.cbxCity.Items.Add(areaInfo);
  88. }
  89. }//end useing reader
  90. }//end useing cmd
  91. }//en
  92. this.cbxCity.SelectedIndex = ;
  93.  
  94. }
  95.  
  96. private void btbExport_Click(object sender, EventArgs e)
  97. {
  98. #region 选择保存文件
  99. string fileName = string.Empty;// 保存的文件名
  100. //让用户选择 要保存的文件路径
  101. using (SaveFileDialog sfd = new SaveFileDialog())
  102. {
  103. if (sfd.ShowDialog() != DialogResult.OK)
  104. {
  105. return;
  106. }
  107. fileName = sfd.FileName;
  108. }
  109. #endregion
  110.  
  111. // 查询数据数据,写入数据
  112. string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString;
  113.  
  114. using (SqlConnection conn =new SqlConnection(connStr))
  115. {
  116. using (SqlCommand cmd =conn.CreateCommand())
  117. {
  118. conn.Open();
  119.  
  120. cmd.CommandText = "select AreaId, AreaName, AreaPid from [dbo].[AreaFull]";
  121.  
  122. using (SqlDataReader reader =cmd.ExecuteReader())
  123. {
  124. string tempLine = string.Empty;
  125. using (StreamWriter writer =new StreamWriter(fileName))
  126. {
  127. while (reader.Read())
  128. {
  129. tempLine = reader["AreaId"] + "," +
  130. reader["AreaName"] + "," +
  131. reader["AreaPId"];
  132. writer.WriteLine(tempLine);//写入文本文件
  133. }
  134. }
  135.  
  136. }
  137. }
  138. }
  139. }
  140. }
  141. }

2、案例:
输错三次禁止登陆,15分钟后才能继续。
->用数据库记录ErrorTimes,最后出错时间lastErrorDateTime
->思路:
->什么情况允许登陆?
-> 输入错误次数<3 || 最后错误时间>15分钟

->第一步:先用户的Id,用户名,用户密码,用户错误次数,用户最后的错误时间 where UserName=txtUserName.Text and UserPwd=txtUserPwd.Text

->第二步:判断是否查询出数据
->如果没有数据:如果没有数据,用户名和密码不正确。
增加一次错误次数,修改一下错误时间。
->如果有数据,说明用户名密码正确。那么进行后续判断,
->校验时间是否符合规范,登陆次数是否满足。
->满足
->不满足:提示。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Drawing;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12.  
  13. namespace _03LoginLockDemo
  14. {
  15. public partial class Form1 : Form
  16. {
  17. public Form1()
  18. {
  19. InitializeComponent();
  20. }
  21.  
  22. private void btnLogin_Click(object sender, EventArgs e)
  23. {
  24. //第一步:先用户的Id,用户名,用户密码,用户错误次数,用户最后的错误时间 where UserName=txtUserName.Text and UserPwd=txtUserPwd.Text
  25.  
  26. string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString;
  27.  
  28. using (SqlConnection conn=new SqlConnection(connStr))
  29. {
  30. using (SqlCommand cmd =conn.CreateCommand())
  31. {
  32. conn.Open();
  33. cmd.CommandText = @"SELECT [UserId]
  34. ,[UserName]
  35. ,[UserPwd]
  36. ,[LastErrorDateTime]
  37. ,[ErrorTimes]
  38. FROM [UserInfo]
  39. WHERE UserName='"+txtName.Text
  40. +"' and UserPwd='"+txtPwd.Text+"' ";
  41.  
  42. UserInfo userInfo = null;//查询来的数据封装的对象。
  43.  
  44. using (SqlDataReader reader = cmd.ExecuteReader())
  45. {
  46. //把查询出来的数据赋值到userInfo
  47. if (reader.Read())
  48. {
  49. userInfo =new UserInfo();
  50. userInfo.UserId = int.Parse(reader["UserId"].ToString());
  51. userInfo.UserPwd = reader["UserPwd"].ToString();
  52. userInfo.LastErrorDateTime = DateTime.Parse(reader["LastErrorDateTime"].ToString());
  53. userInfo.ErrorTimes = int.Parse(reader["ErrorTimes"].ToString());
  54. }
  55.  
  56. }//花括号执行结束之前,链接一直没有关闭,这时候Reader一直占用Connection对象。
  57.  
  58. //如果查询结果为空,说明用户名密码错误,修改错误次数和 错误时间。
  59. if (userInfo==null)
  60. {
  61. //修改 错误时间,错误次数 where UserName=txtUserName.Text
  62. cmd.CommandText =
  63. "update UserInfo set LastErrorDateTime=getdate(), ErrorTimes=ErrorTimes+1 where UserName='" +
  64. txtName.Text.Trim() + "'";
  65. cmd.ExecuteNonQuery();
  66. MessageBox.Show("用户名密码Error");
  67. return;
  68. }
  69.  
  70. //如果有数据。后面校验时间 错误次数。
  71. if (userInfo.ErrorTimes< || DateTime.Now.Subtract(userInfo.LastErrorDateTime).Minutes> )
  72. {
  73. MessageBox.Show("登陆成功!");
  74. //
  75. cmd.CommandText =
  76. "update UserInfo set LastErrorDateTime=getdate(), ErrorTimes=0 where UserId=" +userInfo.UserId;
  77. cmd.ExecuteNonQuery();
  78. }
  79. else
  80. {
  81. MessageBox.Show("登陆失败!账号被锁定!");
  82. }
  83. }
  84. }
  85. }
  86. }
  87. }

3、查询语句参数化
->Sql注入问题演示。
->参数化解决Sql注入的难题

4、DataSet和DataTable

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10.  
  11. namespace _04DataSetDemos
  12. {
  13. public partial class MainFrm : Form
  14. {
  15. public MainFrm()
  16. {
  17. InitializeComponent();
  18. }
  19.  
  20. private void MainFrm_Load(object sender, EventArgs e)
  21. {
  22. //创建一个内存的数据集
  23. DataSet ds =new DataSet("DS5");
  24.  
  25. //创建一张内存表
  26. DataTable dt1 =new DataTable("dt1");
  27.  
  28. //把表放到数据集里面去。
  29. ds.Tables.Add(dt1);
  30.  
  31. //给表定义列
  32. DataColumn dcName = new DataColumn("Name",typeof(string));
  33. DataColumn dcAge = new DataColumn("Age",typeof(int));
  34. DataColumn dcId=new DataColumn("Id",typeof(int));
  35.  
  36. //把列放到表里面去。
  37. dt1.Columns.AddRange(new DataColumn[]{dcId,dcName,dcAge});
  38.  
  39. //给表添加数据
  40. dt1.Rows.Add(, "老马", );
  41. dt1.Rows.Add(, "赵黑", );
  42. dt1.Rows.Add(, "老王", );
  43. dt1.Rows.Add(, "老汪", );
  44.  
  45. //-------
  46.  
  47. //创建一张内存表
  48. DataTable dt2 = new DataTable("dt2");
  49.  
  50. //把表放到数据集里面去。
  51. ds.Tables.Add(dt2);
  52.  
  53. //给表定义列
  54. DataColumn dcName2 = new DataColumn("Name", typeof(string));
  55. DataColumn dcAge2 = new DataColumn("Age", typeof(int));
  56. DataColumn dcId2 = new DataColumn("Id", typeof(int));
  57.  
  58. //把列放到表里面去。
  59. dt2.Columns.AddRange(new DataColumn[] { dcId2, dcName2, dcAge2 });
  60.  
  61. //给表添加数据
  62. dt2.Rows.Add(, "老马", );
  63. dt2.Rows.Add(, "赵黑", );
  64. dt2.Rows.Add(, "老王", );
  65. dt2.Rows.Add(, "老汪", );
  66.  
  67. foreach(DataTable tb in ds.Tables)
  68. {
  69. foreach (DataRow dataRow in tb.Rows)
  70. {
  71. Console.WriteLine(dataRow[]+" " +dataRow[]+" "+dataRow[]);
  72. }
  73. }
  74.  
  75. }
  76. }
  77. }

C# 连接数据库等的更多相关文章

  1. react+redux教程(八)连接数据库的redux程序

    前面所有的教程都是解读官方的示例代码,是时候我们自己写个连接数据库的redux程序了! 例子 这个例子代码,是我自己写的程序,一个非常简单的todo,但是包含了redux插件的用法,中间件的用法,连接 ...

  2. 【基于WinForm+Access局域网共享数据库的项目总结】之篇三:Access远程连接数据库和窗体打包部署

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  3. winForm连接数据库(sqlserver2005)

    帮同学搞个课程设计winform连接sqlserver2005 具体方法: .添加App.config文件 2.在App.config文件中添加节点 <?xml version="1. ...

  4. c3p0连接数据库的3种方式

    c3p0连接数据库的3种方式,这里以mysql为例 1. 直接用set方法设置参数, 基本方法 ComboPooledDataSource dataSource = new ComboPooledDa ...

  5. Java连接数据库的辣几句话

    Java连接数据库的辣几句话 1.java连接Oracle数据库 使用以下代码三个步骤: 1.下载ojdbc.jar包并导入项目中.附下载地址:http://download.csdn.net/det ...

  6. 基础的jdbc连接数据库操作

    首先我们知道在数据库中,我们可以直接写sql或者直接通过数据库工具操作数据,但是在java程序中我们是不能直接操作数据库数据的,所以这就引入了jdbc操作. 百度百科:JDBC(Java Data B ...

  7. Python 3.x 连接数据库(pymysql 方式)

    ==================pymysql=================== 由于 MySQLdb 模块还不支持 Python3.x,所以 Python3.x 如果想连接MySQL需要安装 ...

  8. JDBC连接数据库

    JDBC连接数据库 1.加载JDBC驱动程序. Class.forName("com.mysql.jdbc.Driver"); 建立连接,. Connection conn = D ...

  9. java开发中JDBC连接数据库代码和步骤

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  10. 解决 PLSQL Developer无法连接数据库

    问题:PLSQL Developer无法连接数据库 原因:PLSQL Developer不支持x64的Oracle客户端 解决方案:1.下载instantclient-basic-nt-12.1.0. ...

随机推荐

  1. Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008

    Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008 全文索引操作 4.全文索引和like语句比較 1 5.倒排索引 inverted index 1 ...

  2. linux下一个C语言要求CPU采用

    部分   从灾难中 本来我想写一个小程序来测试CPU其他工具利用它可以检验类数据的性能.以后参考IPbench中间cpu_target_lukem插件实现我们的功能.原理非常简单:就是我们给程序设置了 ...

  3. 离散时间信号常见函数的实现(matlab)

    1. 单位样本序列 δ(n−n0)={1,n=n00,n≠n0 function [x, n] = impseq(n0, n1, n2) n = n1:n2; x = [n == n0]; 2. 单位 ...

  4. WPF 图片灰度处理

    原文:WPF 图片灰度处理 文章的内容是来自微软中文技术论坛的一个帖子,当时是想将一段将图片灰度处理的代码转换为XAML的一个样式,在这里要谢谢 Xiao Yan Qiang.Sheldon _Xia ...

  5. linq to entity DistinctBy && DefaultIfEmpty

    根据某属性去重 使用第三方库: https://github.com/morelinq/MoreLINQ Install-Package morelinq -Version 3.0.0 data.Di ...

  6. 1-9 RHEL7-文件权限管理

    本节所讲内容: 文件的基本权限:r w x (UGO+ACL) 文件的高级权限:suid sgid sticky 第1章 文件的基本权限 1.1 权限的作用 通过对文件设定权限可以达到以下三种访问限制 ...

  7. WPF DatePicker默认显示当前日期,格式化为年月日

    原文:WPF DatePicker默认显示当前日期 WPF的日历选择控件默认为当前日期,共有两种方法,一种静态,一种动态. 静态的当然写在DatePicker控件的属性里了,动态的写在对应的cs文件里 ...

  8. WPF 数据模板DataType属性的使用,不用指定ItemTemplate

    <Window x:Class="CollectionBinding.MainWindow"        xmlns="http://schemas.micros ...

  9. 图像滤镜艺术---Wave滤镜

    原文:图像滤镜艺术---Wave滤镜 Wave Filter水波滤镜 水波滤镜是通过坐标变换来模拟水波效果,使图像呈现出水波的特效.这个滤镜有一个可调参数:水波的扭曲程度. 代码如下; //     ...

  10. 小记Linux下对mac80211内核模块修改

    mac80211内核模块实现了对802.11协议的处理过程.其中mlme.c文件中的内容实现了对Deauth管理帧的处理.考虑到Deauth攻击至今仍没有好的防御方法(据说有802.11w,可是我一直 ...