-
Notifications
You must be signed in to change notification settings - Fork 0
/
ActionDbData.cs
251 lines (211 loc) · 11 KB
/
ActionDbData.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
namespace Auction
{
public class ActionDbData
{
public static bool blank(string str)
{
return str == null || str.Trim().Equals("");
}
/**
* My SQL Connection Parameters
*/
private static string conenctionParams = "SERVER=localhost;DATABASE=auction;UID=root;PASSWORD=root;";
protected static DataTable getData(string query) {
// Datatable to contain the retreive information upon query execution
DataTable dataTable = new DataTable();
// Establish the connection with the MySQL database using the connection parameters
Console.WriteLine("Connecting Database!");
using (var mySqlConnection = new MySqlConnection(conenctionParams)) {
try {
// Open up the database connection
mySqlConnection.Open();
Console.WriteLine("Connection Established!" + "\n" + "Query:" + query);
// Execute the Query in order to have the user authenticated
MySqlDataAdapter da = new MySqlDataAdapter(query, mySqlConnection);
// Transfer the retreived information upon query execution
da.Fill(dataTable);
}
catch (Exception ex) {
Console.WriteLine("Data Processing Error: " + ex.ToString());
}
}
Console.WriteLine("Closed Database Connection!");
return dataTable;
}
protected static DataTable getData(string query, string[] conditionCols, object[] conditionVals, string querySuffix)
{
// Datatable to contain the retreive information upon query execution
DataTable dataTable = new DataTable();
// Establish the connection with the MySQL database using the connection parameters
Console.WriteLine("Connecting Database!");
using (var mySqlConnection = new MySqlConnection(conenctionParams))
{
try
{
// Open up the database connection
mySqlConnection.Open();
// Query Formatting
string queryCon = "";
LinkedList<object> listCol = new LinkedList<object>();
LinkedList<object> listVal = new LinkedList<object>();
for (int i = 0; i < conditionCols.Length; i++) {
if (conditionVals[i] != null) {
var col = conditionCols[i];
listCol.AddLast(col);
listVal.AddLast(conditionVals[i]);
queryCon += " AND " + col + " LIKE @" + col;
}
}
string queryCondition = listCol.Count > 0 ? " WHERE " + queryCon.Substring(5) : "";
string queryFormatted = query + " " + queryCondition + " " + (querySuffix??"");
Console.WriteLine("Connection Established!" + "\n" + "Query:" + queryFormatted);
// Execute the Query in order to have the user authenticated
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlCommand cmd = new MySqlCommand(queryFormatted, mySqlConnection);
// Transfer the retreived information upon query execution
for (int i = 0; i < listCol.Count; i++) {
cmd.Parameters.AddWithValue("@" + listCol.ElementAt(i), listVal.ElementAt(i));
}
da.SelectCommand = cmd;
da.Fill(dataTable);
}
catch (Exception ex)
{
Console.WriteLine("Data Processing Error: " + ex.ToString());
}
}
Console.WriteLine("Closed Database Connection!");
return dataTable;
}
public static int executeUpdate(string query, string[] columns, object[] values) {
int count = 0;
Console.WriteLine("Connecting Database!");
using (var mySqlConnection = new MySqlConnection(conenctionParams)) {
try {
// Open up the database connection
mySqlConnection.Open();
Console.WriteLine("Connection Established!" + "\n" + "Query:" + query);
MySqlCommand comm = mySqlConnection.CreateCommand();
comm.CommandText = query;
for (int i = 0; i < columns.Length; i++)
comm.Parameters.AddWithValue("@" + columns[i], values[i]);
count = comm.ExecuteNonQuery();
}
catch (Exception ex) {
Console.WriteLine("Data Processing Error: " + ex.ToString());
}
}
Console.WriteLine("Closed Database Connection!");
return count;
}
public static int insertRecord(string table, string[] columns, object[] values) {
string query = "@" + columns[0];
for (int i = 1; i < columns.Length; i++)
query += ", @" + columns[i];
query = "INSERT INTO " + table + " (" + query.Replace("@","") + ") VALUES (" + query + ")";
return executeUpdate(query, columns, values);
}
protected static int updateRecord(string table, string[] columns, object[] values, string conditionAndLimit) {
string query = columns[0] + "=@" + columns[0];
for (int i = 1; i < columns.Length; i++)
query += ", " + columns[i] + " = @" + columns[i];
query = "UPDATE " + table + " SET " + query + conditionAndLimit;
return executeUpdate(query, columns, values);
}
}
public class UsersTableData : ActionDbData
{
public static IList<Users> getUsers(string query) {
string queryFormatted = "SELECT * FROM users " + (query ?? "");
DataTable dataTable = getData(queryFormatted);
return dataTable.AsEnumerable().Select(row => new Users(row)).ToList();
}
}
public class AuctionItemTableData : ActionDbData
{
private static string[] columns = { "sold", "quantity", "initialPrice", "itemName", "itemType", "additionalInfo", "owner"};
private static object[] values(AuctionItem ai) {
return new object[] { ai.sold, ai.quantity, ai.initialPrice, ai.itemName, ai.itemType, ai.additionalInfo, ai.owner };
}
public static IList<AuctionItem> getAuctionItems(string query) {
string queryFormatted = "SELECT * FROM auction_item " + (query ?? "");
DataTable dataTable = getData(queryFormatted);
return dataTable.AsEnumerable().Select(row => new AuctionItem(row)).ToList();
}
public static int insertAuctionItem(AuctionItem ai) {
return insertRecord("auction_item", columns, values(ai));
}
public static int updateAuctionItem(AuctionItem ai) {
return updateRecord("auction_item", columns, values(ai), " WHERE itemId="+ ai.itemId);
}
public static IList<AuctionItem> getAuctionItems(AuctionItem ai, string querySuffix)
{
string queryFormatted = "SELECT * FROM auction_item ";
object[] vals = values(ai);
int count = -1;
vals[++count] = null;
vals[++count] = (ai.quantity == -1) ? null : vals[count];
vals[++count] = (ai.initialPrice == -1) ? null : vals[count];
vals[++count] = blank(ai.itemName) ? null : "%" + vals[count] + "%";
vals[++count] = blank(ai.itemType) ? null : "%" + vals[count] + "%";
vals[++count] = blank(ai.additionalInfo) ? null : "%" + vals[count] + "%";
vals[++count] = blank(ai.owner) ? null : "%" + vals[count] + "%";
DataTable dataTable = getData(queryFormatted, columns, vals, querySuffix);
return dataTable.AsEnumerable().Select(row => new AuctionItem(row)).ToList();
}
}
public class AuctionLocationTableData : ActionDbData
{
private static string[] columns = { "locationName", "address", "availability", "place", "zipcode", "capacity", "contactPerson", "phone", "email" };
private static object[] values(AuctionLocation al) {
return new object[] { al.locationName, al.address, al.availability, al.place, al.zipcode, al.capacity, al.contactPerson, al.phone, al.email };
}
public static IList<AuctionLocation> getAuctionLocations(string query) {
string queryFormatted = "SELECT * FROM location " + (query ?? "");
DataTable dataTable = getData(queryFormatted);
return dataTable.AsEnumerable().Select(row => new AuctionLocation(row)).ToList();
}
public static int insertAuctionLocation(AuctionLocation al) {
return insertRecord("location", columns, values(al));
}
public static int updateAuctionLocation(AuctionLocation al) {
return updateRecord("location", columns, values(al), " WHERE locationId=" + al.locationId);
}
public static IList<AuctionLocation> getAuctionLocations(AuctionLocation al, string querySuffix)
{
string queryFormatted = "SELECT * FROM location ";
string[] columns = { "capacity", "locationName", "address", "availability", "place", "contactPerson"};
object[] vals = { al.capacity, al.locationName, al.address, al.availability, al.place, al.contactPerson };
int count = -1;
vals[++count] = (al.capacity == -1) ? null : vals[count];
vals[++count] = blank(al.locationName) ? null : "%" + vals[count] + "%";
vals[++count] = blank(al.address) ? null : "%" + vals[count] + "%";
vals[++count] = blank(al.availability) ? null : "%" + vals[count] + "%";
vals[++count] = blank(al.place) ? null : "%" + vals[count] + "%";
vals[++count] = blank(al.contactPerson) ? null : "%" + vals[count] + "%";
DataTable dataTable = getData(queryFormatted, columns, vals, querySuffix);
return dataTable.AsEnumerable().Select(row => new AuctionLocation(row)).ToList();
}
}
public class AuctionEventTableData : ActionDbData
{
public static IList<AuctionEvent> getAuctionEvent(string query)
{
string queryFormatted = "SELECT * FROM auction_event " +
" INNER JOIN auction_item on itemId = auctionItemId " +
" INNER JOIN location on locationId = auctionLocationId " +
(query ?? "");
DataTable dataTable = getData(queryFormatted);
return dataTable.AsEnumerable().Select(row => new AuctionEvent(row)).ToList();
}
}
}