欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

C# 连接数据库等

发布时间:2025/4/16 C# 78 豆豆
生活随笔 收集整理的这篇文章主要介绍了 C# 连接数据库等 小编觉得挺不错的,现在分享给大家,帮大家做个参考.


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();//***********8cmd.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 connthis.cbxProvince.SelectedIndex = 0;}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();//***********8cmd.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}//enthis.cbxCity.SelectedIndex = 0;}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);//写入文本文件 }}}}}}} } View Code

 


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.Textstring 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()){//把查询出来的数据赋值到userInfoif (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.Textcmd.CommandText ="update UserInfo set LastErrorDateTime=getdate(), ErrorTimes=ErrorTimes+1 where UserName='" +txtName.Text.Trim() + "'";cmd.ExecuteNonQuery();MessageBox.Show("用户名密码Error");return;}//如果有数据。后面校验时间 错误次数。if (userInfo.ErrorTimes<3 || DateTime.Now.Subtract(userInfo.LastErrorDateTime).Minutes>15 ){MessageBox.Show("登陆成功!");// cmd.CommandText ="update UserInfo set LastErrorDateTime=getdate(), ErrorTimes=0 where UserId=" +userInfo.UserId;cmd.ExecuteNonQuery();}else{MessageBox.Show("登陆失败!账号被锁定!");}}}}} } View Code

 

 

 

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(1, "老马", 18);dt1.Rows.Add(1, "赵黑", 29);dt1.Rows.Add(1, "老王", 18);dt1.Rows.Add(1, "老汪", 19);//-------//创建一张内存表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(1, "老马", 18);dt2.Rows.Add(1, "赵黑", 29);dt2.Rows.Add(1, "老王", 18);dt2.Rows.Add(1, "老汪", 19);foreach(DataTable tb in ds.Tables){foreach (DataRow dataRow in tb.Rows){Console.WriteLine(dataRow[0]+" " +dataRow[1]+" "+dataRow[2]);}}}} } View Code

 

转载于:https://www.cnblogs.com/cb1186512739/p/9482032.html

总结

以上是生活随笔为你收集整理的C# 连接数据库等的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。