發表文章

List和string的Contains方法, 用法有些不同

List和string的Contains方法, 用法有些不同 List.Contains 檢查列表中是否包含指定元素, 完整比對 // 假設有一個 List<string> 包含一些字串 List<string> stringList = new List<string> { "AA", "AB", "AC", "A" }; // 檢查 List 中是否包含指定的字串 string targetString = "A"; bool containsTarget = stringList.Contains(targetString); //返回True ==> 包含"A" // 檢查 List 中是否包含指定的字串 string targetString = "C"; bool containsTarget = stringList.Contains(targetString); //返回Flase ==> 不包含"C"   string.Contains 檢查一個字串是否包含另一個字串(模糊比對) string text = "Hello, World!"; bool containsHello = text.Contains("Hello"); // 返回 true   整合範例: 使用listB找出listA有符合部份字串的資料 //變數宣告 List<string> listA = new List<string> { "ABC_123", "ABC_456", "EEE_111", "DDD_222" }; List<string> listB = new List<string> { "ABC", "EEE" }; // 使用 LINQ 查詢,找出符合條件的資料 var result = listA.Where(i...

JQuery 載入網頁至DIV時, 增加載入失敗CallBack

JQuery 載入網頁至DIV時, 增加載入失敗CallBack $('#div_content').load('_GetList?' + 'AA=' + AA + '&BB=' + BB function (response, status, xhr) { if (status == "error") { var msg = "Error!" + xhr.status + " " + xhr.statusText; alert(msg); } });      

使用LINQ, Lambda達到SQL in 多欄位寫法

使用LINQ, Lambda達到SQL in 多欄位寫法 不能直接對SQL LINQ使用Contains List<string> list_Name = new List<string>() { "Alex", "Peter"}; //不支援Contains語法 //var query = from t1 in db.Table1 // where list_Name.Contains(t1.Name) // select t1; var query = from t1 in db.Table1 select t1; //query = query.Where(x => list_ima01.Contains(x.Ima01)); //不支援Contains語法 query = query.where(x => list_Name.Any(a => a == x.Name); //改用Any var list = query.ToList();   先把SQL LINQ 進行ToList為Object後, 就可以使用Contains List<string> list_AAA = new List<string>() { "123", "456", "789"}; var query = from t1 in AAA select t1; var list = query.ToList(); //先ToList var q2 = list.Where(x => list_AAA.Contains(x.A)); //就可以對Object LINQ使用Contains var list_q2 = q2.ToList();        

JQuery selector範例

JQuery selector範例 取得第一個找到的 li 標籤元素 $("li:first"); //jQuery li:first {} //CSS 取得其 class 屬性值為class1 的 input元素 $("input[class='class1']"); //jQuery input[name='newsletter'] {} //CSS 取得id為container之元素其內部的所有超連結 $(‘#container a’); //jQuery #container a {} //CSS 取得div父元素其下所有的p子元素 $("div > p"); //jQuery div > p {} //CSS 基本選擇器 jQuery 有三個最重要的選擇器,如下: $(“element”):選出所有該 element 的節點 例如: $(“p”) :選出所有<p>的節點 $(“#divId”):選出所有id=divid的節點 $(“.divClass”):選出所有class=divCLass的節點 階層選擇器 階層屬性有以下四種: 物件中的某一種物件(空白):$(‘#div1 p’).addClass(‘d1′); 物件中的所有物件(*):$(‘#div1 *’).addClass("d1); 之後符合條件的第一個(+):$(‘#div1 + p’).addClass(‘d1′); 之後符合的所有(~):$(‘#div1 ~ p’).addClass(‘d1′); 可進來這裡觀看階層選擇器範例: http://jsfiddle.net/divaka/fuHFD/1/ 子元素選擇器 $("ul li:nth-child(2)"); //第 2 個節點 $("ul li:nth-child(odd)"); //所有奇數子節點 $("ul li:nth-child(3n + 1)"); //1, 4, 7 … 個節點 $("div span:first-child") //所有的div元素的第一個子節點 $("div...

JQuery, 取得各input欄位資料的JQuery寫法

取得各input欄位資料的JQuery寫法 text <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>jQuery 取得資料範例</title> <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script> </head> <body> <input type="text" id="textInput" value="Hello, World!"> <button id="getTextBtn">取得文字框的值</button> <script> $(document).ready(function(){ $('#getTextBtn').click(function(){ var textValue = $('#textInput').val(); alert('文字框的值是:' + textValue); }); }); </script> </body> </html> textarea <!-- 在上面的 HTML 檔案中加入以下程式碼 --> <select id="selectOption"> <option value="option1">選項1</option> <option value=...

Javascript regex

Javascript regex //验证正整数+正小数+0 var checkIsPositive = (rule, value, callback) => { var reg = /^\d+(?=\.{0,1}\d+$|$)/ if(reg.test(value)) { callback() }else{ callback(new Error('请输入大于等于0的正数')) } }; //验证正整数+正小数 var checkIsPositiveEx0 = (rule, value, callback) => { ///^(\d|[1-9]\d+)(\.\d{1,2})?$/ ---->2位小数 var reg = /^(\d|[1-9]\d+)(\.\d+)?$/ if(reg.test(value)) { if(value == '0') { callback(new Error('请输入大于0的正实数')) } else { callback() } }else{ callback(new Error('请输入大于0的正实数')) } }; //验证正整数+0 var checkIsPositiveInteger = (rule, value, callback) => { var reg = /^(0|[1-9][0-9]*)$/ if(reg.test(value)) { callback() }else{ callback(new Error('请输入大于等于0的正整数')) } };  

C#, 利用dynamic宣告變數

利用dynamic宣告變數 using System; class Program { static void Main() { // 宣告 dynamic 物件 dynamic dynamicObject = new { Property1 = "Value1", Property2 = 42, Property3 = true }; // 取得屬性值 string value1 = dynamicObject.Property1; int value2 = dynamicObject.Property2; bool value3 = dynamicObject.Property3; // 顯示取得的值 Console.WriteLine($"Property1: {value1}"); Console.WriteLine($"Property2: {value2}"); Console.WriteLine($"Property3: {value3}"); } } 利用dynamic宣告空的變數, 動態指定屬性資料 using System; class Program { static void Main() { // 宣告 dynamic 變數 dynamic dynamicObject = new System.Dynamic.ExpandoObject(); // 給動態變數不同的屬性名稱和值 dynamicObject.Property1 = "Value1"; dynamicObject.Property2 = 42; dynamicObject.Property3 = true; // 讀取動態變數的屬性 string value1 = dynamicObject.Property1; int ...

Oracle 好用SQL

查詢Sequence SELECT * FROM all_sequences WHERE sequence_owner = 'SchemaName' AND sequence_name = 'sequence_name'; 查詢TABLE&欄位 SELECT C.OWNER ,C.TABLE_NAME as 表格名稱 , C.COLUMN_ID , C.COLUMN_NAME as 欄位名稱 , DATA_TYPE as 資料型別 , DATA_LENGTH as 長度 , DATA_PRECISION as 整數位數 , DATA_SCALE as 小數位數 , DATA_DEFAULT as 預設值 , NULLABLE as 是否允許空值 , COMMENTS as 欄位描述 FROM ALL_TAB_COLUMNS C JOIN ALL_TABLES T ON C.OWNER = T.OWNER AND C.TABLE_NAME = T.TABLE_NAME LEFT JOIN ALL_COL_COMMENTS R ON C.OWNER = R.Owner AND C.TABLE_NAME = R.TABLE_NAME AND C.COLUMN_NAME = R.COLUMN_NAME WHERE 1=1 and C.OWNER = 'SchemaName' and C.TABLE_NAME=upper('TableName') ORDER BY C.TABLE_NAME, C.COLUMN_ID Table Index SELECT * FROM DBA_IND_COLUMNS where TABLE_OWNER = 'SchemaName' -- 替換成您的模式名稱 and TABLE_NAME=upper('TableName') ORDER BY INDEX_OWNER, INDEX_NAME, COLUMN_POSITION Table PK欄位 SELECT cols.own...

MSSQL好用SQL

查詢MSSQL欄位名稱/欄位型別及長度/描述欄位 SELECT a.Table_schema +'.'+a.Table_name as 表格名稱 ,b.COLUMN_NAME as 欄位名稱 ,b.DATA_TYPE as 資料型別 ,isnull(b.CHARACTER_MAXIMUM_LENGTH,'') as 長度 ,isnull(b.NUMERIC_PRECISION ,'') as 整數位數 ,isnull(b.NUMERIC_SCALE ,'') as 小數位數 ,isnull(b.COLUMN_DEFAULT,'') as 預設值 ,case when b.IS_NULLABLE='YES' then 'Y' else 'N' end as 是否允許空值 ,( SELECT value FROM fn_listextendedproperty (NULL, 'schema', a.Table_schema, 'table', a.TABLE_NAME, 'column', default) WHERE name='MS_Description' and objtype='COLUMN' and objname Collate Chinese_Taiwan_Stroke_CI_AS = b.COLUMN_NAME ) as 欄位描述 FROM INFORMATION_SCHEMA.TABLES a LEFT JOIN INFORMATION_SCHEMA.COLUMNS b ON a.TABLE_NAME = b.TABLE_NAME WHERE TABLE_T...

C#, LINQ, 2個Table Join 使用1個欄位條件Join

using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { // 模拟两个表的数据 List<Table1> table1Data = new List<Table1> { new Table1 { Id = 1, CommonField = "A", Value = "Value1" }, new Table1 { Id = 2, CommonField = "B", Value = "Value2" }, new Table1 { Id = 3, CommonField = "C", Value = "Value3" } }; List<Table2> table2Data = new List<Table2> { new Table2 { Id = 101, CommonField = "A", Description = "Desc1" }, new Table2 { Id = 102, CommonField = "B", Description = "Desc2" }, new Table2 { Id = 103, CommonField = "D", Description = "Desc3" } }; // 使用 LINQ 进行连接操作 var query = from t1 in table1Data join t2 in table2Data on t1.Common...

C#, LINQ, 2個Table Join 使用2個欄位條件Join

2個Table Join 使用2個欄位條件Join join的欄位名稱要相同 範例1: using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { // 假设有两个表格 List<Table1> table1Data = new List<Table1> { new Table1 { ID = 1, Name = "John" }, new Table1 { ID = 2, Name = "Alice" }, new Table1 { ID = 3, Name = "Bob" } }; List<Table2> table2Data = new List<Table2> { new Table2 { ID = 1, Age = 25 }, new Table2 { ID = 2, Age = 30 }, new Table2 { ID = 3, Age = 28 } }; // 使用 LINQ 进行两个表格的连接 var query = from t1 in table1Data join t2 in table2Data on new { t1.ID, t1.Name } equals new { t2.ID, Name = "John" } select new { t1.ID, t1.Name, t2.Age }; // 打印结果 foreach (var result in query) { Console.WriteLine($...

C# Lambda List Distinct寫法(group by ... select first)

因為List<Class>要進行多欄位Distinct時, 需在Class裡Overide Equals 和 GetHashCode, 可以使用下列語法替代。參考 這篇 。 利用Group後, 取得每個Group第一組資料出來, 達到Distinct效果。 using System; using System.Collections.Generic; using System.Linq; class ClassA { public int Property1 { get; set; } public string Property2 { get; set; } public double Property3 { get; set; } public string Property4 { get; set; } public int Property5 { get; set; } } class Program { static void Main() { // 創建一個 List<ClassA> 的範例資料 List<ClassA> listOfClassA = new List<ClassA> { new ClassA { Property1 = 1, Property2 = "A", Property3 = 1.1, Property4 = "X", Property5 = 100 }, new ClassA { Property1 = 1, Property2 = "A", Property3 = 1.1, Property4 = "Y", Property5 = 101 }, new ClassA { Property1 = 2, Property2 = "B", Property3 = 2.2, Property4 = "X", Property5 = 102 }, new Cla...

ATom, 修改字體顏色

  打開 File > Stylesheet 修改註解 atom-text-editor .syntax--comment { //font-style: normal; //註解非斜體 font-size: 16px; color: lightblue; } 修改文字 atom-text-editor { // color: white; // background-color: hsl(180, 24%, 12%); }

C#, ASP.NET MVC, DBEntities動態決定連線Connection Name

在 C# 中使用 Entity Framework 時,可以建立一個繼承自 DbContext 的類別,例如 ABCEntities ,並在建構子中指定連接字串的名稱。然後,根據需要在執行時更改連接字串的名稱。 using System.Data.Entity; public class ABCEntities : DbContext { // 在這裡可以添加 DbSet 屬性和其他配置項 public ABCEntities(string connectionName) : base(connectionName) { } } 然後,在使用 ABCEntities 的地方,可以根據需要設定連接字串的名稱。例如: class Program { static void Main() { // 指定連接字串的名稱 string connectionName = "YourConnectionStringName"; // 使用指定的連接字串名稱建立 ABCEntities 實例 using (var dbContext = new ABCEntities(connectionName)) { // 在這裡可以執行資料庫操作 } } } 在上述範例中,可以根據需要更改 connectionName 的值,以選擇要使用的連接字串。這種方式可以在執行時動態指定連接字串的名稱,以便根據不同的邏輯選擇不同的資料庫連線。  

MSSQL, 取得TABLE名稱

下面SQL會因為p.value不知道型態, 而發生錯誤。 SELECT t.name AS TableName, p.value AS TableDesc FROM sys.tables t LEFT JOIN sys.extended_properties p ON p.major_id = t.object_id AND p.minor_id = 0 AND p.class = 1 where (p.value is not null and p.value <> '') and upper(p.value) like '%AAA%' 因為 upper() 的傳入參數必須為字串, 所以可以把欄位型態強制轉為varchar, 解決此問題 (前題是確定p.value一定為字串) SELECT t.name AS TableName, p.value AS TableDesc FROM sys.tables t LEFT JOIN sys.extended_properties p ON p.major_id = t.object_id AND p.minor_id = 0 AND p.class = 1 where (p.value is not null and p.value <> '') AND UPPER(CAST(p.value AS NVARCHAR(MAX))) LIKE '%' + UPPER('AAA') + '%' 就可以解決問題了。  

Lambda查詢符合List內容條件的資料

LINQ查詢符合List內容條件的資料 void Main() { List<string> listA = getA(); List<string> listB = GetB(); var query = listA.Where(x => listB.Contains(x)).ToList(); query.Dump(); } public List<string> getA() { List<string> list = new List<string>(); list.Add("A"); list.Add("B"); list.Add("C"); list.Add("D"); list.Add("E"); return list; } public List<string> GetB() { List<string> list = new List<string>(); list.Add("A"); list.Add("E"); return list; }  

HTML colgroup 用法說明

< colgroup> 是 HTML 中的一個元素,用於定義表格列(columns)的屬性,通常用來設定一組列的共同樣式或行為,以簡化表格的樣式和結構設定。它通常與 元素一起使用,用來指定列的寬度、背景色、文字對齊等屬性。 以下是 < colgroup> 的一般用法說明: 定義 < colgroup> 元素:在表格 (< table>) 元素內部,你可以使用 < colgroup> 元素來定義列的屬性。通常,它會位於表格的開頭,但在表格內部的任何位置都可以。 <table> <colgroup> <col style="width: 100px;"> <col style="background-color: lightblue;"> </colgroup> <!-- 表格內容 --> </table> 使用 < col> 元素:在 < colgroup> 元素內部,你可以使用一個或多個 < col> 元素來指定不同列的屬性。這些屬性可以包括列的寬度、背景色、文字對齊等。 <colgroup> <col style="width: 100px;"> <col style="background-color: lightblue;"> </colgroup> 繼承屬性:當你在 < colgroup> 中指定列的屬性時,這些屬性將應用於整個列,除非在特定的 < col> 元素中進一步覆蓋。 節省重複代碼:使用 < colgroup> 可以幫助節省重複的 HTML 代碼,尤其是當你希望多列具有相同的樣式或屬性時,這在大型表格中特別有用。 這是一個簡單的示例,展示了 < colgroup> 和 < col> 的使用: <table> <colgroup> <col style="...

Lambda Select first應用

 這個程式代碼是使用C#語言的LINQ (Language Integrated Query) 庫來操作一個列表 (List)。它包含了一個複雜的查詢 list.GroupBy(x => x.AA).Select(x => x.First()).Select(x => x.AA).ToList() 讓我們一步一步來詳細說明這些操作:  Comment list 是一個包含元素的 List,其中每個元素都具有一個名為 AA 的屬性。 GroupBy(x => x.AA):這是一個LINQ操作,它將 list 中的元素按照它們的 AA 屬性的值進行分組。這意味著相同的 AA 值的元素將被放入相同的分組中,所以你將會得到一個以 AA 屬性的值作為鍵的分組。 .Select(x => x.First()):這個操作針對每個分組中的元素,選擇該分組的第一個元素。換句話說,對於每個 AA 值,只會保留第一個具有該值的元素。這會縮小結果的集合,使其只包含每個 AA 值的一個元素。 .Select(x => x.AA):這是接著前一步操作的另一個 Select 操作,它選擇保留元素的 AA 屬性的值。 .ToList():最後一個操作將LINQ查詢的結果轉換為一個新的List,以便進一步使用或返回。 總結,這個LINQ查詢的目的是對 list 中的元素進行分組,然後只保留每個分組中的第一個元素,最終將這些第一個元素的 AA 屬性值轉為List返回。這可以用來去除具有相同 AA 值的重複元素,並僅保留每個 AA 值的第一個元素。

C#, LINQ, Table Join 關聯欄位條件需加工處理

執行會發生錯誤 var query = from data in dbContextTT.AA join t2 in dbContextTT.BB on "ABC=" + data.A1 equals t2.B1 select data; 可以正常執行 var query = from data in dbContextTT.AA join t2 in dbContextTT.BB on data.A1 equals t2.B1.Replace("ABC=", "") select data;

LINQPad新增Oracle資料庫連線

圖片
 

MSSQL Over (Partition by ... Order by ...) 範例

建立Table CREATE TABLE sales ( department VARCHAR(50), employee VARCHAR(50), sale_date DATE, amount DECIMAL(10, 2) ); INSERT INTO sales VALUES ('部門A', '員工1', '2023-01-01', 100.00), ('部門A', '員工1', '2023-01-02', 150.00), ('部門A', '員工2', '2023-01-01', 200.00), ('部門B', '員工3', '2023-01-01', 50.00), ('部門B', '員工3', '2023-01-02', 75.00), ('部門B', '員工4', '2023-01-01', 300.00); 資料結構: department employee sale_date amount 部門A 員工1 2023/1/1 100 部門A 員工1 2023/1/2 150 部門A 員工2 2023/1/1 200 部門B 員工3 2023/1/1 50 部門B 員工3 2023/1/2 75 部門B 員工4 2023/1/1 300   在分區中計算行號: SELECT department, employee, sale_date, ROW_NUMBER() OVER (PARTITION BY department ORDER BY sale_date) AS row_num FROM sales; 資料結果: department employee sale_date row_num 部門A 員工1 2023/1/1 1 部門A 員工2 2023/1/1 2 部門A 員工1 2023/1/2 3 部門B 員工3 2023/1/1 1 部門B 員工4 202...

C#, EF6, 建立資料庫DBEntity物件

public class MyDBEntities : DbContext { public MyDBEntities() : base("name=DBConnectionName") { } public DbSet<Table1> Table1 { get; set; } public DbSet<Table2> Table2 { get; set; } //取得每個DbSet的內容 public IQueryable<TEntity> GetALL<TEntity>() where TEntity : class { return Set<TEntity>().AsQueryable(); } protected override void OnModelCreating(DbModelBuilder modelBuilder) { //讓Entity Framework啟動不再檢查__MigrationHistory表 Database.SetInitializer<MyDBEntities>(null); base.OnModelCreating(modelBuilder); } } 使用範例 Lambda using (GeneralEntities EPEntities = new GeneralEntities()) { var IQuery_Table1 = EPEntities.GetALL<Table1>(); List<Table1> IQuery_Table1 = IQuery_Table1.Where(x => x.AA == "123").ToList(); } LINQ using (GeneralEntities EPEntities = new GeneralEntities()) { var IQuery_Table1 = from t1 in EPEntities.Table1...

C#, LINQ : 取得前幾筆資料

using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List<Person> people = new List<Person> { new Person { Id = 1, Name = "約翰史密斯", Age = 35 }, new Person { Id = 2, Name = "簡道", Age = 28 }, new Person { Id = 3, Name = "約翰強生", Age = 42 }, new Person { Id = 4, Name = "愛麗絲強森", Age = 31 }, new Person { Id = 5, Name = "鮑勃史密斯", Age = 40 }, new Person { Id = 6, Name = "傑克強森", Age = 29 }, }; var query = from person in people where person.Age >= 30 && person.Name.StartsWith("約翰") orderby person.Age descending select new { Id = person.Id, Name = person.Name, Age = person.Age };...

C#, LINQ : SQL子查詢

var result = from table in tables where (from subTable in tables select subTable.a).Contains(table.a) select table; 這個LINQ查詢首先從 "tables" 集合中選擇 "a" 值,然後使用 .Contains 方法來檢查主查詢中的 "table.a" 是否存在於子查詢的結果中。這相當於SQL中的 "a IN (SELECT a FROM tables)" 子查詢。

C# LINQ select group

void Main() { List<Order> orders = new List<Order> { new Order { OrderID = 1, OrderDate = DateTime.Parse("2023-09-21") }, new Order { OrderID = 2, OrderDate = DateTime.Parse("2023-09-22") }, // 添加更多订单 }; List<OrderDetail> orderDetails = new List<OrderDetail> { new OrderDetail { OrderDetailID = 1, OrderID = 1, ProductID = 101, UnitPrice = 10.0m, Quantity = 2 }, new OrderDetail { OrderDetailID = 2, OrderID = 1, ProductID = 102, UnitPrice = 15.0m, Quantity = 3 }, new OrderDetail { OrderDetailID = 3, OrderID = 2, ProductID = 103, UnitPrice = 20.0m, Quantity = 4 }, // 添加更多订单详情 }; var query = from order in orders join orderDetail in orderDetails on order.OrderID equals orderDetail.OrderID into orderGroup select new { Order = order, OrderDetails = orderGroup.ToList() }; foreach (var result in query) { Console.WriteLine($"Order ID: {result.Order.Order...

C#, Entity Framework 6, 繼承DbContext

using System; using System.Data.Entity; public class MyDbContext : DbContext { public MyDbContext() : base("YourConnectionString") { // 在建構子中指定資料庫連線字串,替換 "YourConnectionString" 為你的實際連線字串 // 禁用自動遷移初始化 __MigrationHistory 表格 Database.SetInitializer<MyDbContext>(null); } public DbSet<Student> Students { get; set; } // 這是資料庫中的一個表格 protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 在這裡可以進行資料庫模型的配置,例如設定索引、關聯等等 base.OnModelCreating(modelBuilder); } }

C#, EntityFramework, LINQ TransactionScopeOption.Suppress

在使用 TransactionScope進行Transaction管控時, 在其區塊所有資料的異動和資料讀取, 都會受到Lock影響, 若希望其區塊有一個不同DbContext要讀取資料, 但因Table已被別的DbContext進行資料異動而Lock時, 可以在要讀取資料的程式碼外, 包上下面TransactionScope, 他將會獨立查詢資料 using (TransactionScope tss = new TransactionScope(TransactionScopeOption.Suppress)) { } TransactionScopeOption 是一個列舉(enum)類型,用於指定 TransactionScope 的行為選項。它定義了以下四個選項: Required (預設選項): 這個選項表示當前代碼塊需要參與到已經存在的事務中。如果當前代碼塊在進入事務範圍時已經存在一個事務,則它將參與到該事務中。如果事務不存在,則會創建一個新的事務。 如果當前代碼塊成功完成,則事務將提交;如果當前代碼塊拋出異常,事務將回滾。 RequiresNew : 這個選項表示當前代碼塊需要創建一個新的獨立事務,並參與到該新事務中。無論是否存在其他事務,都將創建一個新的事務並參與其中。 當前代碼塊的操作將在新的事務內執行,並且無論成功與否,都不會影響到其他事務。 Suppress : 這個選項表示當前代碼塊將禁用事務。也就是說,當前代碼塊的操作將不受事務的約束,即使其他事務正在進行,也不會參與到任何事務中。 當前代碼塊的操作將獨立執行,不會影響到其他事務。 NotAllowed : 這個選項表示當前代碼塊不允許參與到事務中。如果當前代碼塊嘗試進入事務範圍,將引發異常。 通常用於明確禁止某些代碼塊參與到事務中的情況。 使用這些不同的選項,你可以根據你的應用程序需求來管理事務,以確保數據的一致性和可靠性。不同的選項允許你定義事務的範圍和行為方式,以適應不同的情況。

C# List Distinct寫法

若List裡為值類型(Value Type Calss), 只需要使用下列語法, 就可以取得唯一清單 List<string> aList = dataList.Distinct().ToList(); 但若List裡面是放一個Class, 而且有多個屬性, 就需要額外加工一下, 才能真正取得唯一清單, 否則執行完上述語法後, 雖然不會錯誤, 但也沒效果。 需要在Class裡新增下列方法 public override bool Equals(object obj) public override int GetHashCode() 程式可以參考如下, public Class ClassA { public string A { get; set; } public string B { get; set; } public override bool Equals(object obj) { // 如果傳入的物件是null,返回false if (obj == null) return false; // 如果傳入的對象不是 ClassA 類型,返回false if (!(obj is ClassA)) return false; // 將傳入的對象轉換為 ClassA 類型 ClassA other = (ClassA)obj; // 根據需要比較 ClassA 的屬性,這裡比較A和B屬性 return A == other.A && B == other.B; } public override int GetHashCode() { // 使用性的HashCode來生成物件的HashCode return (A.GetHashCode()) ^ (B.GetHashCode()); } } 有了以上程式後, 再使用List.Distinct()時, 就有作用了。 20231117 : 透過Group...first也可以達到Distinct效果, 參考 這篇 。

C#, Entity Framework 執行速度優化

C#, Entity Framework, EF, 執行速度優化 .AsNoTracking() --> 資料不追蹤, 查詢結果不能直接執行SaveChanges() 以下是有關.AsNoTracking()的詳細說明: 跟蹤(Tracking):當你使用EF檢索數據時,EF默認會將檢索到的實體對象添加到內部上下文(DbContext)的跟蹤(或追蹤)中。這意味著EF將跟蹤這些對象的更改,並在適當的時候自動更新數據庫。 .AsNoTracking()的作用:當你調用.AsNoTracking()方法時,EF將停止跟蹤查詢返回的實體對象。這意味著即使你對這些對象進行了更改,EF也不會自動更新數據庫。這可以提高性能,特別是在只需要讀取數據而不需要進行更新操作的情況下。 性能優化:當你使用.AsNoTracking()時,EF不會生成額外的SQL語句來檢查實體對象的更改狀態 ,這可以減少數據庫交互的次數,從而提高性能。此外,不需要將實體對象添加到上下文的跟蹤中,也可以減少內存使用。 使用場景:.AsNoTracking()通常在以下情況下很有用: 當你只需要從數據庫中檢索數據,而不打算對其進行更新。 當你執行只讀操作,如報告生成或查詢操作。 當你處理大量數據,並且不需要EF自動追蹤所有這些對象的更改。 查詢結果不能直接執行SaveChanges() 可以透過把Entity.State變更為Modify後, 再SaveChange()。 var query = from data in dbContext.EntityABC.AsNoTracking() select data; 將Entity Framework的自動更改偵測功能關閉 DbContext.Configuration.AutoDetectChangesEnabled = false; 將Entity Framework的自動更改偵測功能關閉。當你對DbContext進行多個操作(如添加、更新、刪除實體)時,Entity Framework通常會自動檢測更改,並將其跟蹤在內部,以便在保存更改時進行適當的處理。將此設置為false會禁用自動更改偵測,這將在某些情況下提高性能,特別是當你處理大量數據時,因為它不再需要跟蹤每個...

MSSQL, SSMS 顯示描述欄位或其他欄位

 HKEY\_CURRENT\_USER\\Software\\Microsoft\\Microsoft SQL Server\\100\\Tools\\Shell\\DataProject\\    V18.10 電腦\\HKEY\_CURRENT\_USER\\SOFTWARE\\Microsoft\\SQL Server Management Studio\\18.0\_IsoShell\\DataProject    SSVPropViewColumnsSQL70 字串 1,2,6,17,7,8; SSVPropViewColumnsSQL80 字串 1,2,6,17,7,8;    1    Column Name 2    Data Type 3    Length 4    Precision 5    Scale 6    Allow Nulls 7    Default Value 8    Identity 9    Identity Seed 10    Identity Increment 11    Row GUID 12    Nullable 13    Condensed Type 14    Not for Replication 15    Formula 16    Collation 17    Description

C#, LINQ 取得前幾筆資料

在這個範例中,我們使用 LINQ 查詢語法來進行查詢。首先,我們使用 from 子句定義範圍變數 person,然後使用 where 子句過濾符合條件的人,接著使用 orderby 子句按照年齡降序排序,最後使用 select 子句創建一個新的匿名類型,選擇我們感興趣的屬性。最終,我們使用 Take 方法獲取前五個人的結果並將其存儲在 result 變數中,然後通過廻圈列印出來。 using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { List people = new List { new Person { Id = 1, Name = "約翰史密斯", Age = 35 }, new Person { Id = 2, Name = "簡道", Age = 28 }, new Person { Id = 3, Name = "約翰強生", Age = 42 }, new Person { Id = 4, Name = "愛麗絲強森", Age = 31 }, new Person { Id = 5, Name = "鮑勃史密斯", Age = 40 }, new Person { Id = 6, Name = "傑克強森", Age = 29 }, }; var query = from person in people where person.Age >= 30 && person.Name.StartsWith("約翰") orderby person.Age descending select new { Id = person.Id, Name = person.Name, Age = person.Age }; ...

C#, LINQ SQL子查詢

LINQ查詢首先從 "tables" 集合中選擇 "a" 值,然後使用 .Contains 方法來檢查主查詢中的 "table.a" 是否存在於子查詢的結果中。這相當於SQL中的 "a IN (SELECT a FROM tables)" 子查詢。 var result = from table in tables where (from subTable in tables select subTable.a).Contains(table.a) select table;

LINQ select group

LINQ select group void Main() { List<order> orders = new List<order> { new Order { OrderID = 1, OrderDate = DateTime.Parse("2023-09-21") }, new Order { OrderID = 2, OrderDate = DateTime.Parse("2023-09-22") }, // 添加更多订单 }; List<orderdetail> orderDetails = new List<orderdetail> { new OrderDetail { OrderDetailID = 1, OrderID = 1, ProductID = 101, UnitPrice = 10.0m, Quantity = 2 }, new OrderDetail { OrderDetailID = 2, OrderID = 1, ProductID = 102, UnitPrice = 15.0m, Quantity = 3 }, new OrderDetail { OrderDetailID = 3, OrderID = 2, ProductID = 103, UnitPrice = 20.0m, Quantity = 4 }, // 添加更多订单详情 }; var query = from order in orders join orderDetail in orderDetails on order.OrderID equals orderDetail.OrderID into orderGroup select new { Order = order, OrderDetails = orderGroup.ToList() }; foreach (var result in query) { Console.WriteLine($"Order...

C#, EntityFramework, LINQ 跨資料庫進行Transaction控制

利用 dbContext.Database.BeginTransaction() 來控制 範例程式 string ora_con_str = ConfigurationManager.ConnectionStrings["ora_cnn_str"].ToString(); string ms_con_str = ConfigurationManager.ConnectionStrings["ms_cnn_str"].ToString(); SqlConnection msDbConn = new SqlConnection(ms_con_str); OracleConnection oraDbConn = new OracleConnection(ora_con_str); msDbConn.Open(); oraDbConn.Open(); using (DbContext dbContextTT = new DbContext(oraDbConn, false)) using (DbContext dbContextMS = new DbContext(msDbConn, false)) { using (var transactionTT = dbContextTT.Database.BeginTransaction()) using (var transactionMS = dbContextMS.Database.BeginTransaction()) { try { sql = @" insert into TEST_ALEX(A,C) select '111', 33 from dual "; rec = dbContextTT.Database.ExecuteSqlCommand(sql); sql = @" insert into A (A1, A2, A3) select 'A11','22','33' ...

Oracle 使用SQL查詢TABLE索引設定

使用SQL查詢TABLE索引設定 SELECT index_name, column_name, column_position FROM user_ind_columns WHERE table_name = upper('Table-Name');

MSSQL 查詢Table資料筆數(非即時)

 有時TABLE資料筆數太多, 無法查詢即時筆數, 可以透過下列語法, 查詢SQL Server記錄的筆數, 參考用, 非即時資料 select * from ( SELECT SCHEMA_NAME(A.schema_id) + '.' + A.Name TableName, AVG(B.rows) AS 'RowCount1' FROM sys.objects A INNER JOIN sys.partitions B ON A.object_id = B.object_id WHERE A.type = 'U' GROUP BY A.schema_id, A.Name ) AA where AA.TableName='dbo.'+'<table-name>' order by AA.RowCount1 desc

MSSQL 查詢Table的Index欄位

  SELECT OBJECT_SCHEMA_NAME(T.[object_id],DB_ID()) AS [Schema], T.[name] AS [table_name], I.[name] AS [index_name], AC.[name] AS [column_name], I.[type_desc], I.[is_unique], I.[data_space_id], I.[ignore_dup_key], I.[is_primary_key], I.[is_unique_constraint], I.[fill_factor], I.[is_padded], I.[is_disabled], I.[is_hypothetical], I.[allow_row_locks], I.[allow_page_locks], IC.[is_descending_key], IC.[is_included_column] FROM sys.[tables] AS T INNER JOIN sys.[indexes] I ON T.[object_id] = I.[object_id] INNER JOIN sys.[index_columns] IC ON I.[object_id] = IC.[object_id] INNER JOIN sys.[all_columns] AC ON T.[object_id] = AC.[object_id] AND IC.[column_id] = AC.[column_id] WHERE T.[is_ms_shipped] = 0 AND I.[type_desc] <> 'HEAP' and T.[name]='<Table-Name>' ORDER BY T.[name], I.[index_id], IC.[key_ordinal]

Bootstrap 4 button styles

![DEMO](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLyqvr-l2WyvKvjTszA_zPseWNuE1gHlge-6K4iLrnKxygD5IHB5s6pr3cl4vxohUGW-mY4fIOc81eD9M-3Cd0yBYsySvvUE6fJivVQe8e_M7jqD6jsOmVFTxcarJDP1RDzTDqB9L5ORQnmpBKQu7cwMXLM3hqprR1MLDrqm4-CXKBxNIWlvTWp0ZYsUE/s728/Image%202874.png) ```html Primary Secondary Success Danger Warning Info Light Dark Link ```

MSSQL設定Oracle DBLINK

MSSQL要設定Oracle DBLINK需要做幾個前置作業 安裝Oracle Client (我是32位元和64位元都安裝) 設定tnsnames.ora檔案 安裝ODAC (Oracle data access component) (64位元) [ LINK ] SSMS設定DBLINK 伺服器物件 > 連結的伺服器 提供者 找到OraOLEDB.Oracle > 屬性, 打勾[允許Inprocess] 新增連結的伺服器 連結的伺服器 : DBLink名稱 伺服器類型(其他資料來源) 提供者 : Oracle Provider for OLE DB 資料來源 : tnsnames.ora 裡面的名稱

JQuery 取消每個Input欄位自動完成功能

$(':input').on('focus', function () { $(this).attr('autocomplete', 'off') });

Oracle 查詢Table Lock 及刪除Lock Session

查詢Lock Session SELECT s.sid, s.serial#, s.username, s.machine, s.program, -- l.type, -- l.lmode, -- l.request, o.object_name, o.object_type FROM v$session s JOIN v$locked_object l ON s.sid = l.session_id JOIN dba_objects o ON l.object_id = o.object_id; kill lock session --ALTER SYSTEM KILL SESSION 'sid,serial#'; ALTER SYSTEM KILL SESSION '516,16217';

DBLINK MSSQL 連線 Oracle SQL查詢語法

MSSQL 連線 Oracle SQL查詢語法 方法一 select * from OracleDBLinkName..SchemaName.TableName 方法二 select * from OPENQUERY(OracleDBLinkName,' select * from SchemaName.TableName where ColnameA=''A'' ');

Ajax不能做到的事

Ajax技術,為顧及安全性,是不支援檔案上傳的;不論你怎麼加屬性加header都無法達成檔案上傳 無法Submit到不同網站

ASP.NET C# 新增webservice網頁

圖片
[WebMethod] public string HelloGuy(string PersonName) { return "Hello " + PersonName; } public string HelloGirl(string GirlName) { return "Hi " + GirlName; }

Sublime Text3 常用快速鍵

快速跨行選取 shift + mouse右鍵

[Windows]快速刪除資料夾的檔案

透過檔案總管刪除資料夾時, 因為系統會先統計檔案大小, 所以若檔案數很多時, 就會執行很慢。 可以使用指令執行刪除檔案 REM 刪除檔案 (只會刪除檔案, 子資料夾不會刪除) del /f /s /q [資料夾路徑] REM 刪除資料夾 rmdir /s /q [資料夾路徑] del /f /s /q C:\MyOldData rmdir /s /q C:\MyOldData ref web: https://exfast.me/2019/05/windows-how-to-quickly-delete-a-large-number-of-files-and-folders/

使用Markdown寫Blogger

在Blogger版面配置新增HTML/Javascript小工具, 增加以下CODE <script src="https://cdnjs.cloudflare.com/ajax/libs/showdown/1.6.4/showdown.min.js"></script> <script> var converter = new showdown.Converter(); var posts = document.querySelectorAll(".post-body,.snippet-item"); Array.prototype.forEach.call(posts, function(el, i){ if(el.innerHTML.indexOf("markdown") <= 1){ el.innerHTML = converter.makeHtml(el.innerHTML.replace("markdown","")); } }); var pres = document.querySelectorAll("pre"); Array.prototype.forEach.call(pres, function(el, i){ el.classList.add("prettyprint"); }); </script> <script src="https://cdn.rawgit.com/google/code-prettify/master/loader/run_prettify.js?skin=sunburst"></script> 就可以在Blogger的HTML模式寫Markdown語法了。 ※ 實測後, 發現若Markdown Code是包含<script>...</script>或可能有使用到特殊的語法, Markdown解析會失敗 ref web: https://etrex.blogspot.com/2017/03/blogger-code-...

[JQuery] DIV Load Callback怎麼取得錯誤訊息

  $("#yourDivId").load("yourUrl", function(response, status, xhr) { if (status === "error") { // 加载失败,可以由xhr取得錯誤狀態及訊息 var errorMessage = "加载失败:" + xhr.status + " " + xhr.statusText; console.log(errorMessage); } else { // 載入成功 console.log("載入成功"); } });

[C# LINQ] inner join / left join / right join

  inner join : using System; using System.Collections.Generic; using System.Linq; public class Person { public int ID { get; set; } public string Name { get; set; } } public class Address { public int ID { get; set; } public string Street { get; set; } } class Program { static void Main() { List<Person> people = new List<Person> { new Person { ID = 1, Name = "Alice" }, new Person { ID = 2, Name = "Bob" }, new Person { ID = 3, Name = "Charlie" } }; List<Address> addresses = new List<Address> { new Address { ID = 1, Street = "123 Main St" }, new Address { ID = 2, Street = "456 Elm St" }, new Address { ID = 4, Street = "789 Oak St" } }; var query = from person in people join address in addresses on person.ID e...

C# 桌面程式也能當作WebAPI服務器

圖片
有時希望桌面程式(Winform , Console...)也能接受別的程式呼叫觸發對應動作, 可以使用這個方法。 參考資料: https://blog.darkthread.net/blog/self-host-web-api/ STEP-01 在桌面程式程式(這裡使用Console), 透過Nuget安裝[Microsoft.AspNet.WebApi.SelfHost]。(輸入self host就可以找到) STEP-02 新增下面API服務CODE static void Main(string[] args) { //指定聆聽的URL var config = new HttpSelfHostConfiguration("http://localhost:22222"); //注意: 在Vista, Win7/8,預設需以管理者權限執行才能繫結到指定URL,否則要透過以下指令授權 //開放授權 netsh http add urlacl url=http://+:32767/ user=machine\username //移除權限 netsh http delete urlacl url=http://+:32767/ //設定路由 config.Routes.MapHttpRoute("API", "{controller}/{action}/{id}", new { id = RouteParameter.Optional }); //設定Self-Host Server,由於會使用到網路資源,用using確保會Dispose()加以釋放 using (var httpServer = new HttpSelfHostServer(config)) { //OpenAsync()屬非同步呼叫,加上Wait()...

[C# Lambda] List使用方法

圖片
using System; using System.Collections.Generic; using System.Linq; public class MyClass { public string StringField1 { get; set; } public string StringField2 { get; set; } public int NumberField { get; set; } } class Program { static void Main() { List<MyClass> myObjects = new List<MyClass> { new MyClass { StringField1 = "A", StringField2 = "X", NumberField = 10 }, new MyClass { StringField1 = "B", StringField2 = "Y", NumberField = 20 }, new MyClass { StringField1 = "A", StringField2 = "X", NumberField = 30 } }; var groupedAndSelected = myObjects .GroupBy(obj => new { obj.StringField1, obj.StringField2 }) .Select(group => new { GroupFields = group.Key, SelectedFields = group.Select(obj => new { obj.NumberField }), Total = group.Sum(...

ubuntu 指令

查詢本機IP ip addr show

[MSSQL]執行計劃

--清除資料庫執行計劃cache use 資料庫 alter database scoped configuration clear procedure_cache --查詢執行計劃cache select cap.usecounts as '使用次數'       ,cap.cacheobjtype as '快取類型'   ,objtype as '物件類型'   ,st.text from sys.dm_exec_cached_plans cap CROSS APPLY sys.dm_exec_sql_text(plan_handle) as st where st.text not like '%sys%'   and st.text like '%myparatest%' go 

Google Blogger 設定程式代碼顯示樣式[Google Prettify]

為了讓Blogger上的程式代碼增加可讀性, 可以使用[Google Prettify]的Javascript來格式化代碼。 - 支援多種程式語言 - 在Blogger上設定容易 Google Prettify設定說明如下, 詳細資料可以參考  Google Prettify 。 STEP-01  利用小工具[設定 HTML/JavaScript]加入 Goole Prettify Javascript - 標題: 輸入小工具名稱(依個人喜好) - 內容: 貼上Javascript設定 - 顯示這個小工具: 一樣要打開, 不然不會引用(有些部落格樣版不會有這個選項) <script src="https://cdn.jsdelivr.net/gh/google/code-prettify@master/loader/run_prettify.js?skin=sunburst"></script> skin可以參考 skin gallery 更換 STEP-02 預設程式代碼只會每5行顯示行號, 若要每行都顯示, 利用小工具[設定 HTML/JavaScript]加入下面CSS設定 <style> .prettyprint ol.linenums > li { list-style-type: decimal; padding-left:10px; } </style> STEP-03 在Blogger要顯示的代碼前後用<pre class="prettyprint linenums">...</pre>包起來 <pre class="prettyprint linenums"> void Main() { string a = "123456"; string b = a.Substring(0, 3); Console.WriteLine(b); } </pre> STEP-04 就完成了 void Main() { string a = "123456"; string b = a.Substr...

[Synology][Docker]MSSQL

圖片
  分享使用Synology的Docker建立MSSQL資料庫的步驟。 * 安裝Docker套件 * 開啟Docker * 選擇[倉庫伺服器], 搜尋mssql, 因為找不到微軟官方, 所以找星號最多的datagrid版本下載映像檔 * 選擇[映像檔], 選擇剛剛下載的檔案, 並執行上方的佈署 * 建立容器設定 >> 網路: 選擇[與Docker Host使用相同網路], 這樣就不用再設定Port對應了 >> 一般設定:     @容器名稱: 可以修改為自己想要的名稱     @啟用自動重啟: 勾選 * 一般設定>進階設定 : 新增環境變數     @變數:  ACCEPT_EULA, 數值: Y     @變數:  SA_PASSWORD, 數值: sa密碼          需符合下列條件 至少 8 個字元 必需包含英文大寫、英文小寫、數字、非字母數字符號四者中的其中三種即可 * 儲存後, 等待建立及啟動容器 * 下載SSMS軟體, 並輸入NAS IP及sa登入密碼, 就可以成功連上MSSQL 參考網站: https://blog.csdn.net/weixin_30843121/article/details/113087883 https://titangene.github.io/article/docker-mssql-server-for-linux.html