發表文章

目前顯示的是有「C#」標籤的文章

「8 皇后棋盤」程式實作

圖片
一、前言 因緣際會之下被要求撰寫取得 8 皇后棋盤的全部解答,因此特別寫撰寫文件,供日後參考。 二、規則 每個皇后不能再同列。 每個皇后不能再同行。 每個皇后不能同斜角線上。 三、操作 圖、開啟 VS2019 > 開啟新的 主控台應用程式 專案 > 輸入底下程式碼 class Program { /// <summary> /// 主程式 /// </summary> /// <param name="args"></param> static void Main(string[] args) { var arr = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7 }; var arrs = GetArrs(arr); arrs = RemoveObliqueLine(arrs); foreach (var ans in arrs) { Console.WriteLine($"第{arrs.IndexOf(ans) + 1}個棋盤"); foreach (var item in ans) { var str = "........".Remove(item, 1).Insert(item, "Q"); Console.WriteLine(str); } Console.WriteLine($""); } Console.ReadKey(); } /// <summary> /// 移除 斜角線的棋盤 /// </summary> /// <param name="arrs"></param> /// <returns...

使用 Visual Studio 2019 實作「RESTful API」

圖片
一、介紹 REST 是Roy Thomas Fielding博士於2000年博士論文提出的一種軟體架構風格,目的是讓不同軟體、程式於網路互相傳遞資訊。因為它是一種風格而不是規範,依據筆者的經驗會依照當時的專案或公司規定而決定是否完全遵守。 二、專案架構 圖、Visual Studio 2019 專案架構 三、常用的 HTTP Method 代表用意 GET 讀取 PUT 更新 DELETE 刪除 POST 新增 四、RESTful 路由應用 五、使用 Visual Studio 2019 建置 RESTful API 圖、修改 WebApiConfig.cs 原始碼(C#) public static class WebApiConfig { public static void Register(HttpConfiguration config) { // 針對 JSON 資料使用 camel 案例。 config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // Web API 設定和服務 // Web API 路由 config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == ...

「NSwag」是 .net 下的描述 OpenAPI 好用工具

圖片
一、介紹 NSwag 是一個 .net 、 .net core 下的 Swagger / OpenAPI 2.0 和 3.0 的工具,使用 JOSN 去描述 RESTful web API 。 二、Swagger Swagger 是一個介面描述語言使用 JSON 去描述 RESTful API 三、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 四、 Nuget NSwag.AspNet.Owin Microsoft.AspNet.WebApi.Owin 五、操作步驟 圖、建立 TestApiController.cs 原始碼 /// <summary> /// TestApiController summary /// </summary> public class TestApiController : ApiController { /// <summary> /// TestApi Get TestVm summary /// </summary> /// <param name="data"></param> /// <returns></returns> [HttpGet] public List<string> Get([FromUri]List<string> data) { return data; } } 圖、修改 Startup.cs 原始碼 var config = new HttpConfiguration(); app.UseSwaggerUi3(typeof(Startup).Assembly, settings => { settings.GeneratorSettings.DefaultUrlTemplate = "api/{controller}/{action}/{id?}"; }); app.UseWebApi(config); c...

asp.net下的工作排程套件「Quartz」

圖片
一、前言 筆者曾使用 Quartz  撰寫以 Web 應用程式為基礎下的工作排程器,寫法也挺簡單的因此介紹給讀者。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、專案架構 Windows 主控台 為基礎下撰寫的範例 圖、專案架構 四、操作步驟 圖、建立 TestJob.cs ,輸入底下 程式碼 程式碼(C#) public async Task Execute(IJobExecutionContext context) { //輸出 日期(年月日 時分秒) await Console.Out.WriteLineAsync(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } 圖、在 Program.cs 的 main 裡,輸入底下程式碼 程式碼(C#) //建立 工作JOB var job = JobBuilder.Create<TestJob>().WithIdentity("job1", "group1").Build(); //設定 工作JOB為 立即執行、每秒重複一次 的觸發器 var trigger = TriggerBuilder.Create() .WithIdentity("trigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(1) .RepeatForever()) .Build(); var factory = new StdSchedulerFactory(); var scheduler = await factory.GetScheduler(); // 建立 工作排程 await scheduler.ScheduleJob(job, trigger); // 排程 開始 await scheduler.Start(); Console.Re...

asp.net 下的 JSON 套件最佳利器「Newtonsoft.Json」

圖片
一、前言 筆者很常使用 Newtonsoft.Json 於 JSON 資料的序列化與反序列化,因為好用且有名因此介紹筆者常用的寫法給讀者。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、Newtonsoft.Json 的常用類別 JArray:代表 JSON array JObject:代表 JSON 物件 JProperty:代表 JSON 屬性 JToken:代表 JSON Token,可為 JArray、JObject、JProperty、JValue …等 JValue:代表一個 JSON 值,可能是 string、integer、date …等 四、反序列化 圖、反序列化 程式碼 var jsonStr = "{'a':'a1', 'b': 'b1'}"; return JsonConvert.DeserializeObject<JToken>(jsonStr); 圖、執行結果 五、序列化 圖、序列化 程式碼 var jsonObj = new { a = "a1", b = "b1" }; return JsonConvert.SerializeObject(jsonObj); 圖、執行結果 六、參考 Newtonsoft.Json

「Dapper」一個高效率輕量型 ORM 套件

圖片
一、前言 Dapper 是一個輕量化 ORM 的套件,可以寫出類似於 ADO.NET 的簡化語法,但保有 ORM 的特性,而相較於 Code First , Dapper 較為輕巧,因此筆者會依照專案的特性使用。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、範例資料庫 圖、範例資料庫 四、讀取 範例皆使用 參數型 方式操作資料庫,避免 Sql Injection 問題。 圖、範例程式碼 原始碼(C#) var conn = WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; using (var sb = new SqlConnection(conn)) { var data = sb.Query<Test>($"SELECT [a1],[a2] FROM [Test] where [Seq] = @Seq", new { Seq = 1 }).ToList(); return data; } 圖、執行結果 五、新增 範例皆使用 參數型 方式操作資料庫,避免 Sql Injection 問題。 圖、範例程式碼 原始碼(C#) var conn = WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; using (var sb = new SqlConnection(conn)) { var items = new List<Test> { new Test { a1 = "a1", a2 = "a2" }, new Test { a1 = "a11", a2 = "a22" }, }; return sb.Execute($"INSERT INTO [Test] ([a1] ...

使用「SqlBulkCopy」進行大量資料寫入

圖片
一、前言 使用 Entity Framework 產生的資料庫模型進行大量資料的寫入是相當緩慢的,所幸認識到 SqlBulkCopy 類別,它可以有效率地進行大量資料的寫入,筆者因為它減少很多等待的時間。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、範例資料庫 圖、範例資料庫 四、範例 專案結構 和 CSV結構 圖、範例 專案結構 和 CSV結構 五、範例 ViewModel 圖、範例 ViewModel 原始碼(C#) public class TestVm { public string a1 { get; set; } public string a2 { get; set; } } 六、SqlBulkCopy 程式碼 圖、SqlBulkCopy 程式碼 原始碼(C#) //取得資料庫連線字串 var conn = WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString; using (var sb = new SqlBulkCopy(conn)) { sb.DestinationTableName = "Test"; sb.WriteToServer(dt, DataRowState.Added); } 圖、執行結果 七、完整程式碼 public class BulkController : ApiController { [HttpGet] public string Add() { try { //csv 轉 ViewModel var data = GetCsvData(); //ViewModel 轉 DateTable var dt = GetDataTable(data); //取得資料庫連線字串 var conn = WebConfig...

使用「Code First」進行資料庫的讀取、新增、修改、刪除的操作

圖片
一、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 二、範例資料庫 圖、範例資料庫 三、 關聯模型 圖、關聯模型 四、讀取 圖、範例程式碼 原始碼(C#) using (var db = new DbTestContext()) { var data = db.Test.Where(x => x.a1 == "1").SingleOrDefault(); return data; } 圖、執行結果 五、新增 圖、範例程式碼 原始碼(C#) using (var db = new DbTestContext()) { var newData = new Test() { a1 = "a1", a2 = "a2", }; db.Test.Add(newData); return db.SaveChanges(); } 圖、執行結果 六、修改 圖、範例程式碼 原始碼(C#) using (var db = new DbTestContext()) { var data = db.Test.Where(x => x.a1 == "a1").SingleOrDefault(); data.a1 = "a3"; return db.SaveChanges(); } 圖、執行結果 七、刪除 圖、範例程式碼 原始碼(C#) using (var db = new DbTestContext()) { var data = db.Test.Where(x => x.a1 == "a3").SingleOrDefault(); db.Test.Remove(data); return db.SaveChanges(); } 圖、執行結果 八、相關連結 使用「Visual Studio 2019」建置一個有 Mvc 和 Web Api 架構的網站 使用「CsvHelpe...

使用「Entity Framework Tools」建立資料庫關聯模型

圖片
一、前言 Entity Framework 是微軟旗下基於 ADO.NET 的資料庫物件關聯技術(Object Relational Mapping 簡稱 ORM ),筆者使用它來減少撰寫新增、刪除、修改、查詢的 SQL 語法。 二、開發環境 整合開發環境:Visual Studio 2019 語言:C# .net framework:4.6.2 三、範例資料庫 圖、範例資料庫 四、專案結構 圖、專案結構 五、操作步驟 圖、選擇Vm資料夾後 滑鼠右鍵 > 選擇 加入 > 點選 新增項目 圖、選擇 ADO.NET 實體資料模型 > 輸入 名稱 圖、選擇 來自資料庫的 Code First 圖、點選 新增連結 圖、輸入 資料庫相關資訊 > 按 確定 圖、按 下一步 圖、選擇 資料表 、 檢視 > 按 完成 圖、產生模型 六、相關連結 使用「Visual Studio 2019」建置一個有 Mvc 和 Web Api 架構的網站 使用「CsvHelper」讀取、寫入 CSV 檔案 好用的資料庫管理工具「SQL Server 資料庫專案」 「NLog」與「Sql Server」資料庫的完美搭配 使用「ADO.NET」 進行資料庫的讀取、新增、修改、刪除的操作 使用「Entity Framework Tools」建立資料庫關聯模型 https://weitechshare.blogspot.com/2020/12/code-first.html 使用「SqlBulkCopy」進行大量資料寫入 「linqkit」動態組裝 LINQ 條件的好用套件 「Dapper」一個高效率輕量型 ORM 套件 七、參考 Visual Studio 中的 Entity Framework Tools