From 436778609d7fb022a202974301ccc481a59d8132 Mon Sep 17 00:00:00 2001 From: syneffort Date: Thu, 29 Dec 2022 16:28:50 +0900 Subject: [PATCH] basic test, fix --- MSSQLServer_Console/MSSQLServer_Console.sln | 6 + .../MSSQLServer_Console/Program.cs | 66 +++++- .../PSqlSeverWrapper/PSqlServer.cs | 216 ++++++++---------- 3 files changed, 162 insertions(+), 126 deletions(-) diff --git a/MSSQLServer_Console/MSSQLServer_Console.sln b/MSSQLServer_Console/MSSQLServer_Console.sln index bd5cdc6..46e1124 100644 --- a/MSSQLServer_Console/MSSQLServer_Console.sln +++ b/MSSQLServer_Console/MSSQLServer_Console.sln @@ -7,6 +7,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSSQLServer_Console", "MSSQ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PSqlServerWrapper", "PSqlSeverWrapper\PSqlServerWrapper.csproj", "{34E74A48-F0B4-4F7F-9827-11AA4E0052D0}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MSSQLServer_Form", "MSSQLServer_Form\MSSQLServer_Form.csproj", "{ECBD649D-C7BE-4B59-A75C-CF6B00F5CAE5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -21,6 +23,10 @@ Global {34E74A48-F0B4-4F7F-9827-11AA4E0052D0}.Debug|Any CPU.Build.0 = Debug|Any CPU {34E74A48-F0B4-4F7F-9827-11AA4E0052D0}.Release|Any CPU.ActiveCfg = Release|Any CPU {34E74A48-F0B4-4F7F-9827-11AA4E0052D0}.Release|Any CPU.Build.0 = Release|Any CPU + {ECBD649D-C7BE-4B59-A75C-CF6B00F5CAE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {ECBD649D-C7BE-4B59-A75C-CF6B00F5CAE5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {ECBD649D-C7BE-4B59-A75C-CF6B00F5CAE5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {ECBD649D-C7BE-4B59-A75C-CF6B00F5CAE5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/MSSQLServer_Console/MSSQLServer_Console/Program.cs b/MSSQLServer_Console/MSSQLServer_Console/Program.cs index 142f3ab..5e1390d 100644 --- a/MSSQLServer_Console/MSSQLServer_Console/Program.cs +++ b/MSSQLServer_Console/MSSQLServer_Console/Program.cs @@ -1,7 +1,9 @@ using PSqlSeverWrapper; using System; using System.Collections.Generic; +using System.Data; using System.Data.SqlClient; +using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -10,6 +12,8 @@ namespace MSSQLServer_Console { class Program { + static Stopwatch watch = new Stopwatch(); + static void Main(string[] args) { PSqlServer.ServerName = "peacecloud.synology.me,21433"; @@ -26,6 +30,26 @@ namespace MSSQLServer_Console //Console.WriteLine("table create."); + using (SqlConnection conn = PSqlServer.Connection) + { + conn.Open(); + string query = "SELECT * FROM member;"; + SqlDataAdapter adapter = PSqlServer.GetAdapterSelectQuery(conn, query); + DataTable dt = new DataTable(); + adapter.Fill(dt); + + Console.WriteLine($"Row: {dt.Rows.Count}"); + + foreach (DataRow row in dt.Rows) + { + row.Delete(); + } + adapter.Update(dt); + + Console.WriteLine($"Rows are cleared"); + } + + Random rnd = new Random(); //using (SqlConnection conn = PSqlServer.Connection) //{ @@ -42,18 +66,42 @@ namespace MSSQLServer_Console // conn.Close(); //} - string[] queries = new string[2000]; - for (int i = 0; i < 2000; i++) - { - string guid = Guid.NewGuid().ToString(); - int age = rnd.Next(1, 100); - string name = $"Robo#{i + 1}"; - queries[i] = $"INSERT INTO member VALUES ('{name}', {age}, '{guid}')"; - } + //watch.Restart(); - PSqlServer.ExecuteQuery(queries); + //string[] queries = new string[2000]; + //for (int i = 0; i < 2000; i++) + //{ + // string guid = Guid.NewGuid().ToString(); + // int age = rnd.Next(1, 100); + // string name = $"Robo#{i + 1}"; + // queries[i] = $"INSERT INTO member VALUES ('{name}', {age}, '{guid}')"; + //} + + //watch.Restart(); + //PSqlServer.ExecuteQuery(queries); + //Debug.WriteLine($"Case1: {watch.ElapsedMilliseconds}ms"); + + //watch.Restart(); + //DataTable table = new DataTable(); + //table.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)), new DataColumn("age", typeof(int)), new DataColumn("guid", typeof(string)) }); + //for (int i = 0; i < 2000; i++) + //{ + // string guid = Guid.NewGuid().ToString(); + // int age = rnd.Next(1, 100); + // string name = $"Robo#{i + 1}"; + // DataRow dataRow = table.NewRow(); + // dataRow["name"] = name; + // dataRow["age"] = age; + // dataRow["guid"] = guid; + // table.Rows.Add(dataRow); + //} + + //PSqlServer.BulkCopy("member", table); + //Debug.WriteLine($"Case2: {watch.ElapsedMilliseconds}ms"); Console.WriteLine("finish"); + + Console.ReadKey(); } } } diff --git a/MSSQLServer_Console/PSqlSeverWrapper/PSqlServer.cs b/MSSQLServer_Console/PSqlSeverWrapper/PSqlServer.cs index 83ccc6e..65b28d1 100644 --- a/MSSQLServer_Console/PSqlSeverWrapper/PSqlServer.cs +++ b/MSSQLServer_Console/PSqlSeverWrapper/PSqlServer.cs @@ -31,170 +31,152 @@ namespace PSqlSeverWrapper if (!CheckBasicInfo()) throw new ArgumentException("Invalid connection info"); - try - { - return new SqlConnection(ConnString); - } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; - } + return new SqlConnection(ConnString); } } public static void ExecuteQuery(string query) { - try + using (SqlConnection conn = Connection) { - using (SqlConnection conn = Connection) - { - conn.Open(); - SqlCommand command = new SqlCommand(query, conn); - command.ExecuteNonQuery(); - Connection.Close(); - } - } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; - } - } + SqlCommand command = new SqlCommand(query, conn); - public static void ExecuteQuery(SqlConnection openedConn, string query) - { - try - { - SqlCommand command = new SqlCommand(query, openedConn); + conn.Open(); command.ExecuteNonQuery(); + conn.Close(); } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; - } } + public static void ExecuteQuery(SqlConnection openedConn, string query) + { + SqlCommand command = new SqlCommand(query, openedConn); + command.ExecuteNonQuery(); + } + public static void ExecuteQueryAsync(SqlConnection openedConn, string query) { - try - { - SqlCommand command = new SqlCommand(query, openedConn); - command.ExecuteNonQueryAsync(); - } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; - } + SqlCommand command = new SqlCommand(query, openedConn); + command.ExecuteNonQueryAsync(); } public static void ExecuteQuery(string[] queries) - { - try + { + using (SqlConnection conn = Connection) { - using (SqlConnection conn = Connection) - { - conn.Open(); - ExecuteQuery(conn, "BEGIN TRAN;"); + conn.Open(); + SqlTransaction trans = conn.BeginTransaction(); - for (int i = 0; i < queries.Length; i++) - { + try + { + for (int i = 0; i < queries.Length; i++) + { SqlCommand command = new SqlCommand(queries[i], conn); + command.Transaction = trans; command.ExecuteNonQuery(); - } + } - ExecuteQuery(conn, "COMMIT TRAN;"); - Connection.Close(); + trans.Commit(); + } + catch (Exception ex) + { + Debug.WriteLine(ex); + trans.Rollback(); } - } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; - } - } - public static void ExecuteQueryAsync(string query) + conn.Close(); + } + } + + public static void BulkCopy(string tableName, DataTable table, string[] dbColumnMap = null) { - try - { - using (SqlConnection conn = Connection) + using (SqlConnection conn = Connection) + { + SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn); + sqlBulkCopy.DestinationTableName = tableName; + if (dbColumnMap != null && table.Columns.Count == dbColumnMap.Length) { - conn.Open(); - SqlCommand command = new SqlCommand(query, conn); - command.ExecuteNonQueryAsync(); - Connection.Close(); + for (int i = 0; i < table.Columns.Count; i++) + { + string colName = table.Columns[i].ColumnName; + sqlBulkCopy.ColumnMappings.Add(colName, dbColumnMap[i]); + } } + + conn.Open(); + sqlBulkCopy.WriteToServer(table); + conn.Close(); } - catch (Exception ex) + } + + public static void BulkCopyAsync(string tableName, DataTable table, string[] dbColumnMap = null) + { + using (SqlConnection conn = Connection) { - Debug.WriteLine(ex.ToString()); - throw; + SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(conn); + sqlBulkCopy.DestinationTableName = tableName; + if (dbColumnMap != null && table.Columns.Count == dbColumnMap.Length) + { + for (int i = 0; i < table.Columns.Count; i++) + { + string colName = table.Columns[i].ColumnName; + sqlBulkCopy.ColumnMappings.Add(colName, dbColumnMap[i]); + } + } + + conn.Open(); + sqlBulkCopy.WriteToServerAsync(table); + conn.Close(); + } + } + + public static void ExecuteQueryAsync(string query) + { + using (SqlConnection conn = Connection) + { + SqlCommand command = new SqlCommand(query, conn); + + conn.Open(); + command.ExecuteNonQueryAsync(); + conn.Close(); } } public static DataSet ExecuteSelectQuery(string query) { - try + using (SqlConnection conn = Connection) { - using (SqlConnection conn = Connection) - { - DataSet dataSet = new DataSet(); + SqlDataAdapter adapter = new SqlDataAdapter(query, conn); + DataSet dataSet = new DataSet(); - conn.Open(); - SqlDataAdapter adapter = new SqlDataAdapter(query, conn); - adapter.Fill(dataSet); - Connection.Close(); + conn.Open(); + adapter.Fill(dataSet); + conn.Close(); - return dataSet; - } - } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; + return dataSet; } } public static DataSet ExecuteSelectQuery(SqlConnection openedConn, string query) { - try - { - DataSet dataSet = new DataSet(); - SqlDataAdapter adapter = new SqlDataAdapter(query, openedConn); - adapter.Fill(dataSet); + DataSet dataSet = new DataSet(); + SqlDataAdapter adapter = new SqlDataAdapter(query, openedConn); + adapter.Fill(dataSet); - return dataSet; - } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; - } + return dataSet; } public static SqlDataAdapter GetAdapterSelectQuery(SqlConnection openedConn, string query, bool withCommandBuilder = true) { - try - { - SqlDataAdapter adapter = new SqlDataAdapter(query, openedConn); - if (withCommandBuilder) - { - SqlCommandBuilder builder = new SqlCommandBuilder(adapter); - adapter.UpdateCommand = builder.GetUpdateCommand(); - adapter.DeleteCommand = builder.GetDeleteCommand(); - adapter.InsertCommand = builder.GetInsertCommand(); - } - - return adapter; + SqlDataAdapter adapter = new SqlDataAdapter(query, openedConn); + if (withCommandBuilder) + { + SqlCommandBuilder builder = new SqlCommandBuilder(adapter); + adapter.UpdateCommand = builder.GetUpdateCommand(); + adapter.DeleteCommand = builder.GetDeleteCommand(); + adapter.InsertCommand = builder.GetInsertCommand(); } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString()); - throw; - } + + return adapter; } private static bool CheckBasicInfo()