From 94da908813e42c328572bc5da2ddc41b6664b59c Mon Sep 17 00:00:00 2001
From: Justin Clark-Casey (justincc)
Date: Wed, 14 Nov 2012 04:45:59 +0000
Subject: More consistently dispose of SqliteCommand in OpenSim.Data.SQLite
 where possible.

Not doing SQLiteInventoryStore since this is no longer used and should disappear in the future.
---
 OpenSim/Data/SQLite/SQLiteAssetData.cs           |  14 +-
 OpenSim/Data/SQLite/SQLiteAuthenticationData.cs  | 145 ++++++++--------
 OpenSim/Data/SQLite/SQLiteAvatarData.cs          |  22 +--
 OpenSim/Data/SQLite/SQLiteEstateData.cs          | 206 ++++++++++++-----------
 OpenSim/Data/SQLite/SQLiteFramework.cs           |   9 +-
 OpenSim/Data/SQLite/SQLiteFriendsData.cs         |  25 +--
 OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs | 106 ++++++------
 OpenSim/Data/SQLite/SQLiteUserAccountData.cs     |  25 +--
 OpenSim/Data/SQLite/SQLiteXInventoryData.cs      |  51 +++---
 9 files changed, 305 insertions(+), 298 deletions(-)

(limited to 'OpenSim/Data')

diff --git a/OpenSim/Data/SQLite/SQLiteAssetData.cs b/OpenSim/Data/SQLite/SQLiteAssetData.cs
index d0e24c3..61e7aaf 100644
--- a/OpenSim/Data/SQLite/SQLiteAssetData.cs
+++ b/OpenSim/Data/SQLite/SQLiteAssetData.cs
@@ -202,7 +202,8 @@ namespace OpenSim.Data.SQLite
         /// <returns>True if exist, or false.</returns>
         override public bool ExistsAsset(UUID uuid)
         {
-            lock (this) {
+            lock (this) 
+            {
                 using (SqliteCommand cmd = new SqliteCommand(SelectAssetSQL, m_conn))
                 {
                     cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.ToString()));
@@ -353,12 +354,13 @@ namespace OpenSim.Data.SQLite
         {
             lock (this)
             {
-            using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn))
-            {
-                cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.ToString()));
-                cmd.ExecuteNonQuery();
-            }
+                using (SqliteCommand cmd = new SqliteCommand(DeleteAssetSQL, m_conn))
+                {
+                    cmd.Parameters.Add(new SqliteParameter(":UUID", uuid.ToString()));
+                    cmd.ExecuteNonQuery();
+                }
             }
+
             return true;
         }
 
diff --git a/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs b/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs
index 5120453..0428c11 100644
--- a/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs
+++ b/OpenSim/Data/SQLite/SQLiteAuthenticationData.cs
@@ -82,11 +82,14 @@ namespace OpenSim.Data.SQLite
         {
             AuthenticationData ret = new AuthenticationData();
             ret.Data = new Dictionary<string, object>();
+            IDataReader result;
 
-            SqliteCommand cmd = new SqliteCommand("select * from `" + m_Realm + "` where UUID = :PrincipalID");
-            cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
+            using (SqliteCommand cmd = new SqliteCommand("select * from `" + m_Realm + "` where UUID = :PrincipalID"))
+            {
+                cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
 
-            IDataReader result = ExecuteReader(cmd, m_Connection);
+                result = ExecuteReader(cmd, m_Connection);
+            }
 
             try
             {
@@ -121,10 +124,6 @@ namespace OpenSim.Data.SQLite
             catch
             {
             }
-            finally
-            {
-                //CloseCommand(cmd);
-            }
 
             return null;
         }
@@ -140,84 +139,81 @@ namespace OpenSim.Data.SQLite
             foreach (object o in data.Data.Values)
                 values[i++] = o.ToString();
 
-            SqliteCommand cmd = new SqliteCommand();
-
-            if (Get(data.PrincipalID) != null)
+            using (SqliteCommand cmd = new SqliteCommand())
             {
+                if (Get(data.PrincipalID) != null)
+                {
 
 
-                string update = "update `" + m_Realm + "` set ";
-                bool first = true;
-                foreach (string field in fields)
-                {
-                    if (!first)
-                        update += ", ";
-                    update += "`" + field + "` = :" + field;
-                    cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
+                    string update = "update `" + m_Realm + "` set ";
+                    bool first = true;
+                    foreach (string field in fields)
+                    {
+                        if (!first)
+                            update += ", ";
+                        update += "`" + field + "` = :" + field;
+                        cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
 
-                    first = false;
-                }
+                        first = false;
+                    }
 
-                update += " where UUID = :UUID";
-                cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
+                    update += " where UUID = :UUID";
+                    cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
 
-                cmd.CommandText = update;
-                try
-                {
-                    if (ExecuteNonQuery(cmd, m_Connection) < 1)
+                    cmd.CommandText = update;
+                    try
+                    {
+                        if (ExecuteNonQuery(cmd, m_Connection) < 1)
+                        {
+                            //CloseCommand(cmd);
+                            return false;
+                        }
+                    }
+                    catch (Exception e)
                     {
+                        m_log.Error("[SQLITE]: Exception storing authentication data", e);
                         //CloseCommand(cmd);
                         return false;
                     }
                 }
-                catch (Exception e)
+                else
                 {
-                    m_log.Error("[SQLITE]: Exception storing authentication data", e);
-                    //CloseCommand(cmd);
-                    return false;
-                }
-            }
+                    string insert = "insert into `" + m_Realm + "` (`UUID`, `" +
+                            String.Join("`, `", fields) +
+                            "`) values (:UUID, :" + String.Join(", :", fields) + ")";
 
-            else
-            {
-                string insert = "insert into `" + m_Realm + "` (`UUID`, `" +
-                        String.Join("`, `", fields) +
-                        "`) values (:UUID, :" + String.Join(", :", fields) + ")";
-
-                cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
-                foreach (string field in fields)
-                    cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
+                    cmd.Parameters.Add(new SqliteParameter(":UUID", data.PrincipalID.ToString()));
+                    foreach (string field in fields)
+                        cmd.Parameters.Add(new SqliteParameter(":" + field, data.Data[field]));
 
-                cmd.CommandText = insert;
+                    cmd.CommandText = insert;
 
-                try
-                {
-                    if (ExecuteNonQuery(cmd, m_Connection) < 1)
+                    try
                     {
-                        //CloseCommand(cmd);
+                        if (ExecuteNonQuery(cmd, m_Connection) < 1)
+                        {
+                            return false;
+                        }
+                    }
+                    catch (Exception e)
+                    {
+                        Console.WriteLine(e.ToString());
                         return false;
                     }
                 }
-                catch (Exception e)
-                {
-                    Console.WriteLine(e.ToString());
-                    //CloseCommand(cmd);
-                    return false;
-                }
             }
 
-            //CloseCommand(cmd);
-
             return true;
         }
 
         public bool SetDataItem(UUID principalID, string item, string value)
         {
-            SqliteCommand cmd = new SqliteCommand("update `" + m_Realm +
-                    "` set `" + item + "` = " + value + " where UUID = '" + principalID.ToString() + "'");
-
-            if (ExecuteNonQuery(cmd, m_Connection) > 0)
-                return true;
+            using (SqliteCommand cmd = new SqliteCommand("update `" + m_Realm +
+                    "` set `" + item + "` = " + value + " where UUID = '" + principalID.ToString() + "'"))
+            {
+                if (ExecuteNonQuery(cmd, m_Connection) > 0)
+                    return true;
+            }
 
             return false;
         }
@@ -227,16 +223,13 @@ namespace OpenSim.Data.SQLite
             if (System.Environment.TickCount - m_LastExpire > 30000)
                 DoExpire();
 
-            SqliteCommand cmd = new SqliteCommand("insert into tokens (UUID, token, validity) values ('" + principalID.ToString() + 
-                "', '" + token + "', datetime('now', 'localtime', '+" + lifetime.ToString() + " minutes'))");
-
-            if (ExecuteNonQuery(cmd, m_Connection) > 0)
+            using (SqliteCommand cmd = new SqliteCommand("insert into tokens (UUID, token, validity) values ('" + principalID.ToString() + 
+                "', '" + token + "', datetime('now', 'localtime', '+" + lifetime.ToString() + " minutes'))"))
             {
-                cmd.Dispose();
-                return true;
+                if (ExecuteNonQuery(cmd, m_Connection) > 0)
+                    return true;
             }
 
-            cmd.Dispose();
             return false;
         }
 
@@ -245,28 +238,22 @@ namespace OpenSim.Data.SQLite
             if (System.Environment.TickCount - m_LastExpire > 30000)
                 DoExpire();
 
-            SqliteCommand cmd = new SqliteCommand("update tokens set validity = datetime('now', 'localtime', '+" + lifetime.ToString() + 
-                " minutes') where UUID = '" + principalID.ToString() + "' and token = '" + token + "' and validity > datetime('now', 'localtime')");
-
-            if (ExecuteNonQuery(cmd, m_Connection) > 0)
+            using (SqliteCommand cmd = new SqliteCommand("update tokens set validity = datetime('now', 'localtime', '+" + lifetime.ToString() + 
+                " minutes') where UUID = '" + principalID.ToString() + "' and token = '" + token + "' and validity > datetime('now', 'localtime')"))
             {
-                cmd.Dispose();
-                return true;
+                if (ExecuteNonQuery(cmd, m_Connection) > 0)
+                    return true;
             }
 
-            cmd.Dispose();
-
             return false;
         }
 
         private void DoExpire()
         {
-            SqliteCommand cmd = new SqliteCommand("delete from tokens where validity < datetime('now', 'localtime')");
-            ExecuteNonQuery(cmd, m_Connection);
-
-            cmd.Dispose();
+            using (SqliteCommand cmd = new SqliteCommand("delete from tokens where validity < datetime('now', 'localtime')"))
+                ExecuteNonQuery(cmd, m_Connection);
 
             m_LastExpire = System.Environment.TickCount;
         }
     }
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteAvatarData.cs b/OpenSim/Data/SQLite/SQLiteAvatarData.cs
index faf34da..c6d615b 100644
--- a/OpenSim/Data/SQLite/SQLiteAvatarData.cs
+++ b/OpenSim/Data/SQLite/SQLiteAvatarData.cs
@@ -56,23 +56,17 @@ namespace OpenSim.Data.SQLite
 
         public bool Delete(UUID principalID, string name)
         {
-            SqliteCommand cmd = new SqliteCommand();
-
-            cmd.CommandText = String.Format("delete from {0} where `PrincipalID` = :PrincipalID and `Name` = :Name", m_Realm);
-            cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
-            cmd.Parameters.AddWithValue(":Name", name);
-
-            try
+            using (SqliteCommand cmd = new SqliteCommand())
             {
+                cmd.CommandText = String.Format("delete from {0} where `PrincipalID` = :PrincipalID and `Name` = :Name", m_Realm);
+                cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
+                cmd.Parameters.AddWithValue(":Name", name);
+
                 if (ExecuteNonQuery(cmd, m_Connection) > 0)
                     return true;
-
-                return false;
-            }
-            finally
-            {
-                //CloseCommand(cmd);
             }
+
+            return false;
         }
     }
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteEstateData.cs b/OpenSim/Data/SQLite/SQLiteEstateData.cs
index c042ba2..d51f2d4 100644
--- a/OpenSim/Data/SQLite/SQLiteEstateData.cs
+++ b/OpenSim/Data/SQLite/SQLiteEstateData.cs
@@ -104,12 +104,13 @@ namespace OpenSim.Data.SQLite
         {
             string sql = "select estate_settings."+String.Join(",estate_settings.", FieldList)+" from estate_map left join estate_settings on estate_map.EstateID = estate_settings.EstateID where estate_settings.EstateID is not null and RegionID = :RegionID";
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = sql;
-            cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {
+                cmd.CommandText = sql;
+                cmd.Parameters.AddWithValue(":RegionID", regionID.ToString());
 
-            return DoLoad(cmd, regionID, create);
+                return DoLoad(cmd, regionID, create);
+            }
         }
 
         private EstateSettings DoLoad(SqliteCommand cmd, UUID regionID, bool create)
@@ -186,37 +187,39 @@ namespace OpenSim.Data.SQLite
         {
             List<string> names = new List<string>(FieldList);
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
             IDataReader r = null;
 
-            names.Remove("EstateID");
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {            
+                names.Remove("EstateID");
 
-            string sql = "insert into estate_settings ("+String.Join(",", names.ToArray())+") values ( :"+String.Join(", :", names.ToArray())+")";
+                string sql = "insert into estate_settings ("+String.Join(",", names.ToArray())+") values ( :"+String.Join(", :", names.ToArray())+")";
 
-            cmd.CommandText = sql;
-            cmd.Parameters.Clear();
+                cmd.CommandText = sql;
+                cmd.Parameters.Clear();
 
-            foreach (string name in FieldList)
-            {
-                if (m_FieldMap[name].GetValue(es) is bool)
+                foreach (string name in FieldList)
                 {
-                    if ((bool)m_FieldMap[name].GetValue(es))
-                        cmd.Parameters.AddWithValue(":"+name, "1");
+                    if (m_FieldMap[name].GetValue(es) is bool)
+                    {
+                        if ((bool)m_FieldMap[name].GetValue(es))
+                            cmd.Parameters.AddWithValue(":"+name, "1");
+                        else
+                            cmd.Parameters.AddWithValue(":"+name, "0");
+                    }
                     else
-                        cmd.Parameters.AddWithValue(":"+name, "0");
-                }
-                else
-                {
-                    cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
+                    {
+                        cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
+                    }
                 }
-            }
 
-            cmd.ExecuteNonQuery();
+                cmd.ExecuteNonQuery();
 
-            cmd.CommandText = "select LAST_INSERT_ROWID() as id";
-            cmd.Parameters.Clear();
+                cmd.CommandText = "select LAST_INSERT_ROWID() as id";
+                cmd.Parameters.Clear();
 
-            r = cmd.ExecuteReader();
+                r = cmd.ExecuteReader();
+            }
 
             r.Read();
 
@@ -239,26 +242,27 @@ namespace OpenSim.Data.SQLite
 
             string sql = "update estate_settings set "+String.Join(", ", terms.ToArray())+" where EstateID = :EstateID";
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = sql;
-
-            foreach (string name in FieldList)
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
             {
-                if (m_FieldMap[name].GetValue(es) is bool)
+                cmd.CommandText = sql;
+
+                foreach (string name in FieldList)
                 {
-                    if ((bool)m_FieldMap[name].GetValue(es))
-                        cmd.Parameters.AddWithValue(":"+name, "1");
+                    if (m_FieldMap[name].GetValue(es) is bool)
+                    {
+                        if ((bool)m_FieldMap[name].GetValue(es))
+                            cmd.Parameters.AddWithValue(":"+name, "1");
+                        else
+                            cmd.Parameters.AddWithValue(":"+name, "0");
+                    }
                     else
-                        cmd.Parameters.AddWithValue(":"+name, "0");
-                }
-                else
-                {
-                    cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
+                    {
+                        cmd.Parameters.AddWithValue(":"+name, m_FieldMap[name].GetValue(es).ToString());
+                    }
                 }
-            }
 
-            cmd.ExecuteNonQuery();
+                cmd.ExecuteNonQuery();
+            }
 
             SaveBanList(es);
             SaveUUIDList(es.EstateID, "estate_managers", es.EstateManagers);
@@ -270,12 +274,15 @@ namespace OpenSim.Data.SQLite
         {
             es.ClearBans();
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
+            IDataReader r;
 
-            cmd.CommandText = "select bannedUUID from estateban where EstateID = :EstateID";
-            cmd.Parameters.AddWithValue(":EstateID", es.EstateID);
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {
+                cmd.CommandText = "select bannedUUID from estateban where EstateID = :EstateID";
+                cmd.Parameters.AddWithValue(":EstateID", es.EstateID);
 
-            IDataReader r = cmd.ExecuteReader();
+                r = cmd.ExecuteReader();
+            }
 
             while (r.Read())
             {
@@ -294,60 +301,64 @@ namespace OpenSim.Data.SQLite
 
         private void SaveBanList(EstateSettings es)
         {
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = "delete from estateban where EstateID = :EstateID";
-            cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
-
-            cmd.ExecuteNonQuery();
-
-            cmd.Parameters.Clear();
-
-            cmd.CommandText = "insert into estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask) values ( :EstateID, :bannedUUID, '', '', '' )";
-
-            foreach (EstateBan b in es.EstateBans)
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
             {
+                cmd.CommandText = "delete from estateban where EstateID = :EstateID";
                 cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
-                cmd.Parameters.AddWithValue(":bannedUUID", b.BannedUserID.ToString());
 
                 cmd.ExecuteNonQuery();
+
                 cmd.Parameters.Clear();
+
+                cmd.CommandText = "insert into estateban (EstateID, bannedUUID, bannedIp, bannedIpHostMask, bannedNameMask) values ( :EstateID, :bannedUUID, '', '', '' )";
+
+                foreach (EstateBan b in es.EstateBans)
+                {
+                    cmd.Parameters.AddWithValue(":EstateID", es.EstateID.ToString());
+                    cmd.Parameters.AddWithValue(":bannedUUID", b.BannedUserID.ToString());
+
+                    cmd.ExecuteNonQuery();
+                    cmd.Parameters.Clear();
+                }
             }
         }
 
         void SaveUUIDList(uint EstateID, string table, UUID[] data)
         {
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = "delete from "+table+" where EstateID = :EstateID";
-            cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
-
-            cmd.ExecuteNonQuery();
-
-            cmd.Parameters.Clear();
-
-            cmd.CommandText = "insert into "+table+" (EstateID, uuid) values ( :EstateID, :uuid )";
-
-            foreach (UUID uuid in data)
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
             {
+                cmd.CommandText = "delete from "+table+" where EstateID = :EstateID";
                 cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
-                cmd.Parameters.AddWithValue(":uuid", uuid.ToString());
 
                 cmd.ExecuteNonQuery();
+
                 cmd.Parameters.Clear();
+
+                cmd.CommandText = "insert into "+table+" (EstateID, uuid) values ( :EstateID, :uuid )";
+
+                foreach (UUID uuid in data)
+                {
+                    cmd.Parameters.AddWithValue(":EstateID", EstateID.ToString());
+                    cmd.Parameters.AddWithValue(":uuid", uuid.ToString());
+
+                    cmd.ExecuteNonQuery();
+                    cmd.Parameters.Clear();
+                }
             }
         }
 
         UUID[] LoadUUIDList(uint EstateID, string table)
         {
             List<UUID> uuids = new List<UUID>();
+            IDataReader r;
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = "select uuid from "+table+" where EstateID = :EstateID";
-            cmd.Parameters.AddWithValue(":EstateID", EstateID);
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {
+                cmd.CommandText = "select uuid from "+table+" where EstateID = :EstateID";
+                cmd.Parameters.AddWithValue(":EstateID", EstateID);
 
-            IDataReader r = cmd.ExecuteReader();
+                r = cmd.ExecuteReader();
+            }
 
             while (r.Read())
             {
@@ -367,12 +378,13 @@ namespace OpenSim.Data.SQLite
         {
             string sql = "select estate_settings."+String.Join(",estate_settings.", FieldList)+" from estate_settings where estate_settings.EstateID = :EstateID";
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = sql;
-            cmd.Parameters.AddWithValue(":EstateID", estateID.ToString());
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {
+                cmd.CommandText = sql;
+                cmd.Parameters.AddWithValue(":EstateID", estateID.ToString());
 
-            return DoLoad(cmd, UUID.Zero, false);
+                return DoLoad(cmd, UUID.Zero, false);
+            }
         }
         
         public List<EstateSettings> LoadEstateSettingsAll()
@@ -391,13 +403,15 @@ namespace OpenSim.Data.SQLite
             List<int> result = new List<int>();
 
             string sql = "select EstateID from estate_settings where estate_settings.EstateName = :EstateName";
+            IDataReader r;
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = sql;
-            cmd.Parameters.AddWithValue(":EstateName", search);
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {
+                cmd.CommandText = sql;
+                cmd.Parameters.AddWithValue(":EstateName", search);
 
-            IDataReader r = cmd.ExecuteReader();
+                r = cmd.ExecuteReader();
+            }
 
             while (r.Read())
             {
@@ -413,12 +427,14 @@ namespace OpenSim.Data.SQLite
             List<int> result = new List<int>();
 
             string sql = "select EstateID from estate_settings";
+            IDataReader r;
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = sql;
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {
+                cmd.CommandText = sql;
 
-            IDataReader r = cmd.ExecuteReader();
+                r = cmd.ExecuteReader();
+            }
 
             while (r.Read())
             {
@@ -434,13 +450,15 @@ namespace OpenSim.Data.SQLite
             List<int> result = new List<int>();
 
             string sql = "select EstateID from estate_settings where estate_settings.EstateOwner = :EstateOwner";
+            IDataReader r;
 
-            SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand();
-
-            cmd.CommandText = sql;
-            cmd.Parameters.AddWithValue(":EstateOwner", ownerID);
+            using (SqliteCommand cmd = (SqliteCommand)m_connection.CreateCommand())
+            {
+                cmd.CommandText = sql;
+                cmd.Parameters.AddWithValue(":EstateOwner", ownerID);
 
-            IDataReader r = cmd.ExecuteReader();
+                r = cmd.ExecuteReader();
+            }
 
             while (r.Read())
             {
diff --git a/OpenSim/Data/SQLite/SQLiteFramework.cs b/OpenSim/Data/SQLite/SQLiteFramework.cs
index 1594717..35b9a2f 100644
--- a/OpenSim/Data/SQLite/SQLiteFramework.cs
+++ b/OpenSim/Data/SQLite/SQLiteFramework.cs
@@ -90,12 +90,5 @@ namespace OpenSim.Data.SQLite
                 return cmd.ExecuteReader();
             }
         }
-
-        protected void CloseCommand(SqliteCommand cmd)
-        {
-            cmd.Connection.Close();
-            cmd.Connection.Dispose();
-            cmd.Dispose();
-        }
     }
-}
+}
\ No newline at end of file
diff --git a/OpenSim/Data/SQLite/SQLiteFriendsData.cs b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
index 5f68977..cab85eb 100644
--- a/OpenSim/Data/SQLite/SQLiteFriendsData.cs
+++ b/OpenSim/Data/SQLite/SQLiteFriendsData.cs
@@ -53,13 +53,13 @@ namespace OpenSim.Data.SQLite
 
         public FriendsData[] GetFriends(string userID)
         {
-            SqliteCommand cmd = new SqliteCommand();
-
-            cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = :PrincipalID", m_Realm);
-            cmd.Parameters.AddWithValue(":PrincipalID", userID.ToString());
-
-            return DoQuery(cmd);
+            using (SqliteCommand cmd = new SqliteCommand())
+            {
+                cmd.CommandText = String.Format("select a.*,case when b.Flags is null then -1 else b.Flags end as TheirFlags from {0} as a left join {0} as b on a.PrincipalID = b.Friend and a.Friend = b.PrincipalID where a.PrincipalID = :PrincipalID", m_Realm);
+                cmd.Parameters.AddWithValue(":PrincipalID", userID.ToString());
 
+                return DoQuery(cmd);
+            }
         }
 
         public bool Delete(UUID principalID, string friend)
@@ -69,13 +69,14 @@ namespace OpenSim.Data.SQLite
 
         public bool Delete(string principalID, string friend)
         {
-            SqliteCommand cmd = new SqliteCommand();
-
-            cmd.CommandText = String.Format("delete from {0} where PrincipalID = :PrincipalID and Friend = :Friend", m_Realm);
-            cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
-            cmd.Parameters.AddWithValue(":Friend", friend);
+            using (SqliteCommand cmd = new SqliteCommand())
+            {
+                cmd.CommandText = String.Format("delete from {0} where PrincipalID = :PrincipalID and Friend = :Friend", m_Realm);
+                cmd.Parameters.AddWithValue(":PrincipalID", principalID.ToString());
+                cmd.Parameters.AddWithValue(":Friend", friend);
 
-            ExecuteNonQuery(cmd, m_Connection);
+                ExecuteNonQuery(cmd, m_Connection);
+            }
 
             return true;
         }
diff --git a/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs b/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
index 4f977a8..917a0a1 100644
--- a/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
+++ b/OpenSim/Data/SQLite/SQLiteGenericTableHandler.cs
@@ -132,22 +132,23 @@ namespace OpenSim.Data.SQLite
 
             List<string> terms = new List<string>();
 
-            SqliteCommand cmd = new SqliteCommand();
-
-            for (int i = 0 ; i < fields.Length ; i++)
+            using (SqliteCommand cmd = new SqliteCommand())
             {
-                cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
-                terms.Add("`" + fields[i] + "` = :" + fields[i]);
-            }
+                for (int i = 0 ; i < fields.Length ; i++)
+                {
+                    cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
+                    terms.Add("`" + fields[i] + "` = :" + fields[i]);
+                }
 
-            string where = String.Join(" and ", terms.ToArray());
+                string where = String.Join(" and ", terms.ToArray());
 
-            string query = String.Format("select * from {0} where {1}",
-                    m_Realm, where);
+                string query = String.Format("select * from {0} where {1}",
+                        m_Realm, where);
 
-            cmd.CommandText = query;
+                cmd.CommandText = query;
 
-            return DoQuery(cmd);
+                return DoQuery(cmd);
+            }
         }
 
         protected T[] DoQuery(SqliteCommand cmd)
@@ -214,50 +215,52 @@ namespace OpenSim.Data.SQLite
 
         public T[] Get(string where)
         {
-            SqliteCommand cmd = new SqliteCommand();
-
-            string query = String.Format("select * from {0} where {1}",
-                    m_Realm, where);
+            using (SqliteCommand cmd = new SqliteCommand())
+            {
+                string query = String.Format("select * from {0} where {1}",
+                        m_Realm, where);
 
-            cmd.CommandText = query;
+                cmd.CommandText = query;
 
-            return DoQuery(cmd);
+                return DoQuery(cmd);
+            }
         }
 
         public bool Store(T row)
         {
-            SqliteCommand cmd = new SqliteCommand();
-
-            string query = "";
-            List<String> names = new List<String>();
-            List<String> values = new List<String>();
-
-            foreach (FieldInfo fi in m_Fields.Values)
+            using (SqliteCommand cmd = new SqliteCommand())
             {
-                names.Add(fi.Name);
-                values.Add(":" + fi.Name);
-                cmd.Parameters.Add(new SqliteParameter(":" + fi.Name, fi.GetValue(row).ToString()));
-            }
+                string query = "";
+                List<String> names = new List<String>();
+                List<String> values = new List<String>();
 
-            if (m_DataField != null)
-            {
-                Dictionary<string, string> data =
-                        (Dictionary<string, string>)m_DataField.GetValue(row);
+                foreach (FieldInfo fi in m_Fields.Values)
+                {
+                    names.Add(fi.Name);
+                    values.Add(":" + fi.Name);
+                    cmd.Parameters.Add(new SqliteParameter(":" + fi.Name, fi.GetValue(row).ToString()));
+                }
 
-                foreach (KeyValuePair<string, string> kvp in data)
+                if (m_DataField != null)
                 {
-                    names.Add(kvp.Key);
-                    values.Add(":" + kvp.Key);
-                    cmd.Parameters.Add(new SqliteParameter(":" + kvp.Key, kvp.Value));
+                    Dictionary<string, string> data =
+                            (Dictionary<string, string>)m_DataField.GetValue(row);
+
+                    foreach (KeyValuePair<string, string> kvp in data)
+                    {
+                        names.Add(kvp.Key);
+                        values.Add(":" + kvp.Key);
+                        cmd.Parameters.Add(new SqliteParameter(":" + kvp.Key, kvp.Value));
+                    }
                 }
-            }
 
-            query = String.Format("replace into {0} (`", m_Realm) + String.Join("`,`", names.ToArray()) + "`) values (" + String.Join(",", values.ToArray()) + ")";
+                query = String.Format("replace into {0} (`", m_Realm) + String.Join("`,`", names.ToArray()) + "`) values (" + String.Join(",", values.ToArray()) + ")";
 
-            cmd.CommandText = query;
+                cmd.CommandText = query;
 
-            if (ExecuteNonQuery(cmd, m_Connection) > 0)
-                return true;
+                if (ExecuteNonQuery(cmd, m_Connection) > 0)
+                    return true;
+            }
 
             return false;
         }
@@ -274,21 +277,22 @@ namespace OpenSim.Data.SQLite
 
             List<string> terms = new List<string>();
 
-            SqliteCommand cmd = new SqliteCommand();
-
-            for (int i = 0 ; i < fields.Length ; i++)
+            using (SqliteCommand cmd = new SqliteCommand())
             {
-                cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
-                terms.Add("`" + fields[i] + "` = :" + fields[i]);
-            }
+                for (int i = 0 ; i < fields.Length ; i++)
+                {
+                    cmd.Parameters.Add(new SqliteParameter(":" + fields[i], keys[i]));
+                    terms.Add("`" + fields[i] + "` = :" + fields[i]);
+                }
 
-            string where = String.Join(" and ", terms.ToArray());
+                string where = String.Join(" and ", terms.ToArray());
 
-            string query = String.Format("delete from {0} where {1}", m_Realm, where);
+                string query = String.Format("delete from {0} where {1}", m_Realm, where);
 
-            cmd.CommandText = query;
+                cmd.CommandText = query;
 
-            return ExecuteNonQuery(cmd, m_Connection) > 0;
+                return ExecuteNonQuery(cmd, m_Connection) > 0;
+            }
         }
     }
 }
diff --git a/OpenSim/Data/SQLite/SQLiteUserAccountData.cs b/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
index 7a5de50..f98d376 100644
--- a/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
+++ b/OpenSim/Data/SQLite/SQLiteUserAccountData.cs
@@ -66,20 +66,21 @@ namespace OpenSim.Data.SQLite
             if (words.Length > 2)
                 return new UserAccountData[0];
 
-            SqliteCommand cmd = new SqliteCommand();
-
-            if (words.Length == 1)
-            {
-                cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')",
-                    m_Realm, scopeID.ToString(), words[0]);
-            }
-            else
+            using (SqliteCommand cmd = new SqliteCommand())
             {
-                cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{3}%')", 
-                    m_Realm, scopeID.ToString(), words[0], words[1]);
-            }
+                if (words.Length == 1)
+                {
+                    cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{2}%')",
+                        m_Realm, scopeID.ToString(), words[0]);
+                }
+                else
+                {
+                    cmd.CommandText = String.Format("select * from {0} where (ScopeID='{1}' or ScopeID='00000000-0000-0000-0000-000000000000') and (FirstName like '{2}%' or LastName like '{3}%')", 
+                        m_Realm, scopeID.ToString(), words[0], words[1]);
+                }
 
-            return DoQuery(cmd);
+                return DoQuery(cmd);
+            }
         }
     }
 }
diff --git a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs
index 75f8c87..8eb1a63 100644
--- a/OpenSim/Data/SQLite/SQLiteXInventoryData.cs
+++ b/OpenSim/Data/SQLite/SQLiteXInventoryData.cs
@@ -139,35 +139,41 @@ namespace OpenSim.Data.SQLite
 
         public bool MoveItem(string id, string newParent)
         {
-            SqliteCommand cmd = new SqliteCommand();
-
-            cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where inventoryID = :InventoryID", m_Realm);
-            cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParent));
-            cmd.Parameters.Add(new SqliteParameter(":InventoryID", id));
+            using (SqliteCommand cmd = new SqliteCommand())
+            {
+                cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where inventoryID = :InventoryID", m_Realm);
+                cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParent));
+                cmd.Parameters.Add(new SqliteParameter(":InventoryID", id));
 
-            return ExecuteNonQuery(cmd, m_Connection) == 0 ? false : true;
+                return ExecuteNonQuery(cmd, m_Connection) == 0 ? false : true;
+            }
         }
 
         public XInventoryItem[] GetActiveGestures(UUID principalID)
         {
-            SqliteCommand cmd  = new SqliteCommand();
-            cmd.CommandText = String.Format("select * from inventoryitems where avatarId = :uuid and assetType = :type and flags = 1", m_Realm);
+            using (SqliteCommand cmd  = new SqliteCommand())
+            {
+                cmd.CommandText = String.Format("select * from inventoryitems where avatarId = :uuid and assetType = :type and flags = 1", m_Realm);
 
-            cmd.Parameters.Add(new SqliteParameter(":uuid", principalID.ToString()));
-            cmd.Parameters.Add(new SqliteParameter(":type", (int)AssetType.Gesture));
+                cmd.Parameters.Add(new SqliteParameter(":uuid", principalID.ToString()));
+                cmd.Parameters.Add(new SqliteParameter(":type", (int)AssetType.Gesture));
 
-            return DoQuery(cmd);
+                return DoQuery(cmd);
+            }
         }
 
         public int GetAssetPermissions(UUID principalID, UUID assetID)
         {
-            SqliteCommand cmd = new SqliteCommand();
+            IDataReader reader;
 
-            cmd.CommandText = String.Format("select inventoryCurrentPermissions from inventoryitems where avatarID = :PrincipalID and assetID = :AssetID", m_Realm);
-            cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
-            cmd.Parameters.Add(new SqliteParameter(":AssetID", assetID.ToString()));
+            using (SqliteCommand cmd = new SqliteCommand())
+            {
+                cmd.CommandText = String.Format("select inventoryCurrentPermissions from inventoryitems where avatarID = :PrincipalID and assetID = :AssetID", m_Realm);
+                cmd.Parameters.Add(new SqliteParameter(":PrincipalID", principalID.ToString()));
+                cmd.Parameters.Add(new SqliteParameter(":AssetID", assetID.ToString()));
 
-            IDataReader reader = ExecuteReader(cmd, m_Connection);
+                reader = ExecuteReader(cmd, m_Connection);
+            }
 
             int perms = 0;
 
@@ -192,13 +198,14 @@ namespace OpenSim.Data.SQLite
 
         public bool MoveFolder(string id, string newParentFolderID)
         {
-            SqliteCommand cmd = new SqliteCommand();
-
-            cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where folderID = :FolderID", m_Realm);
-            cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParentFolderID));
-            cmd.Parameters.Add(new SqliteParameter(":FolderID", id));
+            using (SqliteCommand cmd = new SqliteCommand())
+            {
+                cmd.CommandText = String.Format("update {0} set parentFolderID = :ParentFolderID where folderID = :FolderID", m_Realm);
+                cmd.Parameters.Add(new SqliteParameter(":ParentFolderID", newParentFolderID));
+                cmd.Parameters.Add(new SqliteParameter(":FolderID", id));
 
-            return ExecuteNonQuery(cmd, m_Connection) == 0 ? false : true;
+                return ExecuteNonQuery(cmd, m_Connection) == 0 ? false : true;
+            }
         }
     }
 }
\ No newline at end of file
-- 
cgit v1.1