public static string Push(string connectionString, DataTable formatedTable, TableParamStruct param) { string resultString = "Успішно додано"; using (SqlConnection connection = new SqlConnection(connectionString)) { string query = GetQueryString(formatedTable, param); SqlCommand sqlCom = new SqlCommand(query, connection); try { connection.Open(); sqlCom.ExecuteNonQuery(); } catch (Exception exc) { connection.Close(); resultString = "Таблица не создана" + exc.Message; } finally { connection.Close(); } } using (SqlBulkCopy bulkCopy = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.TableLock)) { bulkCopy.DestinationTableName = formatedTable.TableName; bulkCopy.WriteToServer(formatedTable); } return(resultString); }
public static string PushFromPath(string connectionString, string path, TableParamStruct param) { try { DataTable oldTable = LoadExcelOneTable.Load(path, param.listIndex); return(PushUnformatted(connectionString, oldTable, param)); } catch (Exception ex) { throw new Exception(ex.Message); } }
private static string GetQueryString(DataTable oldTable, TableParamStruct param) { //створення шапки SQL запиту StringBuilder query = new StringBuilder ( $"IF OBJECT_ID('{param.name_}', 'U') IS NULL BEGIN CREATE TABLE dbo.{param.name_} ( Id int not null IDENTITY(1, 1) primary key" ); // додавання колонок SQL таблиці foreach (KeyValuePair <string, string> item in param.colonsNamesTypes) { query.Append($", [{item.Key}] {ReTyping(item.Value)}"); } query.Append(") END "); //TESTING //Console.WriteLine("\n\n\n " + query.ToString()); return(query.ToString());; }
public static string PushUnformatted(string connectionString, DataTable oldTable, TableParamStruct param) { Base_ExcelEnergoFormater formater = new Base_ExcelEnergoFormater(param, oldTable); DataTable table = formater.shortTable; return(Push(connectionString, table, param)); }
//public Base_ExcelEnergoFormater(){} //workTable.Columns.Add("CustFName", Type.GetType("System.String")) //workTable.Columns.Add("Purchases", Type.GetType("System.Double")) public Base_ExcelEnergoFormater(TableParamStruct param, DataTable oldTable) { //видалення шапки for (int i = 0; i < param.skipHead; i++) { oldTable.Rows.RemoveAt(0); } // видалення підпису під таблицею for (int i = 0; i < param.skipSignature; i++) { oldTable.Rows.RemoveAt(oldTable.Rows.Count - 1); } //врахування <роздрукувати всі> int paramCountRows = 0; if (param.countRows == 0) { paramCountRows = (oldTable.Rows.Count); } //заповнення нової таблиці потрібними колонками shortTable = new DataTable(param.name_); shortTable.Columns.Add("Id", typeof(int)); shortTable.Columns[0].AllowDBNull = true; foreach (KeyValuePair <string, string> column in param.colonsNamesTypes) { DataColumn newCollumn = new DataColumn(column.Key, Type.GetType($"System.{column.Value}")); newCollumn.AllowDBNull = true; shortTable.Columns.Add(newCollumn); } foreach (DataColumn item in shortTable.Columns) { Console.WriteLine(item.AllowDBNull); } //заповнення рядків комірками потрбіних типів даних for (int i = 0; i < paramCountRows; i++) { DataRow newRow = shortTable.NewRow(); DataRow oldRow = oldTable.Rows[i]; for (int k = 0; k < param.colonsNamesTypes.Count /*кількість колонок*/; k++) { // переписати потім на делегати try { switch (param.colonsNamesTypes[k].Value) { case "String": newRow[k + 1] = oldRow[param.skipColumn + k].ToString(); break; case "Double": newRow[k + 1] = Convert.ToDouble(oldRow[param.skipColumn + k]); break; case "Int": newRow[k + 1] = Convert.ToInt64(oldRow[param.skipColumn + k]); break; case "DateTime": newRow[k + 1] = Convert.ToDateTime(oldRow[param.skipColumn + k]); break; case "Decimal": newRow[k + 1] = Convert.ToDecimal(oldRow[param.skipColumn + k]); break; default: throw new Exception("Помилка в свічі типів Base_ExcelEnergoFormater!!!!"); } } catch (Exception) { //все нормально, значення нуль вже підставлено //newRow[k + 1] = null; } } shortTable.Rows.Add(newRow); } }