不過老大提到之前已經有修正,不知道是不是 Windows Update 調整回新版輸入法,簡易紀錄一下
星期三, 10月 27, 2021
星期六, 10月 23, 2021
[C#] NumericUpDown
根據 NumericUpDown 文章範例再加上常用功能的筆記
using System;
using System.Windows.Forms;
namespace NnumericUpDownSample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 輸入法切換回英數,且停用輸入法切換
numericUpDown1.ImeMode = ImeMode.Disable;
// 設定初始值、最大值和最小值
numericUpDown1.Minimum = -9999999;
numericUpDown1.Maximum = 9999999;
numericUpDown1.Value = 9999;
}
#region 全選
private void SelectAll()
{
numericUpDown1.Select(0, numericUpDown1.Text.Length);
}
private void numericUpDown1_Enter(object sender, EventArgs e)
{
SelectAll();
}
private void numericUpDown1_MouseDown(object sender, MouseEventArgs e)
{
SelectAll();
}
#endregion
private void chkDecimalPlaces_CheckedChanged(object sender, EventArgs e)
{
if (numericUpDown1.DecimalPlaces > 0)
{
numericUpDown1.DecimalPlaces = 0;
numericUpDown1.Value = Decimal.Round(numericUpDown1.Value, 0, MidpointRounding.AwayFromZero);
}
else
{
numericUpDown1.DecimalPlaces = 2;
numericUpDown1.Increment = 0.25M;
}
}
private void chkThousandsSeparator_CheckedChanged(object sender, EventArgs e)
{
numericUpDown1.ThousandsSeparator = !numericUpDown1.ThousandsSeparator;
}
private void chkHexadecimal_CheckedChanged(object sender, EventArgs e)
{
numericUpDown1.Hexadecimal = !numericUpDown1.Hexadecimal;
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
string info = string.Empty;
info += $"Value:{numericUpDown1.Value}" + Environment.NewLine;
info += $"Text:{numericUpDown1.Text}";
lblInfo.Text = info;
}
}
}
NumericUpDown.Text Property
從官方文件上就可以知道 Text Property 不會出現在屬性視窗內,但是 Code 內是可以直接叫用,透過 Text Property 來自訂全選功能
NumericUpDown 為輸入數字使用,因此把強制切換成英數並關閉鍵盤切換輸入法
星期五, 10月 15, 2021
LinqPad - 中斷點
在 LinqPad 下中斷點竟然停不下來,後來開啟一個新的 Query 再下中斷點時,跳出下面的提醒訊息
猜測是不小心點到右下角的圖式,開啟 optimize+ (等同於 release mode) 才停不下來,手殘
根據訊息 Optimization 可以在兩個地方設定,分別為
1. Edit => Preferences => Query => Query Optimization Default
猜測是不小心點到右下角的圖式,開啟 optimize+ (等同於 release mode) 才停不下來,手殘
星期六, 10月 09, 2021
[SQL] 交易式複寫-建立訂閱
該筆記延續 [SQL] 交易式複寫-設定發行,根據 教學課程:設定兩個完全連線的伺服器之間的複寫 (異動) 文章來設定散發,該文章作法是利用複寫精靈來設定訂閱
建立交易式發行集的訂閱
啟動訂閱精靈
選擇發行者、資料庫與發行集
- 發送訂閱:「訂閱者」不需發出請求,「發行者」便會將變更傳播給「訂閱者」
- 提取訂閱:「訂閱者」必須請求傳送「發行者」中的變更。
散發代理程式安全性
代理程式排程設定 | Job 排程類型 |
---|---|
連續執行 | 當 SQL Server Agent 啟動時自動啟動 |
僅在需要時執行 | 執行一次 |
定義排程 | 重覆執行 |
初始化訂閱
完成精靈
-----------------開始: 在發行者 'NODE1\SQL2019' 端執行的指令碼-----------------
use [AdventureWorks2019]
exec sp_addsubscription
@publication = N'Advworksproducttrans',
@subscriber = N'NODE2\SQL2019',
@destination_db = N'AdventureWorks2019',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0
exec sp_addpushsubscription_agent
@publication = N'Advworksproducttrans',
@subscriber = N'NODE2\SQL2019',
@subscriber_db = N'AdventureWorks2019',
@job_login = N'Node1\repl_distribution',
@job_password = null,
@subscriber_security_mode = 1,
@frequency_type = 64,
@frequency_interval = 0,
@frequency_relative_interval = 0,
@frequency_recurrence_factor = 0,
@frequency_subday = 0,
@frequency_subday_interval = 0,
@active_start_time_of_day = 0,
@active_end_time_of_day = 235959,
@active_start_date = 20211005,
@active_end_date = 99991231,
@enabled_for_syncmgr = N'False',
@dts_package_location = N'Distributor'
GO
-----------------結束: 在發行者 'NODE1\SQL2019' 端執行的指令碼-----------------
在訂閱者端設定資料庫權限
在 Node2 上授予 repl_distrubution 為 ProductReplica DB 的 db_owner 角色
檢視訂閱的同步處理狀態
Node2 上的 ProductReplica.Production.Product 資料欄位沒有看見 StandardCost 和 ListPrice 兩個欄位
其他觀察
快照資料集初始化
Node2 上也會有對應的訂閱
SQL Server Agent 作業活動監視器內,有交易式複寫相關的 Job 一覽表,可以透過 [類別目錄] 欄位資訊來了解 Job 存在目的
星期五, 10月 08, 2021
[SQL] 交易式複寫-設定發行
該筆記延續 [SQL] 交易式複寫-設定資料庫權限,根據 教學課程:設定兩個完全連線的伺服器之間的複寫 (異動) 文章來設定散發,該文章作法是利用複寫精靈來設定發行集
建立發行集並定義發行項
發行集精靈說明
設定發行集類別,選擇 [交易式發行集]
發行項 (Articles),選擇 Product Table 並排除 StandardCost 和 ListPrice 欄位
篩選資料表的資料列,可以設定資料條件,只發行符合條件的資料
篩選條件:SafeStockLevel < 500 的資料
篩選條件設定完成
快照集代理程式,根據 Techdays Taiwan 2013 - 跨洲際多點同時服務的資料庫解決方案,使用SQL Server 點對點的資料同步 內,老師說明大型資料庫都是透過備份來進行快照集初始化,但這篇練習是使用 [立即建立快照集,並保留快照集為可使用狀態,以初始化訂閱] 選項來進行
代理程式安全,選擇 Snapshot Agent 和 LogReader Agent 帳號,並取消 [使用快照集代理程式的安全性設定]
以 LogReader Agnet 設定為例說明, Snapsot Agent 就省略囉
精靈產生的 Script 檔案
檢視快照集產生的狀態
將散發代理程式新增至發行集存取清單 (PAL)
SSMS => 複寫 => 本機發行集 => 滑鼠右鍵 => 新增發行集
設定發行集資料庫,已事先還原 AdventrueWorks2019 至 Node1 上
篩選條件:SafeStockLevel < 500 的資料
快照集代理程式,根據 Techdays Taiwan 2013 - 跨洲際多點同時服務的資料庫解決方案,使用SQL Server 點對點的資料同步 內,老師說明大型資料庫都是透過備份來進行快照集初始化,但這篇練習是使用 [立即建立快照集,並保留快照集為可使用狀態,以初始化訂閱] 選項來進行
代理程式安全,選擇 Snapshot Agent 和 LogReader Agent 帳號,並取消 [使用快照集代理程式的安全性設定]
- NODE1\SQL2019-AdventureWorks2019-1:LogReader 使用
- NODE1\SQL2019-AdventureWorks2019-Advworksproducttrans-1:Snapshot 使用
-- 正在啟用複寫資料庫
use master
-- 在 AdventureWorks2019 上啟用交易式複寫
exec sp_replicationdboption
@dbname = N'AdventureWorks2019',
-- optname 參數為 merge publish、publish、subscribe 和 sync with backup
@optname = N'publish',
@value = N'true'
GO
-- 執行 sp_addlogreader_agent 來建立 Agent Job
exec [AdventureWorks2019].sys.sp_addlogreader_agent
@job_login = N'Node1\repl_logreader',
@job_password = null,
-- 預設使用 Windows 整合驗證連發行者
@publisher_security_mode = 1
GO
-- 建立交易式發行集
use [AdventureWorks2019]
exec sp_addpublication
@publication = N'Advworksproducttrans',
@description = N'來自發行者 ''NODE1\SQL2019'' 的資料庫 ''AdventureWorks2019'' 交易式發行集。',
@sync_method = N'concurrent',
@retention = 0,
@allow_push = N'true',
@allow_pull = N'true',
@allow_anonymous = N'true',
@enabled_for_internet = N'false',
@snapshot_in_defaultfolder = N'true',
@compress_snapshot = N'false',
@ftp_port = 21,
@ftp_login = N'anonymous',
@allow_subscription_copy = N'false',
@add_to_active_directory = N'false',
-- continuous 和 snapshot,continuous 為預設值
@repl_freq = N'continuous',
@status = N'active',
@independent_agent = N'true',
@immediate_sync = N'true',
@allow_sync_tran = N'false',
@autogen_sync_procs = N'false',
@allow_queued_tran = N'false',
@allow_dts = N'false',
@replicate_ddl = 1,
-- 指出訂閱者是否可以從備份(而不是初始快照集)初始化
@allow_initialize_from_backup = N'false',
@enabled_for_p2p = N'false',
@enabled_for_het_sub = N'false'
GO
-- 執行訂閱初始化
exec sp_addpublication_snapshot
@publication = N'Advworksproducttrans',
@frequency_type = 1,
@frequency_interval = 0,
@frequency_relative_interval = 0,
@frequency_recurrence_factor = 0,
@frequency_subday = 0,
@frequency_subday_interval = 0,
@active_start_time_of_day = 0,
@active_end_time_of_day = 235959,
@active_start_date = 0,
@active_end_date = 0,
@job_login = N'Node1\repl_snapshot',
@job_password = null,
-- 預設使用 Windows 整合驗證連發行者
@publisher_security_mode = 1
-- 將 SQL Login 加入發行集存取清單 (PAL)
exec sp_grant_publication_access @publication = N'Advworksproducttrans', @login = N'sa'
GO
exec sp_grant_publication_access @publication = N'Advworksproducttrans', @login = N'NODE1\Administrator'
GO
exec sp_grant_publication_access @publication = N'Advworksproducttrans', @login = N'NT SERVICE\Winmgmt'
GO
exec sp_grant_publication_access @publication = N'Advworksproducttrans', @login = N'NT SERVICE\SQLWriter'
GO
exec sp_grant_publication_access @publication = N'Advworksproducttrans', @login = N'NT Service\MSSQL$SQL2019'
GO
exec sp_grant_publication_access @publication = N'Advworksproducttrans', @login = N'NT SERVICE\SQLAgent$SQL2019'
GO
exec sp_grant_publication_access
@publication = N'Advworksproducttrans',
@login = N'distributor_admin'
GO
-- 加入交易式發行項
use [AdventureWorks2019]
exec sp_addarticle
@publication = N'Advworksproducttrans',
@article = N'Product',
@source_owner = N'Production',
@source_object = N'Product',
@type = N'logbased',
@description = N'',
@creation_script = N'',
@pre_creation_cmd = N'drop',
@schema_option = 0x000000000803509F,
@identityrangemanagementoption = N'manual',
@destination_table = N'Product',
@destination_owner = N'Production',
@status = 24,
@vertical_partition = N'true',
@ins_cmd = N'CALL [sp_MSins_ProductionProduct]',
@del_cmd = N'CALL [sp_MSdel_ProductionProduct]',
@upd_cmd = N'SCALL [sp_MSupd_ProductionProduct]',
@filter_clause = N'[SafetyStockLevel] < 500'
-- 正在加入發行項的分割區資料行
exec sp_articlecolumn
@publication = N'Advworksproducttrans',
@article = N'Product',
@column = N'ProductID',
@operation = N'add',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'Name', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'ProductNumber', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'MakeFlag', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'FinishedGoodsFlag', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'Color', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'SafetyStockLevel', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'ReorderPoint', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'Size', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'SizeUnitMeasureCode', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'WeightUnitMeasureCode', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'Weight', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'DaysToManufacture', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'ProductLine', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'Class', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'Style', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'ProductSubcategoryID', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'ProductModelID', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'SellStartDate', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'SellEndDate', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'DiscontinuedDate', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'rowguid', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
exec sp_articlecolumn @publication = N'Advworksproducttrans', @article = N'Product', @column = N'ModifiedDate', @operation = N'add', @force_invalidate_snapshot = 1, @force_reinit_subscription = 1
-- 加入發行項篩選
exec sp_articlefilter
@publication = N'Advworksproducttrans',
@article = N'Product',
@filter_name = N'FLTR_Product_1__55',
@filter_clause = N'[SafetyStockLevel] < 500',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1
-- 加入發行項同步處理物件
exec sp_articleview
@publication = N'Advworksproducttrans',
@article = N'Product',
@view_name = N'SYNC_Product_1__55',
@filter_clause = N'[SafetyStockLevel] < 500',
@force_invalidate_snapshot = 1,
@force_reinit_subscription = 1
GO
檢視快照集產生的狀態
將散發代理程式新增至發行集存取清單 (PAL)