今天研究公司的mvc项目的时候,才发现using(){},一开始不知道干嘛的,搜索也搜不到相关资料,就找了好多的关键字搜索了一下,终于在一篇博客上找到了这个用法,给大家跟我一样接触编程不久的新手学习一下。
using这个关键字在C#中共用三个用法: (最重要的是第三种方法,我先放一个我看到的实例)
例子:之前在webform中用到的连接字符串,每次调用ado的时候需要conn.open();用完之后一定要关闭,conn.close();这是我在最近项目中看到的类似于sqlhelper的东西:
public class DBContext : IDisposable
{
private static string connectionString;
private static DbProviderFactory dbfactory;
private DbConnection conn;
static DBContext()
{
if (ConfigurationManager.ConnectionStrings.Count < 0)
throw new ConnectionStringException();
ConnectionStringSettings css = ConfigurationManager.ConnectionStrings["strCon"];
dbfactory = DbProviderFactories.GetFactory(css.ProviderName);
connectionString = css.ConnectionString;
}
public DBContext()
{
this.conn = dbfactory.CreateConnection();
this.conn.ConnectionString = connectionString;
this.conn.Open();
}
~DBContext()
{
Dispose(false);
}
public DataTable OpenQuery(string sql, params object[] args)
{
DataTable dt = new DataTable();
using (DbDataAdapter adapter = dbfactory.CreateDataAdapter())
{
using (DbCommand cmd = PrepareCommand(sql, args))
{
adapter.SelectCommand = cmd;
adapter.Fill(dt);
}
}
return dt;
}
上面这些东西就是一部分我现在看到的DBcontext了,不是很明白dbfactory的出现,不是每次new一下是实例化么,在我的印象里实例化就是new,有点小尴尬。。
接下来是项目中控制器中的一段代码:sql_supply与,sql_demmand,是两个执行查询的SQL语句
using (DBContext context = new DBContext())
{
ViewData["dt_supply"] = context.OpenQuery(sql_supply);
ViewData["dt_demmand"] = context.OpenQuery(sql_demmand);
return View();
}
好了,这么简单的调用方法就把一个表的数据传递到了view了,在view上@viewdata["dt_supply"],行列,就可以取到值了
看到这里,一直纳闷在using ()里实例化了DBContext context = new DBContext(),因为构造函数里直接写了open,所以现在与数据库之间的联系是打开的,{}里就简单了,用了dbcontext的方法来返回一个dt,把dt赋值到viewdata里,return view();在另一个}后面相对于就把这个context给释放了,关掉了与数据库的连接,我是这样理解的,下面的游客大神么给点批评哦。接下来看using的使用。
1、用在命名空间里
如:using System; 这个谁都知道,为了不用写类的全名(可以把System.Console 写成 Console)
2、可以用来对一个类进行重命名,也是为了使用方便,如:
using System;
using hahaha = System.Console;
namespace Console001
{
public class Class1
{
public static void Main()
{
hahaha.WriteLine("using 的第二种用法!");
}
}
}
3,C#中的using除了作为命名空间指示符(using System),类型的别名指示符(using Dos=System.Console),还有资源管理的语句功能:
using (R r1 = new R ()) {
r1.F();
}
在C#中被翻译为:
R r1 = new R();
try {
r1.F();
}
finally {
if (r1 != null) ((IDisposable)r1).Dispose();
}