{"id":31218539,"url":"https://github.com/pinalrafael/cpsysudbex","last_synced_at":"2026-05-03T15:35:39.412Z","repository":{"id":38979173,"uuid":"253855424","full_name":"pinalrafael/CPSysUDBEx","owner":"pinalrafael","description":"Exemplo completo de uso da biblioteca CPSysUDB","archived":false,"fork":false,"pushed_at":"2024-01-19T20:12:26.000Z","size":125,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-18T22:58:57.787Z","etag":null,"topics":["csharp","desktop","dll","firebird","mysql","sqlite","sqlserver"],"latest_commit_sha":null,"homepage":"http://cpsystems.com.br/","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pinalrafael.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-04-07T16:47:39.000Z","updated_at":"2022-06-02T22:50:53.000Z","dependencies_parsed_at":"2022-08-27T15:12:23.735Z","dependency_job_id":null,"html_url":"https://github.com/pinalrafael/CPSysUDBEx","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/pinalrafael/CPSysUDBEx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinalrafael%2FCPSysUDBEx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinalrafael%2FCPSysUDBEx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinalrafael%2FCPSysUDBEx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinalrafael%2FCPSysUDBEx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pinalrafael","download_url":"https://codeload.github.com/pinalrafael/CPSysUDBEx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinalrafael%2FCPSysUDBEx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276257887,"owners_count":25611564,"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","status":"online","status_checked_at":"2025-09-21T02:00:07.055Z","response_time":72,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["csharp","desktop","dll","firebird","mysql","sqlite","sqlserver"],"created_at":"2025-09-21T15:07:45.380Z","updated_at":"2025-09-21T15:07:51.028Z","avatar_url":"https://github.com/pinalrafael.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CPSysUDB\n[NuGet Packages](https://www.nuget.org/packages/CPSysUDB/)\n.NET Framework 4.7.2\n\n## pt-BR\n### Descrição\nA biblioteca foi criada com a finalidade de tornar o desenvolvimento de uma aplicação mais ágil, facilitando a criação e atualização do banco de dados, comunicação com SQL Server, MySQL, Firebird e SQLite, contolar as rotinas de banco de dados e integração universal entre todas as plataformas compatíveis com C#.\n\n### Motivação\n- Criar um sistema em um banco de dados específico mas em algum cliente era necessário outro banco de dados\n- Criação e atualização do banco de dados do cliente pela própria aplicação\n- Não usar querys de banco de dados\n\n### CPSysSQLFramework3\nEsta versão é a idéia final do projeto com diversas melhorias como o uso de entidades criadas pelo desenvolvedor.\n\n#### Recursos\n- Uso de entidades (classes), cada entidade é uma tabela no banco de dados\n- Rotina para sempre recriar o banco de dados (muito útil para desenvolvimento) com opção para desabilitar\n- Controle total das rotinas de criação e atualização do banco de dados\n- Comunicação híbrida com SQL Server, MySQL, Firebird e SQLite sem necessidade de criar querys separadas apenas trocando os dados de conexão\n- Auto atualização do banco de dados, tabelas e campos\n- Criação de PK com auto incremento e FK\n- Respeitar regras do banco de dados\n- Cria o banco de dados automaticamente\n- Create DataBase, Create Table, Insert, Update, Delete, Select\n- Where, Order By, Group By, Union, Limit, offset e Joins\n- Suporte para funções do banco de dados como GETDATE e DATEADD\n- Suporte para usar um campo de uma tabela no where.\n- Suporte para comando distinct.\n- Criação de funções, eventos e gatilhos dentro da biblioteca.\n- Uso das funções min, max, avg, sum, count, upper, lower, trim para os campos do select e where.\n\n#### Compatibilidades\n- Suporte para int, string, DateTime, double e enum\n- Compatível com WEB e Desktop\n\n#### Restições\n- Respeitar as regras do banco de dados\n- Criar as tabelas em ordem de dependëncia\n\n#### Como Usar\n- Importe a biblioteca\n```cs\nusing CPSysUDB;\n```\n- Inicie uma conexão\n```cs\n// cria conexão de forma normal\nCPSysSQLFramework3 cPSysSQLFramework3 = new CPSysSQLFramework3(CPSysUDB.Configuration.ConnectionData.CreateConnectionSQLSRV(@\"RAFAEL-PC\\SQLEXPRESS\", true, \"db_test3\", \"sa\", \"*****\"), true,\ntrue);// indica que a conexão será persistente, sendo nexessário usar a função CloseConnection()\nCPSysSQLFramework3 cPSysSQLFramework3 = new CPSysSQLFramework3(CPSysUDB.Configuration.ConnectionData.CreateConnectionMYSQL(@\"localhost\", true, \"db_test3\", \"root\", \"\"), true, true);\nCPSysSQLFramework3 cPSysSQLFramework3 = new CPSysSQLFramework3(CPSysUDB.Configuration.ConnectionData.CreateConnectionFIREBIRD(@\"localhost\", true, \"db_test3.fdb\", \"SYSDBA\", \"masterkey\"), true, true);\nCPSysSQLFramework3 cPSysSQLFramework3 = new CPSysSQLFramework3(CPSysUDB.Configuration.ConnectionData.CreateConnectionSQLITE(@\"db_test3.sqlite\", \"Version=3;\"), true, true);\n\n// cria conexão encriptada\nCPSysSQLFramework3.CreateConfigFile(\"darabaseconfig.cfsq\", CPSysUDB.Configuration.ConnectionData.CreateConnectionSQLSRV(@\"RAFAEL-PC\\SQLEXPRESS\", true, \"db_test3\", \"sa\", \"****\"), \"87654321\", \"123456\", \"12345678\");\nCPSysSQLFramework3.CreateConfigFile(\"darabaseconfig.cfsq\", CPSysUDB.Configuration.ConnectionData.CreateConnectionMYSQL(@\"localhost\", true, \"db_test3\", \"root\", \"\"), \"87654321\", \"123456\", \"12345678\");\nCPSysSQLFramework3.CreateConfigFile(\"darabaseconfig.cfsq\", CPSysUDB.Configuration.ConnectionData.CreateConnectionFIREBIRD(@\"localhost\", true, \"db_test3.fdb\", \"SYSDBA\", \"masterkey\"), \"87654321\", \"123456\", \"12345678\");\nCPSysSQLFramework3.CreateConfigFile(\"darabaseconfig.cfsq\", CPSysUDB.Configuration.ConnectionData.CreateConnectionSQLITE(@\"db_test3.sqlite\", \"Version=3;\"), \"87654321\", \"123456\", \"12345678\");\n\nCPSysSQLFramework3 cPSysSQLFramework3 = new CPSysSQLFramework3(\"darabaseconfig.cfsq\", \"87654321\", \"12345678\", \"123456\", true, true);\n```\n- Excluír todas as tabelas e criar novamente, é útil para o desenvolvimento mas para produção é necessário remover o comando\n```cs\nCPSysSQLFramework3.DropAllTables();// reinicie o banco de dados do zero\n```\n- Crie a sua entidade\n```cs\npublic enum Grade\n{\n\tA, B, C, D, F\n}\n\n[CPSysUDB.Attribute.ClassAttribute(\"e\",\n\"prefixo\")]// declare a entidade como objeto do banco de dados dando a ela um apelido e prefixo\npublic class Enrollment : Table\n{\n\t[CPSysUDB.Attribute.SQLAttribute(CPSysUDB.Enums.SQLTypes.PRIMARY_KEY_IDENTITY)]// declare um campo como PK ou PK auto incremento\n    public int EnrollmentID { get; set; }\n    [CPSysUDB.Attribute.SQLAttribute(CPSysUDB.Enums.SQLTypes.FOREIGN_KEY, typeof(Course), \"CourseID\")]// declare um campo como FK\n    public int CourseID { get; set; }\n    [CPSysUDB.Attribute.SQLAttribute(CPSysUDB.Enums.SQLTypes.FOREIGN_KEY, typeof(Student), \"ID\")]\n    public int StudentID { get; set; }\n    [CPSysUDB.Attribute.SQLAttribute(CPSysUDB.Enums.SQLTypes.NORMAL)]// declare um campo normal, é necessário declarar todos os camps que será da tabela\n    public Grade Grade { get; set; }\n}\n```\n- Crie as tabelas\n```cs\nCPSysSQLFramework3.CreateOrAlterTable\u003cEnrollment\u003e();\n```\n- Insira dados por objeto \n```cs\nEnrollment enrollment = new Enrollment();\nenrollment.CourseID = 1;\nenrollment.StudentID = 1;\nenrollment.Grade = Grade.A;\nenrollment.Insert\u003cEnrollment\u003e();\ncPSysSQLFramework2.Execute(enrollment);\n```\n- Atualize dados\n```cs\nEnrollment enrollment = new Enrollment();\nenrollment.Update(\"Grade\", Grade.A);\nenrollment.Where\u003cEnrollment\u003e(\"Id\", Command.EQUALS, 1);\n\ncPSysSQLFramework2.Execute(enrollment);\n```\n- Exclua dados\n```cs\nEnrollment enrollment = new Enrollment();\nenrollment.Delete();\nenrollment.Where\u003cEnrollment\u003e(\"Id\", Command.EQUALS, 1);\n\ncPSysSQLFramework2.Execute(enrollment);\n```\n- Consulte dados\n```cs\nEnrollment enrollment = new Enrollment();\nenrollment.Select\u003cEnrollment\u003e();\nenrollment.Where\u003cEnrollment\u003e(\"id\", CPSysUDB.Enums.Command.BIGGEREQUALS, 1);\nenrollment.OrderBy\u003cEnrollment\u003e(\"id\", CPSysUDB.Enums.Order.ASC);\nenrollment.GroupBy\u003cEnrollment\u003e(\"id\");\nenrollment.Distinct();\nenrollment.Limit(1000);\nenrollment.Offset(1, 1000);\n\nDataSet ds1 = cPSysSQLFramework3.Query(acc);// SELECUTA O SELECT\nif (ds1 != null)\n{\n\tConsole.WriteLine(\"    COUNT: \" + ds1.Tables[0].Rows.Count);\n    string column = \"\", rows = \"\";\n    foreach (DataColumn dataColumn in ds1.Tables[0].Columns)\n    {\n\t\tcolumn = column + \" # \" + dataColumn.Caption;\n    }\n    Console.WriteLine(\"    \" + column);\n    foreach (DataRow dataRow in ds1.Tables[0].Rows)\n    {\n\t\trows = \"\";\n        foreach (var item in dataRow.ItemArray)\n        {\n\t\t\trows = rows + \" # \" + item;\n        }\n        Console.WriteLine(\"    \" + rows);\n    }\n}\n```\n- Criando funções\n```cs\ncPSysSQLFramework3.DeclareFunction(\"function_teste\", (sender, e) =\u003e {\n    Enrollment enrollment = (Enrollment)evento;\n    cPSysSQLFramework3.Execute(enrollment);\n    if (cPSysSQLFramework3.ErrorMsg != \"\")\n    {\n        Console.WriteLine(\"    ERRO: \" + cPSysSQLFramework3.ErrorMsg);\n    }\n});\n```\n- Executando Funções\n```cs\nEnrollment enrollment = new Enrollment();\nenrollment.CourseID = 1;\nenrollment.StudentID = 1;\nenrollment.Grade = Grade.A;\nenrollment.Insert\u003cEnrollment\u003e();\n\ncPSysSQLFramework3.ExecuteFunction(\"function_teste\", enrollment);\n```\n- Criando gatilhos\n```cs\ncPSysSQLFramework3.DeclareTrigger\u003cCourse\u003e(\nnew CPSysUDB.Enums.TriggerType[] { CPSysUDB.Enums.TriggerType.CREATE, CPSysUDB.Enums.TriggerType.ALTER, CPSysUDB.Enums.TriggerType.INSERT }, (sender, e) =\u003e\n{\n    TriggerArgs trg = (TriggerArgs)sender;\n    Console.WriteLine(\"Msg: \" + trg.Msg);\n    Console.WriteLine(\"Response: \" + trg.Response);\n    Console.WriteLine(\"TriggerType: \" + trg.TriggerType);\n    Console.WriteLine(trg.Query);\n});\n```\n- Criando eventos\n```cs\ncPSysSQLFramework3.DeclareEvent(1, CPSysUDB.Enums.TypeEvent.SECONDS, (sender, e) =\u003e {\n    Console.WriteLine(\"EVENT: 1 SECONDS \" + DateTime.Now);\n});\n```\n- Criando apelidos\n```cs\nEnrollment enrollment = new Enrollment();\nenrollment.Select\u003cEnrollment\u003e(\"EnrollmentID\", \"id\");\nenrollment.Select\u003cEnrollment\u003e(\"Grade\", \"grade\");\n\nDataSet ds4 = cPSysSQLFramework3.Query(acc);// SELECUTA O SELECT\nif (ds4 != null)\n{\n    Console.WriteLine(\"    COUNT: \" + ds4.Tables[0].Rows.Count);\n    string column = \"\", rows = \"\";\n    foreach (DataColumn dataColumn in ds4.Tables[0].Columns)\n    {\n        column = column + \" # \" + dataColumn.Caption;\n    }\n    Console.WriteLine(\"    \" + column);\n    foreach (DataRow dataRow in ds4.Tables[0].Rows)\n    {\n        rows = \"\";\n        foreach (var item in dataRow.ItemArray)\n        {\n            rows = rows + \" # \" + item;\n        }\n        Console.WriteLine(\"    \" + rows);\n    }\n}\n```\n- Criando funções do select\n```cs\nenrollment = new Enrollment();\nenrollment.Select\u003cEnrollment\u003e(\"Id\", FieldFunction.SUM, \"Sum\");\nDataSet ds5 = cPSysSQLFramework3.Query(enrollment);\nif (ds5 != null)\n{\n    Console.WriteLine(\"    COUNT: \" + ds5.Tables[0].Rows.Count);\n    string column = \"\", rows = \"\";\n    foreach (DataColumn dataColumn in ds5.Tables[0].Columns)\n    {\n        column = column + \" # \" + dataColumn.Caption;\n    }\n    Console.WriteLine(\"    \" + column);\n    foreach (DataRow dataRow in ds5.Tables[0].Rows)\n    {\n        rows = \"\";\n        foreach (var item in dataRow.ItemArray)\n        {\n            rows = rows + \" # \" + item;\n        }\n        Console.WriteLine(\"    \" + rows);\n    }\n}\n```\n- Fechando a conexão\n```cs\ncPSysSQLFramework3.CloseConnection();\n```\n\n# CREATOR\n[**Follow me**](https://github.com/pinalrafael?tab=followers) for my next creations","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinalrafael%2Fcpsysudbex","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpinalrafael%2Fcpsysudbex","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinalrafael%2Fcpsysudbex/lists"}