浅谈牛腩
2016-03-20 20:40
211 查看
牛腩视频讲的还是蛮好的,从开始的软件安装-数据库设计-界面设计到代码编写,讲的非常详细。从细节之中学到很多东西。
应用:以机房收费为例,在注册、充值、退卡、上机等地方,只要可以插入数据的地方就可以使用绑定数据的方法,非常方便,不用再界面获取时间日期,减少了代码的编写量。
![](https://img-blog.csdn.net/20160320204512219?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
![](https://img-blog.csdn.net/20160320204550784?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
应用:我们机房收费中,做上下机的时候用到了卡表中的类型、用户类型,又用到了学生信息。不用建立视图,用内连接的方式我们可以进行查询(前提是建立数据库关系图)
如果熟悉数据库的使用,可以大大简化我们写代码的量。所以多学习一些数据库的知识是很有必要的。
在现在理解的基础上,这两个是没有什么区别的。根据百度百科百度情况:触发器与存储过程的唯一区别是触
发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。
进行数据库SQL测试的,如果是存储过程我们可以使用 EXECUTE+存储过程名称进程测试,但是触发器应该就
不可以了。相比于VS中写SQL代码执行SQL语句,存储过程中写SQL语句速度会更快一些。之前一直觉着存储过程应
该少用,后面了解到即使执行一个SQL语句也可以使用存储过程。相对于在代码中写sql语句,在存储过程中写代码比
较好。存储过程执行SQL语句速度是比较快的。
在我们机房收费中,或是编写网页的时候,编写数据库是一个很重要的环节,而数据库的编写自然要增删改查,将其抽象成SQLHelper类会方便我们很多。
数据库时间绑定
数据库中设置了时间绑定,在插入数据的时候不必设置时间参数。插入数据后数据库会自动获取插入数据的时间,进行数据库的填充。当然这样只能应用于插入数据,如果是更新数据就不可以了。应用:以机房收费为例,在注册、充值、退卡、上机等地方,只要可以插入数据的地方就可以使用绑定数据的方法,非常方便,不用再界面获取时间日期,减少了代码的编写量。
SQL语句
之前在跨表查询的时候,都是用的视图,现在发现原来通过SQL语句就可以实现。牛腩老师讲的很多SQL语句都很经典。其中利用内连接的方法跨表查询时,牛腩老师在查询前10条新闻时,是这样写的:应用:我们机房收费中,做上下机的时候用到了卡表中的类型、用户类型,又用到了学生信息。不用建立视图,用内连接的方式我们可以进行查询(前提是建立数据库关系图)
<span style="font-size:18px;"> select En.cardNo, En.type ,Stu.stuName ,stuDeparment,stuGrade from T_EnrollCard En inner join T_StudentInfo Stu on Stu.cardNo=En.cardNo</span>
如果熟悉数据库的使用,可以大大简化我们写代码的量。所以多学习一些数据库的知识是很有必要的。
存储过程和触发器
在现在理解的基础上,这两个是没有什么区别的。根据百度百科百度情况:触发器与存储过程的唯一区别是触
发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。
进行数据库SQL测试的,如果是存储过程我们可以使用 EXECUTE+存储过程名称进程测试,但是触发器应该就
不可以了。相比于VS中写SQL代码执行SQL语句,存储过程中写SQL语句速度会更快一些。之前一直觉着存储过程应
该少用,后面了解到即使执行一个SQL语句也可以使用存储过程。相对于在代码中写sql语句,在存储过程中写代码比
较好。存储过程执行SQL语句速度是比较快的。
强大的SqlHelper
private SqlConnection conn = null; private SqlCommand cmd = null; private SqlDataReader sdr = null; public SqlHelper()//构造函数 { string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString; //string connStr = "server=(local);database=newssystem;uid=sa;pwd=123456;"; conn = new SqlConnection(connStr); } private SqlConnection GetConn() { if (conn.State == ConnectionState.Closed) { conn.Open(); } return conn; } /// <summary> /// 有参数的增删改或存储过程 /// </summary> /// <param name="sql">sql语句或存储过程</param> /// <param name="paras">参数</param> /// <param name="ct">命令参数</param> /// <returns></returns> public int ExecuteNoQuery(string sql, SqlParameter[] paras, CommandType ct) { int res; using (cmd = new SqlCommand(sql, GetConn())) { cmd.CommandType = ct; cmd.Parameters.AddRange(paras); res = cmd.ExecuteNonQuery(); } return res; } /// <summary> /// 无参数的增删改 /// </summary> /// <param name="sql"></param> /// <returns></returns> public int ExecuteNoQuery(string sql,CommandType ct) { int res; using (cmd = new SqlCommand(sql, GetConn())) { cmd.CommandType = ct; res = cmd.ExecuteNonQuery(); } return res; } /// <summary> /// 执行无参查询或存储过程 /// </summary> /// <param name="sql">sql查询语句或存储过程</param> /// <param name="ct">类型存储过程还是查询的sql语句</param> /// <returns>返回集合</returns> public DataTable ExecuteTable(string sql,CommandType ct) { DataTable dt=new DataTable (); cmd=new SqlCommand(sql,GetConn()); cmd.CommandType = ct; using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection)) { dt.Load(sdr); } return dt; } /// <summary> /// 执行带参数的SQL查询语句或存储过程 /// </summary> /// <param name="sql">SQL查询语句或存储过程</param> /// <returns>参数集合</returns> public DataTable ExecuteTable(string sql,SqlParameter[] paras,CommandType ct) { DataTable dt = new DataTable(); cmd = new SqlCommand(sql, GetConn()); cmd.CommandType = ct; cmd.Parameters.AddRange(paras); using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//当资源释放是同时关闭数据库 { dt.Load(sdr); } return dt; }
在我们机房收费中,或是编写网页的时候,编写数据库是一个很重要的环节,而数据库的编写自然要增删改查,将其抽象成SQLHelper类会方便我们很多。
相关文章推荐
- BZOJ4392Counting Haybales
- 仿系统图库的简单实现
- 针对MD5加密
- python中的string模块
- 三角形
- 猎豹MFC--画刷CBrush WM_CTLCOLOR
- 你是不是得了拖延症?
- java io
- N-Queens [Leetcode解题报告]
- C++实现获取某一类型最大值
- Iphone开发-NSdata 与 NSString,Byte数组,UIImage 的相互转换
- Spring中Quartz调度器的使用
- 然后是几点--考虑直接转换成数字--再转换成时间
- android单元测试
- Java命名规则
- 函数的使用及注意事项
- 机电传动第四周运动仿真设计
- Mapped Statements collection does not contain value for com.xinrui.micromessage.bean.Message.insert
- 颜色空间
- 奥赛初选用平面几何题