星期三, 9月 30, 2020

[Win] 遠端桌面

每次都會忘記如何開啟 Windows Server 遠端桌面,乾脆紀錄一下 

本機伺服器 => 遠端桌面,預設為停止  

[Win] 遠端桌面-1

啟用遠端桌面後,會跳到系統內容的遠端 Tag,開啟 [允許遠端連線到此電腦]

[Win] 遠端桌面-2

勾選  [允許遠端連線到此電腦] 後,會跳出該訊息視窗

[Win] 遠端桌面-3

在遠端 Tag 內,點選 [選取使用者] ,讓使用者具有遠端桌面權限

[Win] 遠端桌面-4

在防火牆進階設定內,也必須開啟 [Winodws 遠端桌面 - 使用者模式 (TCP-In)]

[Win] 遠端桌面-5

勾選 [已啟用] 

[Win] 遠端桌面-6

開啟遠端桌面並在防火牆上允許遠端桌面,這樣就算是完成設定啦

星期三, 9月 23, 2020

[SSMS] 匯入 CSV 檔案

MS SQL 匯入 Excel 檔案時,常常會需要搭配不同的版本的 OLE DB Drvier,甚至會牽扯到 Office 是 32bit 或 64bit 問題,常常搞到焦頭爛額,看線上影片時,才突然開腦洞,就轉成 csv 來處理不就好了,自己也常常寫程式把 ERP 資料匯出 csv 檔案,但在資料庫領域好像就有個莫名堅持,一定要處理 Excel 就是,Orz

SSMS v17.3 開始有 [匯入一般檔案] 可以使用,可以將 csv、txt 檔案匯入,支援以逗號分隔和固定寬度格式

[SSMS] 匯入 CSV 檔案-1

簡介

[SSMS] 匯入 CSV 檔案-2

選擇匯入檔案,假如該 Table 已經存在資料庫內,會出現提醒並無法往下執行

[SSMS] 匯入 CSV 檔案-3

預覽資料,會出現前 50 筆資料

[SSMS] 匯入 CSV 檔案-4

修改資料行,在此編輯欄位資料形態

[SSMS] 匯入 CSV 檔案-5

摘要

[SSMS] 匯入 CSV 檔案-6

結果

[SSMS] 匯入 CSV 檔案-7

星期六, 9月 19, 2020

[SSMS] 編輯前 200 個資料列

在 Line 社群討論時知道的 SSMS 小技巧,因為沒有在使用該功能,也就沒有注意過原來前 N 筆 的 N 竟然是可以更改的

在 Table 上滑鼠右鍵,就可以看見 [編輯前 200 個資料列] 選項

[SSMS] 編輯前200個資料列-1 

   選項 => SQL 物件總管 => 命令 => [編輯前 <n> 個資料列] 命令的值,修改該參數就可以啦

[SSMS] 編輯前200個資料列-2

星期二, 9月 15, 2020

Barcode Reader 異常

公司 Barcode Reader 無法正常讀取條碼,從回報者口中得知原來之前同事處理過,但現在又掛掉,處理方式為下述設定

從裝置管理員內可以找到 USB 連接的 Barcode Reader

Barcode Reader 異常-1

更新驅動程式

Barcode Reader 異常-2

瀏覽電腦上的驅動程式
Barcode Reader 異常-3

讓我從電腦上的可用確定程式清單中挑選
Barcode Reader 異常-4

USB 輸入裝置
 
Barcode Reader 異常-5

解決問題後查到該文章,原來該問題在 201909 有人反應過,解決方式跟上述步驟一樣,但看起來過一段時間設定會跳掉,不知道跟 Windows Update 有沒有關係,持續觀察

星期六, 9月 12, 2020

[Postman] Code

在 Line 社群看到大神分享,才知道 Postman 有產生 Code 功能,但 C# 只有 RestSharp 一個

Postman 畫面右方有一個 Code 選項

Postman-Code-1

裡面有不同語言支援產生呼叫 Code 選項

Postman-Code-2

星期三, 9月 09, 2020

[X.Form] Entry - BorderColor

Entry 搭配 Frame 來讓 Entry 具有 BorderColor 效果,利用 Email 驗證來練習,輸入 Email 格式不正確,BorderColor 就要用紅色表示

Xaml Layout 設計
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:d="http://xamarin.com/schemas/2014/forms/design"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:vw="clr-namespace:EntryDemo.ViewModels"
             mc:Ignorable="d"
             x:Class="EntryDemo.EntryBorderColor">

    <ContentPage.BindingContext>
        <vw:EntryBorderColorViewModel/>
    </ContentPage.BindingContext>

    <ContentPage.Content>
        <Grid Margin="20,20,20,20" ColumnDefinitions="1*,3*" RowDefinitions="100,100">
            <Label Grid.Row="0" Grid.Column="0" Text="請輸入 Email" FontSize="Large" VerticalOptions="CenterAndExpand"/>
            <Frame Grid.Row="0" Grid.Column="1" BorderColor="{Binding EmailBoardColor, Mode=TwoWay}" CornerRadius="10">
                <Entry FontSize="Large" Text="{Binding Email, Mode=TwoWay}"/>
            </Frame>
            <Label Grid.Row="1" Grid.Column="1" Text="{Binding EmailErrorMessage}" FontSize="Large" TextColor="Red" HorizontalOptions="End"/>
        </Grid>
    </ContentPage.Content>
</ContentPage>
ViewModel.cs 內容
using System.ComponentModel;
using System.Drawing;
using EntryDemo.Extension;

namespace EntryDemo.ViewModels
{
    public class EntryBorderColorViewModel : INotifyPropertyChanged
    {
        #region Email 相關

        private readonly Color entryBoardDefaultColor = Color.Transparent;

        public EntryBorderColorViewModel()
        {
            EmailBoardColor = entryBoardDefaultColor;
        }

        private string _email;
        public string Email
        {
            get { return _email; }
            set
            {

                bool isValidEmail = value.IsValidEmail(out string errorMessage);
                if (isValidEmail)
                {
                    EmailBoardColor = entryBoardDefaultColor;
                    EmailErrorMessage = string.Empty;
                }
                else
                {
                    EmailBoardColor = Color.Red;
                    EmailErrorMessage = errorMessage;
                }

                _email = value;
                OnPropertyChanged(nameof(this.Email));
            }
        }

        private Color _emailBoardColor;
        public Color EmailBoardColor
        {
            get { return _emailBoardColor; }
            set
            {
                _emailBoardColor = value;
                OnPropertyChanged(nameof(this.EmailBoardColor));
            }
        }

        private string _emailErrorMessage;
        public string EmailErrorMessage
        {
            get { return _emailErrorMessage; }
            set
            {
                _emailErrorMessage = value;
                OnPropertyChanged(nameof(this.EmailErrorMessage));
            }
        }
        #endregion

        #region INotifyPropertyChanged
        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        #endregion
    }
}
Email 驗證
using System;
using System.Text.RegularExpressions;

namespace EntryDemo.Extension
{
    public static class StringExtension
    {
        /// <summary>
        /// 確認字串是否為有效的電子郵件格式
        /// </summary>
        /// <param name="email">Email</param>
        /// <returns>是否為有效的電子郵件格式</returns>
        public static bool IsValidEmail(this string value, out string errorMessage)
        {
            if (string.IsNullOrWhiteSpace(value))
            {
                errorMessage = $"{nameof(IsValidEmail)} 參數為 null 或空值,無法判斷 Email 格式";
                return false;
            }

            try
            {
                // 規則運算式只會驗證最上層網域名稱是否包含介於 2 到 24 個英數 ASCII 字元,且第一個和最後一個為英數字元,而其餘字元為英數字元或連字號 (-)。
                bool valid = Regex.IsMatch(value,
                    @"^(?("")("".+?(?<!\\)""@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))" +
                    @"(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-0-9a-z]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$",
                    RegexOptions.IgnoreCase,
                    TimeSpan.FromMilliseconds(250));

                errorMessage = valid ? string.Empty : "Email 格式不正確";
                return valid;
            }
            catch (RegexMatchTimeoutException)
            {
                errorMessage = $"{nameof(IsValidEmail)} 判斷 Email 格式 timeout";
                return false;
            }
        }
    }
}
Email 格式異常
 
[X.Form] Entry - BorderColor-1

Email 格式正確

[X.Form] Entry - BorderColor-2