2022年7月21日 星期四

MS-SQL 格式化匯入和匯出資料的檔案 (SQL Server)

 參考來源:格式化匯入和匯出資料的檔案 (SQL Server)

---

*建立格式檔案*


建立非 XML 格式檔案

bcp TestDatabase.dbo.myFirstImport format nul -c -f D:\BCP\myFirstImport.fmt -t, -T


建立 XML 格式檔案

bcp TestDatabase.dbo.myFirstImport format nul -c -x -f D:\BCP\myFirstImport.xml -t, -T



*使用格式檔案大量匯入資料*


使用 bcp 和非 XML 格式檔案

REM Truncate table (for testing)

SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.MyFirstImport;"


REM Import data

bcp TestDatabase.dbo.myFirstImport IN D:\BCP\myFirstImport.bcp -f D:\BCP\myFirstImport.fmt -T


REM Review results

SQLCMD -Q "SELECT * FROM TestDatabase.dbo.MyFirstImport"



使用 bcp 和 XML 格式檔案

REM Truncate table (for testing)

SQLCMD -Q "TRUNCATE TABLE TestDatabase.dbo.MyFirstImport;"


REM Import data

bcp TestDatabase.dbo.myFirstImport IN D:\BCP\myFirstImport.bcp -f D:\BCP\myFirstImport.xml -T


REM Review results

SQLCMD -Q "SELECT * FROM TestDatabase.dbo.MyFirstImport;"


MS-SQL 觀察目前Update及Scan比例和壓縮

 觀察目前Update及Scan比例:

SELECT

    o.name AS [Table_Name]

    ,x.name AS [Index_Name]

    ,i.partition_number AS [Partition]

    ,i.index_id AS [Index_ID]

    ,x.type_desc AS [Index_Type]

    ,i.leaf_update_count * 100.0 /

    (i.range_scan_count + i.leaf_insert_count

    + i.leaf_delete_count + i.leaf_update_count

    + i.leaf_page_merge_count + i.singleton_lookup_count

    ) AS [Percent_Update]

    ,i.range_scan_count * 100.0 /

    (i.range_scan_count + i.leaf_insert_count

    + i.leaf_delete_count + i.leaf_update_count

    + i.leaf_page_merge_count + i.singleton_lookup_count

    ) AS [Percent_Scan]

FROM sys.dm_db_index_operational_stats(DB_ID(), NULL, NULL, NULL) i

JOIN sys.objects o

    ON o.object_id = i.object_id

JOIN sys.indexes x

    ON x.object_id = i.object_id

         AND x.index_id = i.index_id

WHERE (i.range_scan_count + i.leaf_insert_count

+ i.leaf_delete_count + leaf_update_count

+ i.leaf_page_merge_count + i.singleton_lookup_count) != 0

AND OBJECTPROPERTY(i.object_id, 'IsUserTable') = 1

ORDER BY [Percent_Update] ASC




壓縮語法:

語法也很簡單,可以針對資料表或索引分別啟用壓縮:


資料表

ALTER TABLE TableName REBUILD PARTITION = ALL

WITH (DATA_COMPRESSION = PAGE)


索引

ALTER INDEX IndexName ON TableName REBUILD PARTITION = ALL 

   WITH (DATA_COMPRESSION = PAGE)


2022年7月19日 星期二

Usando ListView com uma base de dados (語言開發和教學)

 Usando ListView com uma base de dados

===

網站有提供範例下載

該網站有非常的多語言開發和教學

想要大增功力必學   網站位置


Listview to datatable

 參考來源

---


1.

DataTable dtZeitplan = new DataTable();

foreach (ColumnHeader chZeitplan in lvZeitplan.Columns)

{

    dtZeitplan.Columns.Add(chZeitplan.Text);

}

foreach (ListViewItem item in lvZeitplan.Items)

{

    DataRow row = dtZeitplan.NewRow();

    for(int i = 0; i < item.SubItems.Count; i++)

    {

        row[i] = item.SubItems[i].Text;

    }

    dtZeitplan.Rows.Add(row);

}



2.

if (listView1.Items.Count > 0)

{

       dt.Columns.Add();

       foreach (ListViewItem.ListViewSubItem lvsi in listView1.Items[0].SubItems)

              dt.Columns.Add();

       //now we have all the columns that we need, let's add rows

       foreach (ListViewItem item in listView1.Items)

       {

              List<string> row = new List<string>();

              row.Add(item.ToString());

              foreach (var it in item.SubItems)

                   row.Add(it.ToString());

              //Add the row into the DataTable

              dt.Rows.Add(row.ToArray());

       }

}


3.

DataTable table = new DataTable();


            table.Columns.Add("MODUL", typeof(string));

            table.Columns.Add("ACIKLAMA", typeof(string));

            table.Columns.Add("UZUNLUK", typeof(string));

            table.Columns.Add("GENISLIK", typeof(string));

            table.Columns.Add("MIKTAR", typeof(string));


            for (int i = 0; i < listView2.Items.Count; i++)

            {

                table.Rows.Add(listView2.Items[i].SubItems[1].Text, listView2.Items[i].SubItems[2].Text, listView2.Items[i].SubItems[3].Text, listView2.Items[i].SubItems[4].Text, listView2.Items[i].SubItems[5].Text);

            }


4.

DataView theDataView = (DataView)theListView.ItemsSource;

DataTable theDataTable = theDataView.Table;


5.

 Dim it As Integer = 0

        Dim dt As New DataTable

        For it = 0 To LVActions.Items(0).SubItems.Count ‑ 1

            Dim DCOL As New DataColumn(LVActions.Columns(it).Text)

            dt.Columns.Add(DCOL)

        Next

        For it = 0 To LVActions.Items.Count ‑ 1

            Dim DROW As DataRow = dt.NewRow

            For j As Integer = 0 To LVActions.Items(it).SubItems.Count ‑ 1

                DROW(LVActions.Columns(j).Text) = LVActions.Items(it).SubItems(j).Text

            Next

            dt.Rows.Add(DROW)

        Next


HOW TO CONVERT OF LISTVIEW TO DATATABLE IN VB.NET

參考來源

---

 Public for Function CONVRSION_LISTVIEW_TO_DATATABLE(ByVal LS_VIEW As ListView) As DataTable

'LS_VIEW.Items.Clear()

Dim DT_TAB As New DataTable

If LS_VIEW.Items.Count < 1 Then

Return DT_TAB

Else

For i As Integer = 0 To LS_VIEW.Items(0).SubItems.Count - 1

Dim DCOL As New DataColumn(LS_VIEW.Columns(i).Text)

DT_TAB.Columns.Add(DCOL)

Next

End If

For i As Integer = 0 To LS_VIEW.Items.Count - 1

Dim DROW As DataRow = DT_TAB.NewRow

For j As Integer = 0 To LS_VIEW.Items(i).SubItems.Count - 1

DROW(LS_VIEW.Columns(j).Text) = LS_VIEW.Items(i).SubItems(j).Text

Next

DT_TAB.Rows.Add(DROW)

Next

Return DT_TAB

End Function

HOW TO FILL UP A LISTVIEW FROM DATABASE IN VB.NET USING A DATATABLE

 參考網址

--


Sub FillListViewByTable(ByVal listView As ListView, ByVal dt As DataTable)

        Dim ii As Integer

        Dim iColCount As Integer = dt.Columns.Count

        Dim iRowCount As Integer = dt.Rows.Count

        listView.Clear()

        For ii = 0 To iColCount – 1

            listView.Columns.Add(dt.Columns(ii).ColumnName, 250, HorizontalAlignment.Left)

          

        Next

   

        Dim i As Integer

        Dim x As Integer

        For i = 0 To iRowCount – 1  ‘ for each row in the table

            Dim lst As New ListViewItem

            lst.Text = dt.Rows(i).Item(0)

            lst.UseItemStyleForSubItems = True

            For x = 1 To iColCount – 1 ‘ for each column in the row of the table

                Application.DoEvents()

                lst.SubItems.Add(SNZ(dt.Rows(i).Item(x)))

             

            Next


               Application.DoEvents()

           ‘    If you want to display the progress then you can do it here

           ‘ myStatusLabel.text = “Displaying Record ” & i + 1 & “/” & iRowCount

            listView.Items.Add(lst)

            lst = Nothing

        Next

    

    End Sub

Crear y LLenar DataTable y Transferir Datos a Listview

 參考來源(不錯的網站)

----


Crear y LLenar DataTable y Transferir Datos a Listview

    Public Sub AGREGAR(ByVal Archivo_ As String, ByVal URL_ As String, ByVal Destino_ As String)


        Dim dt As New DataTable()

        dt.Columns.Add("Archivo")

        dt.Columns.Add("URL")

        dt.Columns.Add("Destino")

        Dim row As DataRow = dt.NewRow()

        row("Archivo") = Archivo_

        row("URL") = URL_

        row("Destino") = Destino_

        dt.Rows.Add(row)


        Dim lvItem As ListViewItem

        For y = 0 To dt.Rows.Count - 1

            lvItem = ListView1.Items.Add(dt.Rows(y)(0))

            'FILA DESCRIPCIÓN

            lvItem.SubItems.Add(dt.Rows(y)(1))

            lvItem.SubItems.Add(dt.Rows(y)(2))

        Next

    End Sub

Bind ListView to DataTable

 Bind ListView to DataTable


T-SQL:


    CREATE PROCEDURE GetMembers


    AS

    SET NOCOUNT ON

    SELECT

        FirstName,

        LastName,

        NickName,

        FavoriteLanguage

    FROM

        Members


VB.NET


Private Function GetMembers() As DataTable

    Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)

    Dim command As SqlCommand = connection.CreateCommand

    command.CommandText = "GetMembers"

    command.CommandType = Data.CommandType.StoredProcedure

 

    Dim table As New DataTable

    connection.Open()

    table.Load(command.ExecuteReader(Data.CommandBehavior.CloseConnection))

 

    Return table

End Function


Protected Sub Page_Load(ByVal sender As Object, _

    ByVal e As System.EventArgs) Handles Me.Load

    Me.ListView1.DataSource = GetMembers()

    Me.ListView1.DataBind()

End Sub

Bind Listview from dataset

 Dim constr As String = "Put your connection string here"

        Dim ds As New DataSet

        Dim con As New SqlClient.SqlConnection(constr)

        con.Open()

        Dim sqladap As New SqlClient.SqlDataAdapter("select * from tbl_Employee", con)

        sqladap.Fill(ds)

 

        For i As Integer = 0 To ds.Tables(0).Columns.Count - 1

            ListView1.Columns.Add(ds.Tables(0).Columns(i).ToString())

        Next

        For i As Integer = 0 To ds.Tables(0).Rows.Count - 1

            Dim listRow As New ListViewItem

            listRow.Text = ds.Tables(0).Rows(i)(0).ToString()

            For j As Integer = 1 To ds.Tables(0).Columns.Count - 1

                listRow.SubItems.Add(ds.Tables(0).Rows(i)(j).ToString())

            Next

            ListView1.Items.Add(listRow)

        Next

VB.NET NPOI读取EXCEL数据到DataTable

引用來源


 Imports NPOI.HSSF.UserModel

Imports NPOI.SS.UserModel

Imports NPOI.XSSF.UserModel    

 

    ''' <summary>

    ''' 获取EXCEL表格真正的值

    ''' </summary>

    ''' <param name="cell"></param>

    ''' <returns>不同的类型处理后的值</returns>

    ''' <remarks></remarks>

    Private Shared Function GetCellValue(cell As ICell) As String

        If cell Is Nothing Then

            Return String.Empty

        End If

        Select Case cell.CellType

            Case CellType.Blank

                '空数据类型 这里类型注意一下,不同版本NPOI大小写可能不一样,有的版本是Blank(首字母大写)

                Return String.Empty

            Case CellType.[Boolean]

                'bool类型

                Return cell.BooleanCellValue.ToString()

            Case CellType.[Error]

                Return cell.ErrorCellValue.ToString()

            Case CellType.Numeric

                '数字类型

                If HSSFDateUtil.IsCellDateFormatted(cell) Then

                    '日期类型

                    Return cell.DateCellValue.ToString()

                Else

                    '其它数字

                    Return cell.NumericCellValue.ToString()

                End If

            Case CellType.Unknown

                '无法识别类型

                '默认类型

                Return cell.ToString()

                '

            Case CellType.[String]

                'string 类型

                Return cell.StringCellValue

            Case CellType.Formula

                '带公式类型

                Try

                    Dim e As New HSSFFormulaEvaluator(cell.Sheet.Workbook)

                    e.EvaluateInCell(cell)

                    Return cell.ToString()

                Catch

                    Return cell.NumericCellValue.ToString()

                End Try

        End Select

    End Function

 

 

 

    ''' <summary>

    ''' 获取excel内容

    ''' </summary>

    ''' <param name="filePath">excel文件路径</param>

    ''' <returns></returns>

    Public Shared Function ImportExcel(filePath As String) As DataTable

        Dim dt As New DataTable()

        Using fsRead As FileStream = System.IO.File.OpenRead(filePath)

            Dim wk As IWorkbook = Nothing

            '获取后缀名

            Dim extension As String = filePath.Substring(filePath.LastIndexOf(".")).ToString().ToLower()

            '判断是否是excel文件

            If extension = ".xlsx" OrElse extension = ".xls" Then

                '判断excel的版本

                If extension = ".xlsx" Then

                    wk = New XSSFWorkbook(fsRead)

                Else

                    wk = New HSSFWorkbook(fsRead)

                End If

 

                '获取第一个sheet

                Dim sheet As ISheet = wk.GetSheetAt(0)

                '获取第一行

                Dim headrow As IRow = sheet.GetRow(0)

                '创建列

                For i As Integer = headrow.FirstCellNum To headrow.Cells.Count - 1

                    Dim datacolum = New DataColumn(headrow.GetCell(i).StringCellValue)

                    'Dim datacolum As New DataColumn("F" + CStr(i + 1))

                    dt.Columns.Add(datacolum)

                Next

                '读取每行,从第二行起

                For r As Integer = 1 To sheet.LastRowNum

                    Dim result As Boolean = False

                    Dim dr As DataRow = dt.NewRow()

                    '获取当前行

                    Dim row As IRow = sheet.GetRow(r)

                    '读取每列

                    For j As Integer = 0 To row.Cells.Count - 1

                        Dim cell As ICell = row.GetCell(j)

                        '一个单元格

                        dr(j) = GetCellValue(cell)

                        '获取单元格的值

                        '全为空则不取

                        If dr(j).ToString() <> "" Then

                            result = True

                        End If

                    Next

                    If result = True Then

                        '把每行追加到DataTable

                        dt.Rows.Add(dr)

                    End If

                Next

            End If

        End Using

        Return dt

    End Function

 

    REM 调用

    Dim 文件名 = "abc.xlsx"

    Dim dt As New DataTable()

    If File.Exists(文件名) Then

        dt = ImportExcel(文件名)

        Grid显示框.DataSource = dt

    Else

        MsgBox(文件名 & "  不存在,请检查!!", MsgBoxStyle.Critical)

    End If

EPPlus —— 輕鬆處理 Excel

 https://igouist.github.io/post/2020/04/epplus/


2022年7月17日 星期日

指定的連接埠名稱不是以 COM/com 開頭

 Windows7 無法使用SerialPort控制項

---

可以試試看在裝置管理員中把你COM1停用,之後啟用,然後測試你的程式看看,滿久之前在某些電腦有遇過這種怪情形


-----------

SerialPort.GetPortNames 方法

指定的連接埠名稱不是以 COM/com 開頭

HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM


未指定從 GetPortNames 傳回的埠名稱順序。


GetPortNames使用 方法來查詢目前電腦是否有有效的序列埠名稱清單。 例如,您可以使用這個方法來判斷 COM1 和 COM2 是否為目前電腦的有效序列埠。


埠名稱是從系統登錄 (取得,例如HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM)。 如果登錄包含過時或不正確的資料,則 GetPortNames 方法會傳回不正確的資料。


MSSQL 資料表鎖住

 可以利用 dbcc opentran查看一下是否有交易還沒結束,若有可能也會導致lock


後續可再用 dbcc inputbuffer(id) 查看是何種語法導致


最後再用kill id 殺掉該程序


註:id即為 dbcc opentran回傳值


MS-SQL Disable AUTO SHRINK

 MS-SQL Disable AUTO SHRINK


--Set Auto Shrink ON or True

ALTER DATABASE TechYaz SET AUTO_SHRINK ON

--Set Auto Shrink OFF or False

ALTER DATABASE TechYaz SET AUTO_SHRINK OFF

2022年7月14日 星期四

KTV計費管理

 最近1-2個月一連3-4通電話,都是KTV打來須要計費管理軟體

無奈阿,我就沒寫~
有寫都是複合式的

非專用款的包廂+點餐+計時+計費

在幾年前曾寫了一個範本"多計時器"結果找不到放哪了

今天花了一些時間,重寫了一個多計時器引擎

有空來專寫一套"KTV包廂計時計費"管理軟體 

當然寫一定是寫網路版




2022年7月12日 星期二

MS-SQL 查詢執行過的語法

 MS-SQL 查詢執行過的語法


SELECT

QS.creation_time,

ST.text

FROM

sys.dm_exec_query_stats QS

CROSS APPLY

sys.dm_exec_sql_text(QS.sql_handle) ST

where QS.creation_time between '2017-11-17 10:23:01.500' and '2017-11-17 23:23:01.500'

ORDER BY

QS.creation_time DESC

MS-SQL 相容性層級

 

MS-SQL 相容性層級:

SQL Server 2008 (100)

SQL Server 2019 (150)


指令查詢目前所有資料庫的相容性層級版本:

SELECT name 'DB', compatibility_level FROM sys.databases


查詢SQLSERVER執行過的SQL記錄

 僅支援SQL SERVER2008及以上版本

SELECT TOP 1000
–建立時間
QS.creation_time,
–查詢語句
SUBSTRING(ST.text,(QS.statement_start_offset/2)+1,
((CASE QS.statement_end_offset WHEN -1 THEN DATALENGTH(st.text)
ELSE QS.statement_end_offset END - QS.statement_start_offset)/2) + 1
) AS statement_text,
–執行文字
ST.text,
–執行計劃
QS.total_worker_time,
QS.last_worker_time,
QS.max_worker_time,
QS.min_worker_time
FROM
sys.dm_exec_query_stats QS
–關鍵字
CROSS APPLY
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE
QS.creation_time BETWEEN ‘2018-05-08 09:00:00’ AND ‘2018-05-08 18:00:00’
–AND ST.text LIKE ‘%%’
ORDER BY
QS.creation_time DESC

SELECT TOP 1000
–建立時間
QS.creation_time,
–執行文字
ST.text
FROM
sys.dm_exec_query_stats QS
–關鍵字
CROSS APPLY
sys.dm_exec_sql_text(QS.sql_handle) ST
WHERE
QS.creation_time BETWEEN ‘2018-05-08 09:00:00’ AND ‘2018-05-08 18:00:00’
AND ST.text NOT LIKE ‘%SELECT * FROM T_LOCATIONINFO WHERE STRCLIPLOGICID in(%’
ORDER BY
QS.creation_time DESC

2022年7月11日 星期一

MS-SQL帳號只開放SELECT功能

 MS-SQL帳號只開放SELECT功能

db_datareader

db_denydataeader

--------------------

當無法刪除,必須先把帳號權限移轉

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA

--alter authorization on schema::[db_datareader] To [dbo]

--alter authorization on schema::[db_denydatareader] To [dbo]

--alter authorization on schema::[db_denydatawriter] To [dbo]


---------------------






2022年7月6日 星期三

在今年多雨的氣候,草總是特別長很快

 草又長大了,割草日

就拍拍照,和看看前些日子才網購買了櫛瓜種子;播種了10顆,共9顆發芽長出來了

在都市上班快30年了,現在每日最期待的就是假日農夫日了

拋開上班的壓力.沉澱自己.放空,不要再錢.工作的煩事...

當然這塊阿爸留下來的田地,我也是在為自己鋪路;未來退休後的農事運動休閒