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

省市选择。
导出数据

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _02ProvinceCitySelect
{
public partial class MainFrm : Form
{
public MainFrm()
{
InitializeComponent();
} private void MainFrm_Load(object sender, EventArgs e)
{
//加载数据库中的所有的省的数据
string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString; //创建链接对象
using (SqlConnection conn =new SqlConnection(connStr))
{
using (SqlCommand cmd =conn.CreateCommand())
{
conn.Open();//***********8
cmd.CommandText =@"select AreaId, AreaName, AreaPid from [dbo].[AreaFull] where AreaPId=0";
using (SqlDataReader reader = cmd.ExecuteReader())
{
while ( reader.Read())
{
//int AreadId = int.Parse(reader["AreaId"].ToString());
//把表格的数据转换成 对象数据
AreaInfo areaInfo = new AreaInfo();
areaInfo.AreaId = int.Parse(reader["AreaId"].ToString());
areaInfo.AreaName = reader["AreaName"].ToString();
areaInfo.AreaPId = int.Parse(reader["AreaPId"].ToString());
//把省的信息放到 ComboBox中。ComboBox显示信息是 Item对象的ToString()
this.cbxProvince.Items.Add(areaInfo);
}
}//end useing reader
}//end useing cmd
}//end using conn this.cbxProvince.SelectedIndex = ;
} private void cbxProvince_SelectedIndexChanged(object sender, EventArgs e)
{
AreaInfo provinceAreaInfo= this.cbxProvince.SelectedItem as AreaInfo;
//判断是否 拿到的城市为空
if (provinceAreaInfo == null)
{
return;
}
//根据省的Id获取所有的城市信息 //加载数据库中的所有的省的数据
string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString; //创建链接对象
using (SqlConnection conn = new SqlConnection(connStr))
{
using (SqlCommand cmd = conn.CreateCommand())
{
conn.Open();//***********8
cmd.CommandText = @"select AreaId, AreaName, AreaPid from [dbo].[AreaFull] where AreaPId="+provinceAreaInfo.AreaId;
using (SqlDataReader reader = cmd.ExecuteReader())
{
this.cbxCity.Items.Clear();
while (reader.Read())
{
//int AreadId = int.Parse(reader["AreaId"].ToString());
//把表格的数据转换成 对象数据
AreaInfo areaInfo = new AreaInfo();
areaInfo.AreaId = int.Parse(reader["AreaId"].ToString());
areaInfo.AreaName = reader["AreaName"].ToString();
areaInfo.AreaPId = int.Parse(reader["AreaPId"].ToString());
//把省的信息放到 ComboBox中。ComboBox显示信息是 Item对象的ToString()
this.cbxCity.Items.Add(areaInfo);
}
}//end useing reader
}//end useing cmd
}//en
this.cbxCity.SelectedIndex = ; } private void btbExport_Click(object sender, EventArgs e)
{
#region 选择保存文件
string fileName = string.Empty;// 保存的文件名
//让用户选择 要保存的文件路径
using (SaveFileDialog sfd = new SaveFileDialog())
{
if (sfd.ShowDialog() != DialogResult.OK)
{
return;
}
fileName = sfd.FileName;
}
#endregion // 查询数据数据,写入数据
string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString; using (SqlConnection conn =new SqlConnection(connStr))
{
using (SqlCommand cmd =conn.CreateCommand())
{
conn.Open(); cmd.CommandText = "select AreaId, AreaName, AreaPid from [dbo].[AreaFull]"; using (SqlDataReader reader =cmd.ExecuteReader())
{
string tempLine = string.Empty;
using (StreamWriter writer =new StreamWriter(fileName))
{
while (reader.Read())
{
tempLine = reader["AreaId"] + "," +
reader["AreaName"] + "," +
reader["AreaPId"];
writer.WriteLine(tempLine);//写入文本文件
}
} }
}
}
}
}
}

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

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

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

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _03LoginLockDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void btnLogin_Click(object sender, EventArgs e)
{
//第一步:先用户的Id,用户名,用户密码,用户错误次数,用户最后的错误时间 where UserName=txtUserName.Text and UserPwd=txtUserPwd.Text string connStr = ConfigurationManager.ConnectionStrings["sqlConn"].ConnectionString; using (SqlConnection conn=new SqlConnection(connStr))
{
using (SqlCommand cmd =conn.CreateCommand())
{
conn.Open();
cmd.CommandText = @"SELECT [UserId]
,[UserName]
,[UserPwd]
,[LastErrorDateTime]
,[ErrorTimes]
FROM [UserInfo]
WHERE UserName='"+txtName.Text
+"' and UserPwd='"+txtPwd.Text+"' "; UserInfo userInfo = null;//查询来的数据封装的对象。 using (SqlDataReader reader = cmd.ExecuteReader())
{
//把查询出来的数据赋值到userInfo
if (reader.Read())
{
userInfo =new UserInfo();
userInfo.UserId = int.Parse(reader["UserId"].ToString());
userInfo.UserPwd = reader["UserPwd"].ToString();
userInfo.LastErrorDateTime = DateTime.Parse(reader["LastErrorDateTime"].ToString());
userInfo.ErrorTimes = int.Parse(reader["ErrorTimes"].ToString());
} }//花括号执行结束之前,链接一直没有关闭,这时候Reader一直占用Connection对象。 //如果查询结果为空,说明用户名密码错误,修改错误次数和 错误时间。
if (userInfo==null)
{
//修改 错误时间,错误次数 where UserName=txtUserName.Text
cmd.CommandText =
"update UserInfo set LastErrorDateTime=getdate(), ErrorTimes=ErrorTimes+1 where UserName='" +
txtName.Text.Trim() + "'";
cmd.ExecuteNonQuery();
MessageBox.Show("用户名密码Error");
return;
} //如果有数据。后面校验时间 错误次数。
if (userInfo.ErrorTimes< || DateTime.Now.Subtract(userInfo.LastErrorDateTime).Minutes> )
{
MessageBox.Show("登陆成功!");
//
cmd.CommandText =
"update UserInfo set LastErrorDateTime=getdate(), ErrorTimes=0 where UserId=" +userInfo.UserId;
cmd.ExecuteNonQuery();
}
else
{
MessageBox.Show("登陆失败!账号被锁定!");
}
}
}
}
}
}

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

4、DataSet和DataTable

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace _04DataSetDemos
{
public partial class MainFrm : Form
{
public MainFrm()
{
InitializeComponent();
} private void MainFrm_Load(object sender, EventArgs e)
{
//创建一个内存的数据集
DataSet ds =new DataSet("DS5"); //创建一张内存表
DataTable dt1 =new DataTable("dt1"); //把表放到数据集里面去。
ds.Tables.Add(dt1); //给表定义列
DataColumn dcName = new DataColumn("Name",typeof(string));
DataColumn dcAge = new DataColumn("Age",typeof(int));
DataColumn dcId=new DataColumn("Id",typeof(int)); //把列放到表里面去。
dt1.Columns.AddRange(new DataColumn[]{dcId,dcName,dcAge}); //给表添加数据
dt1.Rows.Add(, "老马", );
dt1.Rows.Add(, "赵黑", );
dt1.Rows.Add(, "老王", );
dt1.Rows.Add(, "老汪", ); //------- //创建一张内存表
DataTable dt2 = new DataTable("dt2"); //把表放到数据集里面去。
ds.Tables.Add(dt2); //给表定义列
DataColumn dcName2 = new DataColumn("Name", typeof(string));
DataColumn dcAge2 = new DataColumn("Age", typeof(int));
DataColumn dcId2 = new DataColumn("Id", typeof(int)); //把列放到表里面去。
dt2.Columns.AddRange(new DataColumn[] { dcId2, dcName2, dcAge2 }); //给表添加数据
dt2.Rows.Add(, "老马", );
dt2.Rows.Add(, "赵黑", );
dt2.Rows.Add(, "老王", );
dt2.Rows.Add(, "老汪", ); foreach(DataTable tb in ds.Tables)
{
foreach (DataRow dataRow in tb.Rows)
{
Console.WriteLine(dataRow[]+" " +dataRow[]+" "+dataRow[]);
}
} }
}
}

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. WPF listview item mouse enter/over popup

    This is because the routing strategy of the Loaded event is Direct, which means that the routed even ...

  2. Emgu-WPF 激光雷达研究-定位实现

    原文:Emgu-WPF 激光雷达研究-定位实现 特定位置或障碍物位置定位实现. 读取激光雷达数据并存储于本地作为测试数据.每一帧数据对同一障碍物的定位信息均存在偏差.所以先对需要定位的点进行数据取样. ...

  3. SQL之Grant(分配权限)和Revoke(回收权限)

    Grant Grant可以把指定的权限分配给特定的用户,如果这个用户不存在,则会创建一个用户 命令格式 grant 权限 on 数据库名.表名 to 用户名@登陆方式 identified by 'p ...

  4. WPF中的文字修饰——上划线,中划线,基线与下划线

    原文:WPF中的文字修饰——上划线,中划线,基线与下划线 我们知道,文字的修饰包括:空心字.立体字.划线字.阴影字.加粗.倾斜等.这里只说划线字的修饰方式,按划线的位置,我们可将之分为:上划线.中划线 ...

  5. XF 按钮控件

    <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http:/ ...

  6. c# Ajax后台动态分页

    创建WebPager类 public static class WebPager { public static string WebPagerAjax(string Idn, bool IsShor ...

  7. 瑞芯微RK3399宣布系统开源,进入百余种行业市场!

    集微网消息,2月24日瑞芯微官方突然宣布, Rockchip RK3399Linux系统开源!作为Rockchip旗舰级芯片,RK3399具有高性能.高扩展.全能型应用特性. 这一重磅消息立马刷爆朋友 ...

  8. layer 1.9.2 发布,国产 Web 弹层不懈的前行者

    快速使用Romanysoft LAB的技术实现 HTML 开发Mac OS App,并销售到苹果应用商店中.   <HTML开发Mac OS App 视频教程> 土豆网同步更新:http: ...

  9. mysql自动安装教程说明

    这里只说明了思路和方法 我们在安装程序里面可能需要安装的时候将mysql一起安装,那么我们就按照下面的顺序思路来. 首先我们安装的电脑上可能已经安装了mysql,所以我们的mysql服务就起一个名字, ...

  10. kube框架结构-一个小型响应式CSS框架

    当你开始初建一个新的项目时,你可能需要一个不太复杂的基础框架,Kube框架应该是你最好的选择.一个独立的CSS文件,帮助你更简单的创建响应式的的布局设计. Kube Framework包括网格.按钮. ...