aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenGridServices/OpenGrid.Framework.Data.MSSQL/MSSQLManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenGridServices/OpenGrid.Framework.Data.MSSQL/MSSQLManager.cs')
-rw-r--r--OpenGridServices/OpenGrid.Framework.Data.MSSQL/MSSQLManager.cs171
1 files changed, 171 insertions, 0 deletions
diff --git a/OpenGridServices/OpenGrid.Framework.Data.MSSQL/MSSQLManager.cs b/OpenGridServices/OpenGrid.Framework.Data.MSSQL/MSSQLManager.cs
new file mode 100644
index 0000000..12c166c
--- /dev/null
+++ b/OpenGridServices/OpenGrid.Framework.Data.MSSQL/MSSQLManager.cs
@@ -0,0 +1,171 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Data;
5
6using System.Data.SqlClient;
7
8using OpenGrid.Framework.Data;
9
10namespace OpenGrid.Framework.Data.MSSQL
11{
12 class MSSqlManager
13 {
14 IDbConnection dbcon;
15
16 /// <summary>
17 /// Initialises and creates a new Sql connection and maintains it.
18 /// </summary>
19 /// <param name="hostname">The Sql server being connected to</param>
20 /// <param name="database">The name of the Sql database being used</param>
21 /// <param name="username">The username logging into the database</param>
22 /// <param name="password">The password for the user logging in</param>
23 /// <param name="cpooling">Whether to use connection pooling or not, can be one of the following: 'yes', 'true', 'no' or 'false', if unsure use 'false'.</param>
24 public MSSqlManager(string hostname, string database, string username, string password, string cpooling)
25 {
26 try
27 {
28 string connectionString = "Server=" + hostname + ";Database=" + database + ";User ID=" + username + ";Password=" + password + ";Pooling=" + cpooling + ";";
29 dbcon = new SqlConnection(connectionString);
30
31 dbcon.Open();
32 }
33 catch (Exception e)
34 {
35 throw new Exception("Error initialising Sql Database: " + e.ToString());
36 }
37 }
38
39 /// <summary>
40 /// Shuts down the database connection
41 /// </summary>
42 public void Close()
43 {
44 dbcon.Close();
45 dbcon = null;
46 }
47
48 /// <summary>
49 /// Runs a query with protection against SQL Injection by using parameterised input.
50 /// </summary>
51 /// <param name="sql">The SQL string - replace any variables such as WHERE x = "y" with WHERE x = @y</param>
52 /// <param name="parameters">The parameters - index so that @y is indexed as 'y'</param>
53 /// <returns>A Sql DB Command</returns>
54 public IDbCommand Query(string sql, Dictionary<string, string> parameters)
55 {
56 SqlCommand dbcommand = (SqlCommand)dbcon.CreateCommand();
57 dbcommand.CommandText = sql;
58 foreach (KeyValuePair<string, string> param in parameters)
59 {
60 dbcommand.Parameters.AddWithValue(param.Key, param.Value);
61 }
62
63 return (IDbCommand)dbcommand;
64 }
65
66 public SimProfileData getRow(IDataReader reader)
67 {
68 SimProfileData retval = new SimProfileData();
69
70 if (reader.Read())
71 {
72 // Region Main
73 retval.regionHandle = (ulong)reader["regionHandle"];
74 retval.regionName = (string)reader["regionName"];
75 retval.UUID = new libsecondlife.LLUUID((string)reader["uuid"]);
76
77 // Secrets
78 retval.regionRecvKey = (string)reader["regionRecvKey"];
79 retval.regionSecret = (string)reader["regionSecret"];
80 retval.regionSendKey = (string)reader["regionSendKey"];
81
82 // Region Server
83 retval.regionDataURI = (string)reader["regionDataURI"];
84 retval.regionOnline = false; // Needs to be pinged before this can be set.
85 retval.serverIP = (string)reader["serverIP"];
86 retval.serverPort = (uint)reader["serverPort"];
87 retval.serverURI = (string)reader["serverURI"];
88
89 // Location
90 retval.regionLocX = (uint)((int)reader["locX"]);
91 retval.regionLocY = (uint)((int)reader["locY"]);
92 retval.regionLocZ = (uint)((int)reader["locZ"]);
93
94 // Neighbours - 0 = No Override
95 retval.regionEastOverrideHandle = (ulong)reader["eastOverrideHandle"];
96 retval.regionWestOverrideHandle = (ulong)reader["westOverrideHandle"];
97 retval.regionSouthOverrideHandle = (ulong)reader["southOverrideHandle"];
98 retval.regionNorthOverrideHandle = (ulong)reader["northOverrideHandle"];
99
100 // Assets
101 retval.regionAssetURI = (string)reader["regionAssetURI"];
102 retval.regionAssetRecvKey = (string)reader["regionAssetRecvKey"];
103 retval.regionAssetSendKey = (string)reader["regionAssetSendKey"];
104
105 // Userserver
106 retval.regionUserURI = (string)reader["regionUserURI"];
107 retval.regionUserRecvKey = (string)reader["regionUserRecvKey"];
108 retval.regionUserSendKey = (string)reader["regionUserSendKey"];
109 }
110 else
111 {
112 throw new Exception("No rows to return");
113 }
114 return retval;
115 }
116
117 public bool insertRow(SimProfileData profile)
118 {
119 string sql = "REPLACE INTO regions VALUES (regionHandle, regionName, uuid, regionRecvKey, regionSecret, regionSendKey, regionDataURI, ";
120 sql += "serverIP, serverPort, serverURI, locX, locY, locZ, eastOverrideHandle, westOverrideHandle, southOverrideHandle, northOverrideHandle, regionAssetURI, regionAssetRecvKey, ";
121 sql += "regionAssetSendKey, regionUserURI, regionUserRecvKey, regionUserSendKey) VALUES ";
122
123 sql += "(@regionHandle, @regionName, @uuid, @regionRecvKey, @regionSecret, @regionSendKey, @regionDataURI, ";
124 sql += "@serverIP, @serverPort, @serverURI, @locX, @locY, @locZ, @eastOverrideHandle, @westOverrideHandle, @southOverrideHandle, @northOverrideHandle, @regionAssetURI, @regionAssetRecvKey, ";
125 sql += "@regionAssetSendKey, @regionUserURI, @regionUserRecvKey, @regionUserSendKey);";
126
127 Dictionary<string, string> parameters = new Dictionary<string, string>();
128
129 parameters["regionHandle"] = profile.regionHandle.ToString();
130 parameters["regionName"] = profile.regionName;
131 parameters["uuid"] = profile.UUID.ToString();
132 parameters["regionRecvKey"] = profile.regionRecvKey;
133 parameters["regionSendKey"] = profile.regionSendKey;
134 parameters["regionDataURI"] = profile.regionDataURI;
135 parameters["serverIP"] = profile.serverIP;
136 parameters["serverPort"] = profile.serverPort.ToString();
137 parameters["serverURI"] = profile.serverURI;
138 parameters["locX"] = profile.regionLocX.ToString();
139 parameters["locY"] = profile.regionLocY.ToString();
140 parameters["locZ"] = profile.regionLocZ.ToString();
141 parameters["eastOverrideHandle"] = profile.regionEastOverrideHandle.ToString();
142 parameters["westOverrideHandle"] = profile.regionWestOverrideHandle.ToString();
143 parameters["northOverrideHandle"] = profile.regionNorthOverrideHandle.ToString();
144 parameters["southOverrideHandle"] = profile.regionSouthOverrideHandle.ToString();
145 parameters["regionAssetURI"] = profile.regionAssetURI;
146 parameters["regionAssetRecvKey"] = profile.regionAssetRecvKey;
147 parameters["regionAssetSendKey"] = profile.regionAssetSendKey;
148 parameters["regionUserURI"] = profile.regionUserURI;
149 parameters["regionUserRecvKey"] = profile.regionUserRecvKey;
150 parameters["regionUserSendKey"] = profile.regionUserSendKey;
151
152 bool returnval = false;
153
154 try
155 {
156 IDbCommand result = Query(sql, parameters);
157
158 if (result.ExecuteNonQuery() == 1)
159 returnval = true;
160
161 result.Dispose();
162 }
163 catch (Exception e)
164 {
165 return false;
166 }
167
168 return returnval;
169 }
170 }
171}