{"id":21810176,"url":"https://github.com/williamsmithedward/sqlserverinteraction","last_synced_at":"2026-02-21T14:32:39.849Z","repository":{"id":195961289,"uuid":"694254222","full_name":"WilliamSmithEdward/SQLServerInteraction","owner":"WilliamSmithEdward","description":"SQLServerInteraction is a C# library that wraps the functionality included in Microsoft's \"Microsoft.Data.SqlClient\" library.","archived":false,"fork":false,"pushed_at":"2025-03-17T17:35:46.000Z","size":90,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-09T04:34:02.281Z","etag":null,"topics":["async","builder","bulk","microsoft","query","server","sql","sqlserver","wrapper"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/SQLServerInteraction","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/WilliamSmithEdward.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-09-20T16:17:38.000Z","updated_at":"2025-03-17T17:35:49.000Z","dependencies_parsed_at":"2024-01-17T18:49:36.725Z","dependency_job_id":"ec080272-9155-4cf2-8fac-875767fed1ce","html_url":"https://github.com/WilliamSmithEdward/SQLServerInteraction","commit_stats":null,"previous_names":["williamsmithedward/sqlserverinteraction"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/WilliamSmithEdward/SQLServerInteraction","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FSQLServerInteraction","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FSQLServerInteraction/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FSQLServerInteraction/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FSQLServerInteraction/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/WilliamSmithEdward","download_url":"https://codeload.github.com/WilliamSmithEdward/SQLServerInteraction/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/WilliamSmithEdward%2FSQLServerInteraction/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29637398,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T22:32:43.237Z","status":"ssl_error","status_checked_at":"2026-02-19T22:32:38.330Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["async","builder","bulk","microsoft","query","server","sql","sqlserver","wrapper"],"created_at":"2024-11-27T13:33:15.020Z","updated_at":"2026-02-21T14:32:39.828Z","avatar_url":"https://github.com/WilliamSmithEdward.png","language":"C#","readme":"# SQLServerInteraction\n\n## Summary\n\nThis project wraps the Microsoft.Data.SqlClient library to enhance interaction with a SQL Server database. These functions cover essential tasks like optimizing data transfer from a DataTable to a designated database table using bulk copying, executing SQL queries to consolidate data into a DataTable, extracting values from SQL queries, and executing non-query SQL statements.\n\n## `SQLServerInstance` Class Methods\n\n### BackupDatabase\nCreates a backup of the SQL Server database.\n\n### BackupDatabaseAsync\nAsync version: Creates a backup of the SQL Server database.\n\n### BulkCopy\nCopies a System.Data.DataTable object to a SQL Server table.\n\n### BulkCopyAsync\nAsync version: Copies a System.Data.DataTable object to a SQL Server table.\n\n### DeleteData\nDeletes data from a SQL Server table based on specified conditions.\n\n### DeleteDataAsync\nAsync version: Deletes data from a SQL Server table based on specified conditions.\n\n### DoesDatabaseExist\nChecks if a specific database exists on the SQL Server.\n\n### DoesTableExist\nChecks if a specific table exists in the SQL Server database.\n\n### ExecuteNonQueryWithParameters\nExecutes a SQL command with parameters on the SQL Server.\n\n### ExecuteNonQueryWithParametersAsync\nAsync version: Executes a SQL command with parameters on the SQL Server.\n\n### ExecuteParameterizedQuery\nExecutes a parameterized SQL query in the SQL Server database.\n\n### ExecuteParameterizedQueryAsync\nAsync version: Executes a parameterized SQL query in the SQL Server database.\n\n### ExecuteQuery\nExecutes a SQL query in the SQL Server database.\n\n### ExecuteQueryAsync\nAsync version: Executes a SQL query in the SQL Server database.\n\n### ExecuteQueryT\nExecutes a SQL query and maps the results to a specified type.\n\n### ExecuteQueryTAsync\nAsync version: Executes a SQL query and maps the results to a specified type.\n\n### ExecuteQueryToObjectList\nExecutes a SQL query and maps the results to a list of objects.\n\n### ExecuteQueryToObjectListAsync\nAsync version: Executes a SQL query and maps the results to a list of objects of a specified type.\n\n#### Note: ExecuteQueryToObjectList logic supports mapping properties to attributes like below. If no attribute is specified, then the logic will attempt to map directly to the property name.\n\n```csharp\npublic class YourClass\n{\n    [SQLServerInstance.Column(\"Your Column\")]   \n    public string? YourColumn { get; set; }\n}\n```\n\n### ExecuteScalarT\nExecutes a SQL query and returns a scalar result of a specified type.\n\n### ExecuteScalarTAsync\nAsync version: Executes a SQL query and returns a scalar result of a specified type.\n\n### ExecuteScriptFromFileAsync\nAsync version: Executes a SQL script from a file in the SQL Server database.\n\n### ExecuteSQL\nExecutes a SQL command on the SQL Server.\n\n### ExecuteSQLAsync\nAsync version: Executes a SQL command on the SQL Server.\n\n### ExecuteStoredProcedure\nExecutes a stored procedure in the SQL Server database.\n\n### ExecuteStoredProcedureAsync\nAsync version: Executes a stored procedure in the SQL Server database.\n\n### ExecuteTransaction\nExecutes a series of SQL commands as a transaction.\n\n### ExecuteTransactionAsync\nAsync version: Executes a series of SQL commands as a transaction.\n\n### ExportDataToCSVAsync\nAsync version: Exports data from the SQL Server to a CSV file.\n\n### GetColumnNames\nRetrieves the column names of a specific table in the SQL Server database.\n\n### GetDatabaseInformation\nRetrieves general information about the SQL Server database.\n\n### GetDatabaseSizeInBytes\nRetrieves the size of the SQL Server database in bytes.\n\n### GetLastBackupDateTime\nRetrieves the date and time of the last database backup.\n\n### GetStoredProcedureParameters\nRetrieves the parameters of a stored procedure.\n\n### GetTableColumns\nRetrieves column details (name, data type, etc.) for a specific table.\n\n### GetTableIndexs\nRetrieves index information for a specific table.\n\n### GetTableNames\nRetrieves the names of all tables in the SQL Server database.\n\n### GetTablePrimaryKeyColumn\nRetrieves the primary key column of a specific table.\n\n### GetTableSchema\nRetrieves the schema (structure) of a specific table in the SQL Server database.\n\n### GetTableRowCount\nRetrieves the row count for a specific table.\n\n### GetStoredProcedures\nRetrieves the names of stored procedures in the SQL Server database.\n\n### IndexCreate\nCreates an index on a specific table.\n\n### IndexDrop\nDrops an index on a specific table.\n\n### InsertData\nInserts data into a SQL Server table.\n\n### InsertDataAsync\nAsync version: Inserts data into a SQL Server table.\n\n### InsertDataT\nInserts data of a specific type into a SQL Server table.\n\n### InsertDataTAsync\nAsync version: Inserts data of a specific type into a SQL Server table.\n\n### RestoreDatabase\nRestores a SQL Server database from a backup.\n\n### RestoreDatabaseAsync\nAsync version: Restores a SQL Server database from a backup.\n\n### UpdateData\nUpdates existing data in a SQL Server table based on certain conditions.\n\n### UpdateDataAsync\nAsync version: Updates existing data in a SQL Server table based on certain conditions.\n\n## QueryBuilder\n\nQueryBuilder is a class designed to dynamically build SQL queries in a structured and convenient manner.\n\n### Examples\n\n#### Basic Query\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"*\");\nqueryBuilder.From(\"Users\");\nqueryBuilder.Where(\"Age \u003e @Age\");\nqueryBuilder.AddParameter(\"Age\", 30);\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Combining Conditions\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"*\");\nqueryBuilder.From(\"Employees\");\nqueryBuilder.Where(\"Age \u003e 30\");\nqueryBuilder.And(\"Salary \u003e 50000\");\nqueryBuilder.Or(\"Department = 'HR'\");\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Table Joins\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"Orders.OrderId, Customers.CustomerName\");\nqueryBuilder.From(\"Orders\");\nqueryBuilder.Join(\"Customers\", \"Orders.CustomerId = Customers.CustomerId\");\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Subqueries\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"CustomerId, OrderDate, TotalAmount\");\nqueryBuilder.From(\"Orders\");\nqueryBuilder.Where(\"TotalAmount \u003e (SELECT AVG(TotalAmount) FROM Orders)\");\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Group By\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"Category, COUNT(*) AS TotalProducts\");\nqueryBuilder.From(\"Products\");\nqueryBuilder.GroupBy(\"Category\");\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Aggregates (SUM, COUNT, AVG, MIN, MAX)\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select();\nqueryBuilder.Count(\"Revenue\", \"CountOfRevenue\")\nqueryBuilder.From(\"Sales\");\nqueryBuilder.Count(\"Orders\");\nqueryBuilder.Build();\n```\n\n#### Parameters\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"*\");\nqueryBuilder.From(\"Products\");\nqueryBuilder.Where(\"Price \u003e @MinPrice\");\nqueryBuilder.AddParameter(\"MinPrice\", 50);\n\nstring query = queryBuilder.Build().SQL;\nstring parameters = queryBuilder.Build().Parameters //Do something with the parameters to bind them\n```\n\n#### Pagination\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"*\");\nqueryBuilder.From(\"Products\");\nqueryBuilder.OrderBy(\"Price DESC\");\nqueryBuilder.Paginate(page: 2, pageSize: 10);\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Multiple Conditions\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"*\");\nqueryBuilder.From(\"Orders\");\nqueryBuilder.Where(\"Status = 'Shipped'\");\nqueryBuilder.And(\"TotalAmount \u003e @MinAmount\");\nqueryBuilder.And(\"TotalAmount \u003c @MaxAmount\");\nqueryBuilder.AddParameter(\"MinAmount\", 100);\nqueryBuilder.AddParameter(\"MaxAmount\", 500);\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Nested Conditions\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"*\");\nqueryBuilder.From(\"Users\");\nqueryBuilder.StartNestedCondition();\nqueryBuilder.And(\"Age \u003e @MinAge\");\nqueryBuilder.Or(\"Age \u003c @MaxAge\");\nqueryBuilder.EndNestedCondition();\nqueryBuilder.AddParameter(\"MinAge\", 20);\nqueryBuilder.AddParameter(\"MaxAge\", 50);\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Case Statement\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"FirstName, LastName\");\nqueryBuilder.From(\"Users\");\nqueryBuilder.StartCaseStatement(\"AgeCategory\");\nqueryBuilder.AddCaseWhen(\"Age \u003c 18\", \"'Minor'\");\nqueryBuilder.AddCaseWhen(\"Age \u003e= 18 AND Age \u003c 60\", \"'Adult'\");\nqueryBuilder.AddCaseElse(\"'Senior'\");\nqueryBuilder.EndCaseStatement(\"AgeCategory\");\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Complex Where Conditions\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"*\");\nqueryBuilder.From(\"Employees\");\nqueryBuilder.Where(\"Age \u003e 25\");\nqueryBuilder.And(\"Salary \u003e 50000\");\nqueryBuilder.And(\"((Department = 'IT' AND Position = 'Manager') OR (Department = 'HR'))\");\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Subquery with Join\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"Employees.Name, Departments.DepartmentName\");\nqueryBuilder.From(\"Employees\");\nqueryBuilder.Join(\"(SELECT DepartmentId, DepartmentName FROM Departments) AS Departments\", \"Employees.DepartmentId = Departments.DepartmentId\");\n\nstring query = queryBuilder.Build().SQL;\n```\n\n#### Case Statement with Nested Conditions\n```csharp\nvar queryBuilder = new QueryBuilder();\nqueryBuilder.Select(\"FirstName, LastName, Age\");\nqueryBuilder.From(\"Users\");\nqueryBuilder.StartCaseStatement(\"AgeCategory\");\nqueryBuilder.AddCaseWhen(\"Age \u003c 18\", \"'Minor'\");\nqueryBuilder.StartNestedCondition();\nqueryBuilder.And(\"Age \u003e= 18\");\nqueryBuilder.Or(\"Age \u003c= 60\");\nqueryBuilder.EndNestedCondition();\nqueryBuilder.AddCaseElse(\"'Senior'\");\nqueryBuilder.EndCaseStatement(\"AgeCategory\");\n\nstring query = queryBuilder.Build().SQL;\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamsmithedward%2Fsqlserverinteraction","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwilliamsmithedward%2Fsqlserverinteraction","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwilliamsmithedward%2Fsqlserverinteraction/lists"}