diff options
Diffstat (limited to 'OpenSim/Data/MSSQL/MSSQLManager.cs')
-rw-r--r-- | OpenSim/Data/MSSQL/MSSQLManager.cs | 116 |
1 files changed, 112 insertions, 4 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLManager.cs b/OpenSim/Data/MSSQL/MSSQLManager.cs index 1a053d5..535cf33 100644 --- a/OpenSim/Data/MSSQL/MSSQLManager.cs +++ b/OpenSim/Data/MSSQL/MSSQLManager.cs | |||
@@ -64,9 +64,20 @@ namespace OpenSim.Data.MSSQL | |||
64 | connectionString = builder.ToString(); | 64 | connectionString = builder.ToString(); |
65 | } | 65 | } |
66 | 66 | ||
67 | private SqlConnection createConnection() | 67 | /// <summary> |
68 | /// Initialize the manager and set the connectionstring | ||
69 | /// </summary> | ||
70 | /// <param name="connection"></param> | ||
71 | public MSSQLManager(string connection) | ||
72 | { | ||
73 | connectionString = connection; | ||
74 | } | ||
75 | |||
76 | public SqlConnection DatabaseConnection() | ||
68 | { | 77 | { |
69 | SqlConnection conn = new SqlConnection(connectionString); | 78 | SqlConnection conn = new SqlConnection(connectionString); |
79 | |||
80 | //TODO is this good??? Opening connection here | ||
70 | conn.Open(); | 81 | conn.Open(); |
71 | 82 | ||
72 | return conn; | 83 | return conn; |
@@ -186,6 +197,105 @@ namespace OpenSim.Data.MSSQL | |||
186 | } | 197 | } |
187 | } | 198 | } |
188 | 199 | ||
200 | /// <summary> | ||
201 | /// Type conversion to a SQLDbType functions | ||
202 | /// </summary> | ||
203 | /// <param name="type"></param> | ||
204 | /// <returns></returns> | ||
205 | internal SqlDbType DbtypeFromType(Type type) | ||
206 | { | ||
207 | if (type == typeof(string)) | ||
208 | { | ||
209 | return SqlDbType.VarChar; | ||
210 | } | ||
211 | if (type == typeof(double)) | ||
212 | { | ||
213 | return SqlDbType.Float; | ||
214 | } | ||
215 | if (type == typeof(int)) | ||
216 | { | ||
217 | return SqlDbType.Int; | ||
218 | } | ||
219 | if (type == typeof(bool)) | ||
220 | { | ||
221 | return SqlDbType.Bit; | ||
222 | } | ||
223 | if (type == typeof(LLUUID)) | ||
224 | { | ||
225 | return SqlDbType.VarChar; | ||
226 | } | ||
227 | if (type == typeof(Byte[])) | ||
228 | { | ||
229 | return SqlDbType.Image; | ||
230 | } | ||
231 | if (type == typeof(uint)) | ||
232 | { | ||
233 | return SqlDbType.Int; | ||
234 | } | ||
235 | return SqlDbType.VarChar; | ||
236 | } | ||
237 | |||
238 | /// <summary> | ||
239 | /// Creates value for parameter. | ||
240 | /// </summary> | ||
241 | /// <param name="value">The value.</param> | ||
242 | /// <returns></returns> | ||
243 | private static object CreateParameterValue(object value) | ||
244 | { | ||
245 | Type valueType = value.GetType(); | ||
246 | |||
247 | if (valueType == typeof(LLUUID)) | ||
248 | { | ||
249 | return value.ToString(); | ||
250 | } | ||
251 | if (valueType == typeof(bool)) | ||
252 | { | ||
253 | return (bool)value ? 1 : 0; | ||
254 | } | ||
255 | if (valueType == typeof(Byte[])) | ||
256 | { | ||
257 | return value; | ||
258 | } | ||
259 | return value; | ||
260 | } | ||
261 | |||
262 | /// <summary> | ||
263 | /// Create a parameter for a command | ||
264 | /// </summary> | ||
265 | /// <param name="parameterName">Name of the parameter.</param> | ||
266 | /// <param name="parameterObject">parameter object.</param> | ||
267 | /// <returns></returns> | ||
268 | internal SqlParameter CreateParameter(string parameterName, object parameterObject) | ||
269 | { | ||
270 | return CreateParameter(parameterName, parameterObject, false); | ||
271 | } | ||
272 | |||
273 | /// <summary> | ||
274 | /// Creates the parameter for a command. | ||
275 | /// </summary> | ||
276 | /// <param name="parameterName">Name of the parameter.</param> | ||
277 | /// <param name="parameterObject">parameter object.</param> | ||
278 | /// <param name="parameterOut">if set to <c>true</c> parameter is a output parameter</param> | ||
279 | /// <returns></returns> | ||
280 | internal SqlParameter CreateParameter(string parameterName, object parameterObject, bool parameterOut) | ||
281 | { | ||
282 | //Tweak so we dont always have to add @ sign | ||
283 | if (!parameterName.StartsWith("@")) parameterName = "@" + parameterName; | ||
284 | |||
285 | SqlParameter parameter = new SqlParameter(parameterName, DbtypeFromType(parameterObject.GetType())); | ||
286 | |||
287 | if (parameterOut) | ||
288 | { | ||
289 | parameter.Direction = ParameterDirection.Output; | ||
290 | } | ||
291 | else | ||
292 | { | ||
293 | parameter.Direction = ParameterDirection.Input; | ||
294 | parameter.Value = CreateParameterValue(parameterObject); | ||
295 | } | ||
296 | |||
297 | return parameter; | ||
298 | } | ||
189 | 299 | ||
190 | private static readonly Dictionary<string, string> emptyDictionary = new Dictionary<string, string>(); | 300 | private static readonly Dictionary<string, string> emptyDictionary = new Dictionary<string, string>(); |
191 | internal AutoClosingSqlCommand Query(string sql) | 301 | internal AutoClosingSqlCommand Query(string sql) |
@@ -201,7 +311,7 @@ namespace OpenSim.Data.MSSQL | |||
201 | /// <returns>A Sql DB Command</returns> | 311 | /// <returns>A Sql DB Command</returns> |
202 | internal AutoClosingSqlCommand Query(string sql, Dictionary<string, string> parameters) | 312 | internal AutoClosingSqlCommand Query(string sql, Dictionary<string, string> parameters) |
203 | { | 313 | { |
204 | SqlCommand dbcommand = createConnection().CreateCommand(); | 314 | SqlCommand dbcommand = DatabaseConnection().CreateCommand(); |
205 | dbcommand.CommandText = sql; | 315 | dbcommand.CommandText = sql; |
206 | foreach (KeyValuePair<string, string> param in parameters) | 316 | foreach (KeyValuePair<string, string> param in parameters) |
207 | { | 317 | { |
@@ -211,8 +321,6 @@ namespace OpenSim.Data.MSSQL | |||
211 | return new AutoClosingSqlCommand(dbcommand); | 321 | return new AutoClosingSqlCommand(dbcommand); |
212 | } | 322 | } |
213 | 323 | ||
214 | |||
215 | |||
216 | /// <summary> | 324 | /// <summary> |
217 | /// Runs a database reader object and returns a region row | 325 | /// Runs a database reader object and returns a region row |
218 | /// </summary> | 326 | /// </summary> |