Using和ADO.NET的一些觀念

  • 3165
  • 0

Using和ADO.NET的一些觀念

之前一直以為Using使用在ADO.NET上是非常方便的,可以幫我們自動開關連線,但剛剛才發現

這個想法其實是錯的,以下範例會產生錯誤

 


	using(SqlConnection cn =new SqlConnection(constring))
            {
              
                    string Sqlstring = "Insert into PMPM_ROLE_POLICY(MAIN_ROLE_ID,INTERACTION_ROLE_ID,ROLE_RELATIONSHIP,RELATIONSHIP_SCOPE,CREATE_USER_ID,CREATE_DATETIME) ";
                    Sqlstring += " values(@MainRoleID,@InteractionID,@RoleRelation,@RelationScope,@CreateUser,@CreateTime)";
                    SqlCommand insertCmd = new SqlCommand(Sqlstring, cn);
                    insertCmd.Parameters.Add("@MainRoleID", SqlDbType.VarChar).Value = mainRole;
                    insertCmd.Parameters.Add("@InteractionID", SqlDbType.VarChar).Value = interactionRole;
                    insertCmd.Parameters.Add("@RoleRelation", SqlDbType.VarChar).Value = relationRole;
                    insertCmd.Parameters.Add("@RelationScope", SqlDbType.VarChar).Value = relationScope;
                    insertCmd.Parameters.Add("@CreateUser", SqlDbType.VarChar).Value = userId;
                    insertCmd.Parameters.Add("@CreateTime", SqlDbType.DateTime).Value = System.DateTime.Now;
                    insertCmd.ExecuteNonQuery();
                    insertCmd.Dispose();                         
                       
            }

image

於是後來把cn.open()加上去之後就OK了。

 

這時就有點困惑了,之前寫的查詢功能,並沒有另外再寫開啟的指令,怎麼用新增的方式去跟資料庫互動就需要呢?

後來爬文找到喵大這篇,這才稍稍了解,有興趣可以去看看

http://www.dotblogs.com.tw/topcat/archive/2008/03/06/1282.aspx?fid=1137

大意上是說,使用Using在某些ADO.NET狀況上還是必須要自己寫開啓指令,至於為甚麼會這樣,

請參考此篇

http://www.dotblogs.com.tw/topcat/archive/2008/07/03/4427.aspx

 

Using使用參考

http://blog.miniasp.com/post/2009/10/12/About-CSharp-using-Statement-misunderstanding-on-try-catch-finally.aspx