{"id":26219306,"url":"https://github.com/selcukgural/kangal","last_synced_at":"2025-04-16T01:57:14.442Z","repository":{"id":55136053,"uuid":"65303487","full_name":"selcukgural/Kangal","owner":"selcukgural","description":"Kangal is extension library for data operations. Like DataReader, SqlConnection or DataTable.","archived":false,"fork":false,"pushed_at":"2024-01-16T20:06:16.000Z","size":129,"stargazers_count":4,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-16T01:56:58.103Z","etag":null,"topics":["csv","data","datareader","datatable","extension","helper","json","list","mssql","xml"],"latest_commit_sha":null,"homepage":"https://www.selcukgural.com","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/selcukgural.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-09T14:52:19.000Z","updated_at":"2024-06-28T08:30:30.000Z","dependencies_parsed_at":"2022-08-14T13:00:57.634Z","dependency_job_id":null,"html_url":"https://github.com/selcukgural/Kangal","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selcukgural%2FKangal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selcukgural%2FKangal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selcukgural%2FKangal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/selcukgural%2FKangal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/selcukgural","download_url":"https://codeload.github.com/selcukgural/Kangal/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249183108,"owners_count":21226141,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv","data","datareader","datatable","extension","helper","json","list","mssql","xml"],"created_at":"2025-03-12T14:17:18.120Z","updated_at":"2025-04-16T01:57:14.413Z","avatar_url":"https://github.com/selcukgural.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"﻿# Kangal  ![Logo](https://github.com/selcukgural/Kangal/blob/master/Kangal/images/24x.png)\n\nKangal is `extension` library for data operations. Like `DataReader`, `SqlConnection` or `DataTable`.\n\nThe project has no dependence.\n\n[Nuget library](https://www.nuget.org/packages/Kangal)\n\u003cbr\u003e\n`Install-Package Kangal`\n\n# Some Features\n#### DataTable\n In the `DataTable` records returns back as `IEnumerable\u003cT\u003e`\n```csharp\npublic static IEnumerable\u003cT\u003e ToList\u003cT\u003e(this DataTable dataTable) where T : new()\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    var dataTable = new DataTable();\n    var reader = new SqlCommand(query, connection).ExecuteReader();\n    dataTable.Load(reader);\n    return dataTable.ToList\u003cPerson\u003e();\n}\n```\n\u003cbr\u003e`DataTable`'s content convert to **Csv** formatted string.\n```csharp\npublic static string ToCsv(this DataTable dataTable, string comma = null,bool ignoreNull = false)\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    var dataTable = new DataTable();\n    var reader = new SqlCommand(query, connection).ExecuteReader();\n    dataTable.Load(reader);\n    return dataTable.ToCsv(\"-\", true);\n}\n```\n\u003cbr\u003e`DataTable`'s content convert to `XDocument`.\n```csharp\npublic static XDocument ToXDocument(this DataTable dataTable,XmlWriteMode xmlWriteMode = XmlWriteMode.IgnoreSchema,string nodeName = null,bool writeHierarchy = true)\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    var dataTable = new DataTable();\n    var reader = new SqlCommand(query, connection).ExecuteReader();\n    dataTable.Load(reader);\n    return dataTable.ToXDocument(xmlWriteMode: XmlWriteMode.WriteSchema, nodeName: \"persons\",\n        writeHierarchy: false);\n}\n```\n\u003cbr\u003e`DataTable`'s content convert to `Json`.\n```csharp\npublic static string ToJson(this DataTable dataTable,JsonFormat jsonFormat = JsonFormat.Simple,JsonFormatSettings jsonFormatSettings = null)\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    var dataTable = new DataTable();\n    var reader = new SqlCommand(query, connection).ExecuteReader();\n    dataTable.Load(reader);\n    return dataTable.ToJson(JsonFormat.Showy, new JsonFormatSettings(\"dd/MM/yyyy\", \"0:00.0\"));\n}\n```\n\u003cbr\u003eYou can change `DataTable` column name.\n```csharp\npublic static void ChangeColumnName(this DataTable dataTable, string currentColumnName, string newColumnName)\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    var dataTable = new DataTable();\n    var reader = new SqlCommand(query, connection).ExecuteReader();\n    dataTable.Load(reader);\n    dataTable.ChangeColumnName(\"FirstName\", \"NickName\");\n}\n```\n\u003cbr\u003eYou can remove `DataTable` column\n```csharp\npublic static void RemoveColumn(this DataTable dataTable, string columnName)\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    var dataTable = new DataTable();\n    var reader = new SqlCommand(query, connection).ExecuteReader();\n    dataTable.Load(reader);\n    dataTable.RemoveColumn(\"FirstName\");\n}\n```\n\n#\n#### SqlConnection\n\n\nYou can insert to **MSSQL** database to your `DataTable`\n```csharp\nSave(this SqlConnection connection, DataTable dataTable, string tableName,SqlTransaction transaction = null)\n```\n```csharp\nvar dataTable = new DataTable();\ndataTable.Columns.Add(\"FirstName\",typeof(string));\ndataTable.Columns.Add(\"LastName\", typeof(string));\ndataTable.Columns.Add(\"Age\", typeof(short));\ndataTable.Rows.Add(\"selçuk\", \"güral\", 35);\ndataTable.Rows.Add(\"songül\", \"güral\", 30);\ndataTable.Rows.Add(\"zeynep sare\", \"güral\", 1);\ndataTable.AcceptChanges();\n\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    return connection.Save(dataTable);\n}\n```\n\u003cbr\u003eSave your **.Net POCO** objects\n``` csharp\npublic static int Save\u003cT\u003e(this SqlConnection connection, IEnumerable\u003cT\u003e entities, SqlTransaction transaction = null, string tableName = null) where T : class\n```\n```csharp\nvar persons = new List\u003cPerson\u003e\n{\n    new Person(\"selçuk\",\"güral\",35),\n    new Person(\"songül\",\"güral\",30),\n    new Person(\"zeynep sare\",\"güral\",1)\n};\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    return connection.Save(persons);\n}\n```\n\u003cbr\u003eGetting sql query result and **object mapping**. Also you can use some useful **Attributes**. Like `ColumnAlias` and `Ignore`\n```csharp\npublic static IEnumerable\u003cT\u003e Get\u003cT\u003e(this SqlConnection connection,string query) where T : class ,new ()\n```\n```csharp\npublic class Person\n{\n    [ColumnAlias(\"FirstName\")] \n    public string Name { get; set; }\n\n    [ColumnAlias(\"LastName\")]\n    public string Surname { get; set; }\n\n    [Ignore]\n    public short Age { get; set; }\n\n    public Person()\n    {\n        \n    }\n    public Person(string name,string surname,short age)\n    {\n        this.Name = name;\n        this.Surname = surname;\n        this.Age = age;\n    }\n}\n\n\npublic static IEnumerable\u003cPerson\u003e IDataReader_ToList()\n{\n    using (var connection = new SqlConnection(connectionString))\n    {\n        connection.Open();\n        return new SqlCommand(query, connection).ExecuteReader().ToList\u003cPerson\u003e();\n    }\n}\n```\n#\n#### DataReader\nYou can convert `IDataReader` object to `IEnumerable\u003cT\u003e`\n```csharp\npublic static IEnumerable\u003cT\u003e ToList\u003cT\u003e(this IDataReader reader) where T :class, new()\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    return new SqlCommand(query, connection).ExecuteReader().ToList\u003cPerson\u003e();\n}\n```\n\u003cbr\u003eAlso it is possible convert `IDataReader` object to `XDocument`\n```csharp\npublic static XDocument ToXDocument(this IDataReader reader,string rootName,string nodeName)\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    return new SqlCommand(query, connection).ExecuteReader().ToXDocument(\"persons\", \"person\");\n}\n```\n\n\u003cbr\u003eIn the records `IDataReader` object returns back as `IEnumerable\u003cDataTable\u003e`\n```csharp\npublic static IEnumerable\u003cDataTable\u003e ToDataTable(this IDataReader reader)\n```\n```csharp\nusing (var connection = new SqlConnection(connectionString))\n{\n    connection.Open();\n    return new SqlCommand(query, connection).ExecuteReader().ToDataTable();\n}\n```\n#\n#### List\nThe Generic `List` convert to `DataTable`\n```csharp\npublic static DataTable ToDataTable\u003cT\u003e(this IEnumerable\u003cT\u003e entityList) where T : class\n```\n```csharp\nreturn new List\u003cPerson\u003e\n{\n    new Person(\"selçuk\", \"güral\", 35),\n    new Person(\"songül\", \"güral\", 30),\n    new Person(\"zeynep sare\", \"güral\", 1)\n}.ToDataTable();\n```\n\n\u003cbr\u003eThe Entities convert to `XDocument`.\n```csharp\npublic static XDocument ToXDocument\u003cT\u003e(this IEnumerable\u003cT\u003e entities,string rootName) where T : class\n```\n```csharp\nreturn new List\u003cPerson\u003e\n{\n    new Person(\"selçuk\", \"güral\", 35),\n    new Person(\"songül\", \"güral\", 30),\n    new Person(\"zeynep sare\", \"güral\", 1)\n}.ToXDocument(\"persons\");\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselcukgural%2Fkangal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fselcukgural%2Fkangal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fselcukgural%2Fkangal/lists"}