C# 学习笔记(19)操作SQL Server下

ADO.net操作数据库

这应该是比较老的技术了,以后有空的话学学 Linq

/// <summary>
/// 数据库使用类
/// </summary>
public static class MySqlHelper
{/// <summary>/// 1.数据库连接字符串/// </summary>public static string conStr;/// <summary>/// SQL 增 删 改/// </summary>/// <param name="sql">sql命令</param>/// <param name="ps">sql参数</param>/// <returns></returns>public static int ExecuteNonQuery(string sql, params SqlParameter[] ps){try{//2.创建连接对象  using结束后会自动释放资源using (SqlConnection conn = new SqlConnection(conStr)){//3.创建执行SQL语句的对象SqlCommand cmd = new SqlCommand(sql, conn);//4.编写SQL语句cmd.Parameters.AddRange(ps);cmd.CommandTimeout = 1;//5.打开SQL连接conn.Open();//6.执行SQL语句return cmd.ExecuteNonQuery();}}catch (Exception e){throw e;}}/// <summary>/// SQL 查询一行数据/// </summary>/// <param name="sql"></param>/// <param name="ps"></param>/// <returns></returns>public static object ExecuteScalar(string sql, params SqlParameter[] ps){try{using (SqlConnection conn = new SqlConnection(conStr)){SqlCommand cmd = new SqlCommand(sql, conn);cmd.Parameters.AddRange(ps);cmd.CommandTimeout = 1;conn.Open();return cmd.ExecuteScalar();}}catch (Exception e){throw e;}}/// <summary>/// SQL 查询一块数据,并把数据存放在一个表中/// </summary>/// <param name="sql">命令</param>/// <param name="ps">参数</param>/// <returns>内存中的表</returns>public static DataTable ExecuteTable(string sql, params SqlParameter[] ps){try{using (SqlConnection conn = new SqlConnection(conStr)){SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);adapter.SelectCommand.Parameters.AddRange(ps);adapter.SelectCommand.CommandTimeout = 1;DataTable dataTable = new DataTable();adapter.Fill(dataTable);return dataTable;}}catch (Exception e){throw e;}}/// <summary>/// SQL 查询一块数据/// </summary>/// <param name="sql"></param>/// <param name="ps"></param>/// <returns></returns>public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] ps){try{SqlConnection conn = new SqlConnection(conStr);SqlCommand cmd = new SqlCommand(sql, conn);cmd.Parameters.AddRange(ps);cmd.CommandTimeout = 1;conn.Open();return cmd.ExecuteReader(CommandBehavior.CloseConnection);}catch(Exception e){throw e;}}
}

修改存储过程

根据要实现的功能,创建修改对应的存储过程和视图,可以一遍写程序一遍优化存储过程和视图

--创建视图 studentInfoTable
create view studentInfoTable
as
select studentTable.id as 学生编号, studentTable.name as 姓名, genderTable.name as 性别,
gradeTable.name as 班级,  (provinceTable.province + cityTable.cityName + isNull(studentTable.address, '')) as 家庭地址
from studentTable
inner join cityTable on cityTable.id = studentTable.cityID
inner join provinceTable on cityTable.provinceID = provinceTable.id
inner join genderTable on genderTable.id = studentTable.gender
inner join gradeTable on gradeTable.id = studentTable.gradeID
select * from studentInfoTable

--创建视图 studentMinuteInfoTable
create view studentMinuteInfoTable
as
select studentTable.id as 学生编号, studentTable.name as 姓名, genderTable.name as 性别,
gradeTable.name as 班级,  provinceTable.province as 省,  cityTable.cityName as 市, studentTable.address as 详细地址
from studentTable
inner join cityTable on cityTable.id = studentTable.cityID
inner join provinceTable on cityTable.provinceID = provinceTable.id
inner join genderTable on genderTable.id = studentTable.gender
inner join gradeTable on gradeTable.id = studentTable.gradeID
select * from studentMinuteInfoTable

--获取一页学生信息
alter proc GetStudentInfoPage@pageIndex int, --要查询的页序号@pageSize  int  --页大小
as
beginselect * from (select ROW_NUMBER() over(order by 学生编号) as 行序号, * from studentInfoTable) as t1 where 行序号 between (@pageIndex-1)*@pageSize+1 and @pageIndex*@pageSize
end
exec GetStudentInfoPage 2, 2

--存储过程 根据省名得到城市表
create proc GetCityInfo @provinceName nvarchar(10)
as
beginselect cityTable.id, cityName from cityTable
inner join provinceTable on cityTable.provinceID = provinceTable.id
where provinceTable.province = @provinceName
end
exec GetCityInfo '河北'

数据库随便填了一些数据,不完整

利用ADO.net操作数据库

  1. 创建链接字符串
//设置数据库连接字符串
//Serever: 表示要连接的SQL Server 服务端所在的机器(可以是ip, 可以是hostname)  . 代表本机
//Database: 数据库名称
//User Id:  用户名
//Password: 密码
//Connection Timeout: 链接超时时间
MySqlHelper.conStr = "Data Source = .;Database = TestDB; User Id = sa; Password= 12345678; Connection Timeout = 5;";
  1. 编写sql语句

例如要查询 studentInfoTable 表数据条数
SQL语句为

select count(*) from studentInfoTable

c#中将其转换成字符串即可

string sql = "select count(*) from studentInfoTable";
  1. 添加sql参数(非必要)

如果SQL语句需要参数,例如查询一页学生数据
SQL语句为

exec GetStudentInfoPage 2, 2

c#中

//sql 语句
string sql = "exec GetStudentInfoPage @page, @size";//sql 语句参数
SqlParameter page = new SqlParameter("@page", _currentPage);
SqlParameter pageSize = new SqlParameter("@size", PageSize);
  1. 查询并显示数据
//执行不带参 sql语句
int count = (int)MySqlHelper.ExecuteScalar(sql);
//执行带参 sql语句
DataTable dt = MySqlHelper.ExecuteTable(sql, page, pageSize);
  • 图表中显示查询到的表
//为GridView的列绑定数据源  也就是将dataGridViewSQL的列和 sql查出来表的列名绑定起来
dataGridViewSQL.Columns[0].DataPropertyName = "学生编号";
dataGridViewSQL.Columns[1].DataPropertyName = "姓名";
dataGridViewSQL.Columns[2].DataPropertyName = "性别";
dataGridViewSQL.Columns[3].DataPropertyName = "班级";
dataGridViewSQL.Columns[4].DataPropertyName = "家庭地址";//禁止自动创建列
dataGridViewSQL.AutoGenerateColumns = false;//绑定数据源
dataGridViewSQL.DataSource = dt;
  • combox中显示查询到的一列数据
//sql 语句
string sql = "select * from provinceTable";//执行sql语句
DataTable dt = MySqlHelper.ExecuteTable(sql);//为combox的列绑定数据源  也就是将combox和 sql查出来表的列名绑定起来
cmbProvince.DisplayMember = "province";
//绑定数据源
cmbProvince.DataSource = dt;


源码地址 https://download.csdn.net/download/weixin_42378319/20681950

using System;
using System.Collections.Generic;
using System.ComponentModel;
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 CSharp_SQL
{public partial class Form1 : Form{int PageMax = 1;int PageSize = 3;int _currentPage = 1;int CurrentPage{get { return _currentPage; }set {//sql 语句 查询行数string sql = "select count(*) from studentInfoTable";//执行sql语句PageMax = (int)MySqlHelper.ExecuteScalar(sql);PageMax = (PageMax + PageSize - 1) / PageSize;if (value < 1){_currentPage = PageMax;}else if(value > PageMax){_currentPage = 1;}else{_currentPage = value;}txbPage.Text = _currentPage.ToString()+"/"+PageMax.ToString();//sql 语句sql = "exec GetStudentInfoPage @page, @size";//sql 语句参数SqlParameter page = new SqlParameter("@page", _currentPage);SqlParameter pageSize = new SqlParameter("@size", PageSize);//执行sql语句DataTable dt = MySqlHelper.ExecuteTable(sql, page, pageSize);//为GridView的列绑定数据源  也就是将dataGridViewSQL的列和 sql查出来表的列名绑定起来dataGridViewSQL.Columns[0].DataPropertyName = "学生编号";dataGridViewSQL.Columns[1].DataPropertyName = "姓名";dataGridViewSQL.Columns[2].DataPropertyName = "性别";dataGridViewSQL.Columns[3].DataPropertyName = "班级";dataGridViewSQL.Columns[4].DataPropertyName = "家庭地址";//禁止自动创建列dataGridViewSQL.AutoGenerateColumns = false;//绑定数据源dataGridViewSQL.DataSource = dt;}}public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){//开启表格的双缓冲,避免闪烁MyDataGridViewDoubleBuffer.SetDoubleBuffered(dataGridViewSQL, true);//设置数据库连接字符串//Serever: 表示要连接的SQL Server 服务端所在的机器(可以是ip, 可以是hostname)  . 代表本机//Database: 数据库名称//User Id:  用户名//Password: 密码//Connection Timeout: 链接超时时间MySqlHelper.conStr = "Data Source = .;Database = TestDB; User Id = sa; Password= 12345678; Connection Timeout = 5;";CurrentPage = 1;}private void labFrontPage_Click(object sender, EventArgs e){CurrentPage -= 1;}private void labBackPage_Click(object sender, EventArgs e){CurrentPage += 1;}private void txbPage_TextChanged(object sender, EventArgs e){try{CurrentPage = int.Parse(txbPage.Text);}catch{}}private void txbPage_MouseDown(object sender, MouseEventArgs e){txbPage.SelectAll();}private void 增ToolStripMenuItem_Click(object sender, EventArgs e){FormSQL formSQL = new FormSQL((int)dataGridViewSQL.SelectedRows[0].Cells[0].Value, (string)dataGridViewSQL.SelectedRows[0].Cells[1].Value, (string)dataGridViewSQL.SelectedRows[0].Cells[2].Value, (string)dataGridViewSQL.SelectedRows[0].Cells[3].Value);formSQL.Text = "增/改数据";formSQL.ShowDialog();//刷新CurrentPage = CurrentPage;}private void 删ToolStripMenuItem_Click(object sender, EventArgs e){foreach (DataGridViewRow item in dataGridViewSQL.SelectedRows){//sql 语句string sql = "delete from studentTable where studentTable.id = @id";//sql 语句参数SqlParameter id = new SqlParameter("@id", item.Cells[0].Value);//执行sql语句DataTable dt = MySqlHelper.ExecuteTable(sql, id);//刷新CurrentPage = CurrentPage;}}}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
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 CSharp_SQL
{public partial class FormSQL : Form{int StudentID = 0;DataTable gradeDT, cityDT;public FormSQL(int studentID, string name, string gender, string grade){InitializeComponent();#region 查询数据库 获取省份和班级信息//sql 语句string sql = "select * from provinceTable";//执行sql语句DataTable dt = MySqlHelper.ExecuteTable(sql);//为combox的列绑定数据源  也就是将combox和 sql查出来表的列名绑定起来cmbProvince.DisplayMember = "province";//绑定数据源cmbProvince.DataSource = dt;sql = "select * from gradeTable";//执行sql语句gradeDT = MySqlHelper.ExecuteTable(sql);//为combox的列绑定数据源  也就是将combox和 sql查出来表的列名绑定起来cmbStudentGrade.DisplayMember = "name";//绑定数据源cmbStudentGrade.DataSource = gradeDT;#endregiontxbStudentName.Text = name;if(gender == "男"){radMan.Checked = true;}else{radWoman.Checked = true;}cmbStudentGrade.Text = grade;//获取学生地址信息sql = "select * from studentMinuteInfoTable where 学生编号 = @id";//sql 语句参数SqlParameter id = new SqlParameter("@id", studentID);//执行sql语句dt = MySqlHelper.ExecuteTable(sql, id);cmbProvince.Text = (string)dt.Rows[0].ItemArray[4];cmbCity.Text = (string)dt.Rows[0].ItemArray[5];if(dt.Rows[0].ItemArray[6] != System.DBNull.Value)txbStudentAddr.Text = (string)dt.Rows[0].ItemArray[6];StudentID = studentID;}/// <summary>/// 省变化时,市信息跟着变化/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void cmbProvince_SelectedIndexChanged(object sender, EventArgs e){//sql 语句string sql = "exec GetCityInfo @provinceName";//sql 语句参数SqlParameter provinceName = new SqlParameter("@provinceName", cmbProvince.Text);//执行sql语句cityDT = MySqlHelper.ExecuteTable(sql, provinceName);//为combox的列绑定数据源  也就是将combox和 sql查出来表的列名绑定起来cmbCity.DisplayMember = "cityName";//绑定数据源cmbCity.DataSource = cityDT;}private void btnAdd_Click(object sender, EventArgs e){//sql 语句string sql = "insert into studentTable(gradeID, name, gender, cityID, address) Values(@gradeID, @name, @gender, @cityID, @address)";//sql 语句参数SqlParameter gradeID = new SqlParameter("@gradeID", gradeDT.Rows[cmbStudentGrade.SelectedIndex].ItemArray[0]);SqlParameter name = new SqlParameter("@name", txbStudentName.Text);SqlParameter gender;if(radMan.Checked){gender = new SqlParameter("@gender", true);}else{gender = new SqlParameter("@gender", false);}SqlParameter cityID = new SqlParameter("@cityID", cityDT.Rows[cmbCity.SelectedIndex].ItemArray[0]);SqlParameter address = new SqlParameter("@address", txbStudentAddr.Text);MySqlHelper.ExecuteNonQuery(sql, gradeID, name, gender, cityID, address);this.Close();}private void btnUpdate_Click(object sender, EventArgs e){//sql 语句string sql = "update studentTable set gradeID = @gradeID, name = @name, gender = @gender, cityID = @cityID, address = @address where id = @id";//sql 语句参数SqlParameter id = new SqlParameter("@id", StudentID);SqlParameter gradeID = new SqlParameter("@gradeID", gradeDT.Rows[cmbStudentGrade.SelectedIndex].ItemArray[0]);SqlParameter name = new SqlParameter("@name", txbStudentName.Text);SqlParameter gender;if (radMan.Checked){gender = new SqlParameter("@gender", true);}else{gender = new SqlParameter("@gender", false);}SqlParameter cityID = new SqlParameter("@cityID", cityDT.Rows[cmbCity.SelectedIndex].ItemArray[0]);SqlParameter address = new SqlParameter("@address", txbStudentAddr.Text);MySqlHelper.ExecuteNonQuery(sql, gradeID, name, gender, cityID, address, id);this.Close();}}
}

C# 学习笔记(19)操作SQL Server下相关推荐

  1. mySql学习笔记:比sql server书写要简单

    在学mySql.总的感觉,mySql与Sql Server差不多,语法都很象,但mySql也许是吸取了SQL SERVER的一些经验,SQL语句书写起来更加简单. 比如说,设置主键.索引,SQL SE ...

  2. 天朝皇叔:学习笔记 Qt 连接数据库sql server

    在项目文件里面加上:QT       += sql 注意连接字符串的多种方式:直接填连接字符串:字符串与函数调用拼接.使用数据源,示例代码: ​ #include <QtCore/QCoreAp ...

  3. C# 学习笔记(17)操作SQL Server 上

    C# 学习笔记(17)操作SQL Server上 安装SQL Server 微软官网 https://www.microsoft.com/zh-cn/sql-server/sql-server-dow ...

  4. C# 学习笔记(18)操作SQL Server 中

    C# 学习笔记(18)操作SQL Server 中 数据库基础操作 SQL语法可以参考 菜鸟教程 或者微软官方的SQL示例 注意SQL不区分大小写 查 1.基础查询 --最基础的查询语句, selec ...

  5. MySQL学习笔记02【SQL基本概念与通用语法、数据库的CRUD操作】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. 【数据库学习笔记】Day03 - SQL语言基础及数据库定义功能

    [数据库学习笔记]Day03 - SQL语言基础及数据库定义功能 〇.本文所用数据库表格: 一.关系运算: 关系运算,数学名词,基本运算有两类:一类是传统的集合运算(并.差.交等),另一类是专门的关系 ...

  7. Python学习笔记19:列表 III

    Python学习笔记19:列表 III 其实这篇笔记标题应该是列表扩展,从列表开始,将涵盖Python中的序列容器. 关于列表的基础知识,可以看我的前两篇文章: Python学习笔记1:列表. Pyt ...

  8. JavaWeb学习笔记(动态SQL)

    JavaWeb学习笔记(动态SQL) 动态SQL中的元素 < if>元素 < choose>.< when>.< otherwise>元素 < w ...

  9. 【白帽子学习笔记14】SQL注入常用语句

    [白帽子学习笔记14]SQL注入常用语句 目前网站中使用的最多的数据库要算是 ACCESS.SQL Server(MSSQL).MySQL 这三个了,所以这里的手工注入,我就以他们三个数据库来分成三 ...

最新文章

  1. xml批量修改php,通过php修改xml文档内容的方法
  2. /bin/bash^M: bad interpreter: 没有那个文件或目录--转载
  3. WinFrm程序使用的图片展示控件.带删除的
  4. 如何解决JDK的安装路径中有空格的情况
  5. org.hibernate.hql.ast.QuerySyntaxException: myaddressbook is not mapped
  6. mac win7 计算机,几步教会你win7更改mac地址_win7电脑改mac地址方法
  7. JavaScript和TypeScript学习心得
  8. 计算机表格常用根式,数学根号表格.doc
  9. 阿里云香港服务器和大陆服务器的优缺点分析
  10. css中的容器坍塌问题
  11. java中级课程_完整的JAVA中级程序员全面学习路线教程
  12. 树为什么能长这么高?
  13. 测量数据的计算机处理实验报告,测量数据处理实验报告..doc
  14. 一招教你学会如何用excel求重复项最大值
  15. eclipse插件升级
  16. 最小二乘、加权最小二乘 matlab实现
  17. linux echo完全删除文件,LInux上清空或删除文件的5中方法
  18. 高等教师资格证考试复习笔记-高等教育学-(6)-高等学校的教师和学生
  19. logo免费在线设计,做自己品牌的设计师
  20. php 中 相关文章 的思路,php之购物车类思路及代码

热门文章

  1. 【设计和算法分析】3、二进制搜索
  2. PHP远程下载图片损坏问题
  3. Android UI(五)云通讯录项目之联系人列表,带侧滑选择,带搜索框
  4. asp.net 导出excel带图片
  5. sql 定时同步两个数据库
  6. 未能加载文件或程序集“SqlServerDal”或它的某一个依赖项。系统找不到指定的文件。...
  7. Android通过cat /sys/kernel/debug/usb/devices获取USB信息
  8. TS2003基于触摸屏的应用
  9. @responseBody java_java-如何使用@ResponseBody从Spring Controller返回JSON数据
  10. DNS的主从架构、子域委派、转发器