· 4 years ago · May 21, 2021, 12:32 PM
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using Microsoft.SqlServer;
7using Microsoft.SqlServer.Server;
8using System.Data.Common;
9using System.IO;
10using Aspose.Zip;
11using Aspose.Zip.Saving;
12using Aspose.Zip.SevenZip;
13using Ionic.Zip;
14using Microsoft.Data.Sqlite;
15
16namespace DATABASE
17{
18 class Program : Dialogs
19 {
20 public const string _CONNECT = @"Data Source = desktop - 9mrv6e2;Initial Catalog = crypto; Integrated Security = True"; // <---
21 public static string SELECT_ALL = "SELECT * FROM dbo.Table_1";
22 public static string SEL_ALL = "SELECT * FROM Users";
23 public const string CNCT = "Data Source = usersdata.db";
24 public const string ALL_TABLES = ".tables"; // list all tables in database
25 public static SqliteConnection sqn = new SqliteConnection(CNCT);
26 public static SqliteConnection SQN = new SqliteConnection(CNCT);
27
28 //[STAThread] - in case if using GUI
29 public static async void Main(string[] args)
30 {
31 Console.WriteLine(CNCT + "\n");
32 ShowMenu();
33 int res = Convert.ToInt32(Console.ReadLine());
34 switch (res)
35 {
36 /*Во всех случаях меняется только sql-выражение*/
37 case 1:
38 for (int i = 0; i <= 2; i++)
39 {
40 Console.Write(".");
41 }
42 DataTable_Name();
43 break;
44 case 2:
45 Create_NewTable();
46 break;
47 case 3:
48 UPDATE();
49 break;
50 case 4:
51 INSERT_VALUES();
52 break;
53 case 5:
54 INSERT_FEW();
55 break;
56 case 6:
57 DELETE();
58 break;
59 }
60
61 using (sqn)
62 {
63 sqn.Open();
64 SqliteCommand command = new SqliteCommand(SEL_ALL, sqn);
65 SqliteCommand slc = new SqliteCommand(ALL_TABLES, sqn);
66 SqliteDataReader reader = command.ExecuteReader();
67 string path = @"D:\\guids.txt";
68 if (reader.HasRows)
69 {
70 using (slc)
71 {
72 using (command)
73 {
74 while (await reader.ReadAsync()) // counter++
75 {
76 string text = "";
77 string[] words = text.Split(' ');
78 string w1 = words[0];
79 string w2 = words[1];
80 string w3 = words[2];
81
82 List<string> ID = new List<string>();
83 var id = reader.GetValue(0);
84 object[] objs = new object[1]; // 1,2,3, и т.д
85 var column_val = reader.GetValues(objs); // берем все значения столбцов с второй строки
86 var column_values = column_val.ToString();
87 string result_ = "";
88
89 foreach (var id_ in column_values)
90 {
91 result_ += id_ + "\n"; // можно разобрать массив и через сплит, но не суть
92 }
93
94 foreach (var value in Convert.ToString(id))
95 {
96 var COLUMN_ROW = reader.GetString(value);
97 //_ = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToList();
98 ID.Add(COLUMN_ROW);
99 }
100 string[] ids = ID.ToArray();
101 for (int i = 0; i > ids.Length; i++)
102 {
103 //ids[0]
104 //FileStream fs = new FileStream(path, FileMode.Append, FileAccess.ReadWrite);
105 //fs.Write(ids, 0, count: ids.Length);
106
107 //Directory.CreateDirectory($"D:\\{}");
108 using (StreamWriter sw = new StreamWriter(path,
109 false, // перезапись. True - дозапись
110 Encoding.Default))
111 {
112 sw.WriteLine(ids);
113 }
114 using (ZipFile zip = new ZipFile())
115 {
116 using (Archive archive = new Archive()) // создаем архив + преобразовать эту функцию в преобразование по GUID*/
117 {
118 zip.AddFile(ids.ToString());
119 string zip_path = @"D://d.7z";
120 archive.Save(zip_path, new ArchiveSaveOptions { Encoding = Encoding.ASCII, ArchiveComment = result_ }); // or Encoding
121 //"Добавлен новый файл в архив, guid"
122 }
123 }
124 Console.WriteLine("{0}", id);
125 }
126
127
128 }
129 }
130 }
131 reader.Close();
132 }
133 Console.Read();
134 }
135 }
136
137
138
139
140 public static void Create_NewTable()
141 {
142 //users.db лежит в src/*proj name*/bin/debug
143 var sqn = new SqliteConnection(CNCT);
144 using (sqn)
145 {
146 sqn.Open();
147 SqliteCommand CMD = new SqliteCommand();
148 CMD.Connection = sqn;
149 CMD.CommandText = "CREATE TABLE Users(_id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, Name TEXT NOT NULL, Age INTEGER NOT NULL, Value INTEGER NOT NULL)";
150 CMD.ExecuteNonQuery();
151 if (CMD.CommandText.Substring(13, 18) == "Users") //index => 13-17 or 13-18
152 {
153 Console.WriteLine("Table already exists");
154 }
155 Console.WriteLine("Таблица Users создана");
156 }
157 Console.Read();
158 }
159
160 public static void INSERT_VALUES()
161 {
162 // добавить ридер по столбцам, прирaвняв его к переменной (var => reader[0])
163 using (SQN)
164 {
165 SQN.Open();
166 SqliteCommand CMD = new SqliteCommand
167 {
168 Connection = SQN,
169 CommandText = "INSERT INTO Users (Name, Age) VALUES ('Cryptocom', 128)"
170 };
171 int number = CMD.ExecuteNonQuery();
172 Console.WriteLine($"В таблицу Users добавлено объектов: {number}");
173 }
174 Console.Read();
175
176 }
177 public static void INSERT_FEW() //primer: INSERT INTO Users (Name, Age) VALUES ('Alice', 32), ('Bob', 28)";
178 {
179 Console.WriteLine("INSERT NAME: ");
180 string Name = Console.ReadLine(); ;
181 Console.WriteLine("INSERT AGE: ");
182 int Age = Convert.ToInt32(Console.ReadLine());
183 string Exp = $"INSERT INTO Users (Name, Age) VALUES ({Name}, {Age}), ({Name}, {Age})";
184 using (SQN)
185 {
186 SQN.Open();
187 SqliteCommand cmd = new SqliteCommand(Exp, SQN);
188 try
189 {
190 int number = cmd.ExecuteNonQuery();
191 Console.WriteLine($"В таблицу Users добавлено объектов: {number}");
192 }
193 catch (SqliteException)
194 {
195 Dialogs d = new Dialogs();
196 Console.WriteLine(d.err);
197 }
198 }
199 Console.Read();
200 }
201 private static void UPDATE()
202 {
203 int Age = Convert.ToInt32(Console.ReadLine());
204 string Name = Console.ReadLine();
205 string UPD = $"UPDATE Users SET Age={Age} WHERE Name={Name}";
206 using (SQN)
207 {
208 sqn.Open();
209 SqliteCommand cmd = new SqliteCommand(UPD, SQN);
210 int number = cmd.ExecuteNonQuery();
211 Console.WriteLine($"Обновлено объектов: {number}");
212 }
213 Console.Read();
214 }
215 private static void DELETE() // delete manually row/column ## DELETE FROM таблица WHERE столбец = значение
216 {
217 string Name = Console.ReadLine();
218 string DEL = $"DELETE FROM Users WHERE Name = {Name}";
219 using (SQN)
220 {
221 sqn.Open();
222 SqliteCommand cmd = new SqliteCommand(DEL, SQN);
223 int number = cmd.ExecuteNonQuery();
224 Console.WriteLine($"Удалено объектов: {number}");
225 }
226 Console.Read();
227 }
228 public static void DataTable_Name()
229 {
230 List<string> tables = new List<string>();
231 using (SqliteConnection con = new SqliteConnection(CNCT))
232 {
233 con.Open();
234 try
235 {
236 using (SqliteCommand com = new SqliteCommand("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES", con))
237 {
238 using (SqliteDataReader reader = com.ExecuteReader())
239 {
240 while (reader.Read())
241 {
242 tables.Add((string)reader["TABLE_NAME"]);
243 }
244 }
245 }
246 }
247 catch (SqliteException) //13 -24
248 {
249 Console.WriteLine($"No such table exists");
250 }
251 }
252 }
253 }
254}
255
256/* два варианта - либо через guid guid пройтись в цикле по всем гуидам, создать массив с длиной, занести в цикле в каждый
257 элемент значение, с guid, и затем записать рез в файл, ЛИБО сразу преобразовать полученное с гуида в массив, вывести построчно,
258 поприсваивать значения, и тоже записать в файл преобразование массива в байтовый, в два шага - бесполезная трата времени
259*/
260//{ SELECT_ALL.Substring(13, SELECT_ALL.Length - 2)}
261// using (Archive archive = new Archive()) // создаем архив + преобразовать эту функцию в преобразование по GUID*/
262//{
263// zip.Password = MyPassword; //генерируем пароль по тыку кнопки создания архива
264// zip.AddFile(FileName); //файл для сохранения (последний пункт задания)
265// archive.Save(Sql_Path, new ArchiveSaveOptions { Encoding = Encoding.ASCII, ArchiveComment = "Добавлен новый файл в архив" });
266//}