您的位置:首页 > 其它

浅谈牛腩

2016-03-20 20:40 211 查看
       牛腩视频讲的还是蛮好的,从开始的软件安装-数据库设计-界面设计到代码编写,讲的非常详细。从细节之中学到很多东西。

数据库时间绑定

           数据库中设置了时间绑定,在插入数据的时候不必设置时间参数。插入数据后数据库会自动获取插入数据的时间,进行数据库的填充。当然这样只能应用于插入数据,如果是更新数据就不可以了。

         应用:以机房收费为例,在注册、充值、退卡、上机等地方,只要可以插入数据的地方就可以使用绑定数据的方法,非常方便,不用再界面获取时间日期,减少了代码的编写量。

        


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类会方便我们很多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: