Tag: 使用语句

为什么在SqlTransaction中使用using语句?

我一直在遇到一些关于我在我的代码中使用的SqlTransaction的问题。 在我的谷歌search中,我看到许多人使用一个SqlTransaction使用语句。 在SqlTransaction中使用这种types的语句的好处和/或区别是什么? using (SqlConnection cn = new SqlConnection()) { using (SqlTransaction tr = cn.BeginTransaction()) { //some code tr.Commit(); } } 目前我的代码如下所示: SqlConnection cn = new SqlConnection(ConfigurationManager.AppSettings["T3"]); cn.Open(); SqlTransaction tr = cn.BeginTransaction(); try { //some code tr.Commit(); cn.Close(); } catch(Exception ex) { tr.Rollback(); cn.Close(); throw ex; } 一种方式的优点是什么?

如何处理WCFexception(带有代码的统一列表)

我试图延长这个答案,以使WCF客户端重试暂时networking故障,并处理其他情况下需要重试,如​​身份validation到期。 题: 什么是需要处理的WCFexception,以及处理它们的正确方法是什么? 以下是我希望看到的一些示例技术,以代替proxy.abort()或除此之外: 重试前延迟X秒 closures并重新创build一个新()WCF客户端。 configuration旧的。 不要重试并重新抛出这个错误 重试N次,然后抛出 由于一个人不太可能知道所有的例外情况或解决方法,因此请分享您的知识。 我将在下面的代码示例中汇总答案和方法。 // USAGE SAMPLE //int newOrderId = 0; // need a value for definite assignment //Service<IOrderService>.Use(orderService=> //{ // newOrderId = orderService.PlaceOrder(request); //} /// <summary> /// A safe WCF Proxy suitable when sessionmode=false /// </summary> /// <param name="codeBlock"></param> public static void Use(UseServiceDelegateVoid<T> codeBlock) { IClientChannel proxy […]

如果发生错误,使用语句会回滚数据库事务吗?

我在using语句中有一个IDbTransaction,但是我不确定在using语句中是否抛出exception,是否会回滚。 我知道一个使用语句将强制执行Dispose()的调用…但是有谁知道对于Rollback()是否也是如此? 更新:另外,我是否需要显式调用Commit(),如下所示,或者这也将由using语句来处理? 我的代码看起来像这样: using Microsoft.Practices.EnterpriseLibrary.Data; … using(IDbConnection connection = DatabaseInstance.CreateConnection()) { connection.Open(); using(IDbTransaction transaction = connection.BeginTransaction()) { //Attempt to do stuff in the database //potentially throw an exception transaction.Commit(); } }

使用语句和等待关键字在c#中很好地发挥

我有一个情况,我正在进行一个方法返回和IDisposable实例的async调用。 例如: HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")); 现在async在现场之前,在使用IDisposable实例时,使用“响应”variables的这个调用和代码将被包装在using语句中。 我的问题是,当async关键字被混入时,这是否仍然是正确的方法? 即使代码编译,在下面的例子中,using语句是否仍然按照预期工作? 例1 using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"))) { // Do something with the response return true; } 例2 using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"))) { await this.responseLogger.LogResponseAsync(response); return true; }

如果我在使用声明结束之前返回,会发生什么情况? 这个configuration会被调用吗?

我有下面的代码 using(MemoryStream ms = new MemoryStream()) { //code return 0; } dispose()方法在using语句大括号}右边被调用? 由于我在using语句结束之前return , MemoryStream对象是否会正确处理? 这里发生了什么?

使用多个variables的语句

是否有可能通过以某种方式在相同的使用块中声明2variables来使这个代码更紧凑? using (var sr = new StringReader(content)) { using (var xtr = new XmlTextReader(sr)) { obj = XmlSerializer.Deserialize(xtr) as TModel; } }

返回在使用块的中间

就像是: using (IDisposable disposable = GetSomeDisposable()) { //….. //…… return Stg(); } 我相信这不是一个适当的回归声明的地方,是吗?

如何使用迭代器?

我试图计算两点之间的距离。 我用C ++存储在vector中的两点:(0,0)和(1,1)。 我应该得到的结果 0 1.4 1.4 0 但是我得到的实际结果是 0 1 -1 0 我认为在向量中使用迭代器的方式有些问题。 我该如何解决这个问题? 我发布了下面的代码。 typedef struct point { float x; float y; } point; float distance(point *p1, point *p2) { return sqrt((p1->x – p2->x)*(p1->x – p2->x) + (p1->y – p2->y)*(p1->y – p2->y)); } int main() { vector <point> po; point p1; p1.x = […]

'使用'语句与'最后尝试'

我有一堆属性,我将使用读/写锁。 我可以通过try finally或try finally子句来实现它们。 在try finally的try finally我会在try之前获得locking,并在finally释放。 在using子句中,我将创build一个在其构造函数中获取锁的类,并在其Dispose方法中释放它。 我在很多地方使用读/写锁,所以我一直在寻找比try finally更简洁的方法。 我有兴趣听到一些关于为什么不推荐一种方式或为什么可能比另一种更好的想法。 方法1( try finally ): static ReaderWriterLock rwlMyLock_m = new ReaderWriterLock(); private DateTime dtMyDateTime_m public DateTime MyDateTime { get { rwlMyLock_m .AcquireReaderLock(0); try { return dtMyDateTime_m } finally { rwlMyLock_m .ReleaseReaderLock(); } } set { rwlMyLock_m .AcquireWriterLock(0); try { dtMyDateTime_m = value; } finally { […]