我学C#1个月了,看到很多书籍都省略了很多Using …… try…..catch块和许多其他推荐的编码实践。
自己对这方面不是很熟悉,我不清楚他们有什么优点,也不清楚怎么去应用他。比如:不清楚为什么要用using(SqlConnection cn = new SqlConnection(strConn))等。
特求以下内容:
1. 请大家告诉我什么情况下去用,怎么用,最好有例子。发网址给我也行。
2. .其他良好的编码实践,比如调用存储过程,什么时候适合调用,怎么调用。
3. 编程应该注意的地方等等。例子:
string strConn, strSQL;
strConn = @"Data Source = .\SQLExpress; Initial Catalog = Northwind; Integrated Security = true"; strSQL = "SELECT CustomerID,CompanyName FROM Customers"; using(SqlConnection cn = new SqlConnection(strConn))
{
try
{
cn.Open();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message.ToString());
}
} using (SqlCommand cmd = new SqlCommand(strSQL, cn))
{
try
{
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
Console.WriteLine(rdr["CompanyName"]);
rdr.Close();
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message.ToString());
}
} cn.Close();
自己对这方面不是很熟悉,我不清楚他们有什么优点,也不清楚怎么去应用他。比如:不清楚为什么要用using(SqlConnection cn = new SqlConnection(strConn))等。
特求以下内容:
1. 请大家告诉我什么情况下去用,怎么用,最好有例子。发网址给我也行。
2. .其他良好的编码实践,比如调用存储过程,什么时候适合调用,怎么调用。
3. 编程应该注意的地方等等。例子:
string strConn, strSQL;
strConn = @"Data Source = .\SQLExpress; Initial Catalog = Northwind; Integrated Security = true"; strSQL = "SELECT CustomerID,CompanyName FROM Customers"; using(SqlConnection cn = new SqlConnection(strConn))
{
try
{
cn.Open();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message.ToString());
}
} using (SqlCommand cmd = new SqlCommand(strSQL, cn))
{
try
{
using (SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
Console.WriteLine(rdr["CompanyName"]);
rdr.Close();
}
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message.ToString());
}
} cn.Close();
http://msdn2.microsoft.com/zh-cn/library/yh598w02.aspx
try catch
http://msdn2.microsoft.com/zh-cn/library/s7fekhdy.aspx
我觉得这已经很详细了
using:
在C#和其他托管语言中,没有自动、决定性的析构方式,而是有一个垃圾收集器,它会在未来的某个时刻释放资源。它是非决定性的,因为我们不能确定这个过程在什么时候发生。忘记关闭数据库连接可能会导致.NET可执行程序的各种问题。我们使用using子句确保实现IDisposable接口的对象在退出块时立即被释放。try和catch是配对使用的,一般用来捕捉异常。
建议修改如下: string strConn, strSQL;
strConn = @"Data Source = .\SQLExpress; Initial Catalog = Northwind; Integrated Security = true";
strSQL = "SELECT CustomerID,CompanyName FROM Customers";
using(SqlConnection cn = new SqlConnection(strConn))
{
try
{
cn.Open();
SqlCommand cmd = new SqlCommand(strSQL, cn))
SqlDataReader rdr = cmd.ExecuteReader()
while (rdr.Read())
Console.WriteLine(rdr["CompanyName"]);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
rdr.Close();
} }
我也有看MSDN ,我觉得再看看实例,能够掌握得更好。
using(Sqlconnection con = new SqlConnection())
{
//代码执行块
}using 的简单的理解:括号里定义的con只在using{}这对括号内有效,出了后就没用了
catch{}的话是用来捕捉异常的~
就我的项目而言,基本上是没用到过using,try..catch倒是随处可见~
我觉得应该使用XML就是 win.config文件里面写 然后在程序里面调用 避免冗余
在使用try时应该加上finally一般写关闭close();
其他没什么了实践是检验真理的唯一标准
//一直都是这样用,自己创建的对象自己释放
SqlConnection cn = new SqlConnection();
try
{}
finally
{
cn.Dispose();
}
string strConn, strSQL;
strConn = @"Data Source = .\SQLExpress; Initial Catalog = Northwind; Integrated Security = true";
strSQL = "SELECT CustomerID,CompanyName FROM Customers";
SqlConnection cn = new SqlConnection(strConn);
//using(SqlConnection cn = new SqlConnection(strConn))
//{
try
{
cn.Open();
SqlCommand cmd = new SqlCommand(strSQL, cn))
SqlDataReader rdr = cmd.ExecuteReader()
while (rdr.Read())
Console.WriteLine(rdr["CompanyName"]);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
if(cn !=null)//数据连接如果不是空,即未关闭,则关闭!
{
cn.close();
}
rdr.dispose();//非close();
cmd.disopose();
} //}
一般不是引用其它自定义类的数据连接,基本不需要用using
using (Font font1 = new Font("Arial", 10.0f)) {
.. byte charset = font1.GdiCharSet;
}会转化成 Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}也就是说明using会保证非托管的资源在离开using作用域的时候删除。
string strConn, strSQL;
strConn = @"Data Source = .\SQLExpress; Initial Catalog = Northwind; Integrated Security = true";
strSQL = "SELECT CustomerID,CompanyName FROM Customers";
using(SqlConnection cn = new SqlConnection(strConn))
{
try
{
cn.Open();
SqlCommand cmd = new SqlCommand(strSQL, cn))
SqlDataReader rdr = cmd.ExecuteReader()
while (rdr.Read())
Console.WriteLine(rdr["CompanyName"]);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
finally
{
rdr.Close();
} }using 里面套 try...catch...
using 本身就是try...catch... 多此一举嘛 降低效率 错误要用if捕捉 try...catch...效率不高
catch (Exception ex)使用是一个不好的习惯
1. 空间指示符 using System;
2. 类型的别名指示符 using doc=System.Console;
3. using用于资源管理的语句功能。在这里你提到的是它的第三点用法,基本上上面的各位高手都提到过了。嘿嘿。如上有误,多多指教。代码就不来得急附了!
那应该怎么应用?
我在下载那个Effective C# 。 谢谢推荐这本书。
TRY 和 CATCH 是捕捉异常的