2014年12月11日 星期四

VBNET 自然憑證簡易驗證


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a As String = "AB01234567891234"
        MessageBox.Show(chk_card(a))
    End Sub

    Public Overloads Function chk_card(ByVal card_code As String) As Boolean
        Dim chk_yn As Boolean = False
        Try
            Dim str_g As String = ""
            Dim y As Integer = 0
            For i As Integer = 1 To 16
                str_g = Mid(card_code, i, 1)
                Select Case i
                    Case 1 To 2
                        If Asc(str_g) > 90 Or Asc(str_g) < 65 Then
                            y = 1
                            Exit For
                        End If
                    Case 3 To 16
                        If Asc(str_g) > 57 Or Asc(str_g) < 48 Then
                            y = 1
                            Exit For
                        End If
                End Select
            Next
            If y = 0 Then
                chk_yn = True
            End If
            Return chk_yn
        Catch ex As Exception
            Return chk_yn
        End Try
    End Function

2014年12月4日 星期四

DataTable 轉換成 CSV 與 CSV 轉換成 DataTable

參考引用來源
--

DataTable 轉成 CSV 檔函式程式碼如下:
public void CreateCSVFile(DataTable dt, string strFilePath) // strFilePath 為輸出檔案路徑 (含檔名)
{
    StreamWriter sw = new StreamWriter(strFilePath, false);

    int intColCount = dt.Columns.Count;

    if (dt.Columns.Count > 0)
        sw.Write(dt.Columns[0]);
    for (int i = 1; i < dt.Columns.Count; i++)
        sw.Write("," + dt.Columns[i]);

    sw.Write(sw.NewLine);
    foreach (DataRow dr in dt.Rows)
    {
        if (dt.Columns.Count > 0 && !Convert.IsDBNull(dr[0]))
            sw.Write(Encode(Convert.ToString(dr[0])));
        for (int i = 1; i < intColCount; i++)
            sw.Write("," + Encode(Convert.ToString(dr[i])));
        sw.Write(sw.NewLine);
    }
    sw.Close();
}

public string Encode(string strEnc)
{
    return System.Web.HttpUtility.UrlEncode(strEnc);
}



讀取 CSV 轉成 DataTable 函式程式碼如下:
public DataTable ReadCSVFile(string strFilePath, string strFileName) // strFilePath 為檔案所在資料夾,strFileName 為檔案名稱
{
    OleDbConnection connection = new OleDbConnection(string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}; Extended Properties=""text;HDR=Yes;FMT=Delimited"";", strFilePath));
    OleDbCommand command = new OleDbCommand("SELECT * FROM " + strFileName, connection);
    OleDbDataAdapter adapter = new OleDbDataAdapter(command);
    DataTable dt = new DataTable();

    adapter.Fill(dt);

    return dt;
}

2014年11月27日 星期四

MSSQL 修改欄位名稱和資料型態


若要更改某個table內的某一個欄位的型態

For example:
A1 varchar(10)  ---->  A1 varchar(20)
A2 tinyint   ----->   B2 int
第一個只改變欄位的長度或是型態
第二個改變名稱或是改變名稱與型態

解法如下:
以下說明,以 SQL Server 2008 為主:
關於第一個問題,可以使用 ALTER TABLE 陳述式:
CREATE TABLE 我的資料表 (欄位A varchar(10));
GO
ALTER TABLE 我的資料表 ALTER COLUMN 欄位A nvarchar(25) NOT NULL;
GO
ALTER TABLE 我的資料表 ALTER COLUMN 欄位A varchar(50) NULL;
GO

若僅是更改欄位名稱,請使用 sp_rename 這個預存程序,如下所示即是一例:
EXEC sp_rename '我的資料表.欄位A', '新欄位', 'COLUMN';
GO

若要更改欄位名稱與型態,就需要分成兩道指令來進行,比方說:先使用一道指令來更改欄位名稱,然後再使用第二道指令來更改欄位型態

For example:
EXEC sp_rename '我的資料表.欄位A', '新欄位', 'COLUMN';
ALTER TABLE 我的資料表 ALTER COLUMN 新欄位 nvarchar(50) NULL;
GO
刪除這個資料表:
DROP TABLE 我的資料表;
GO

2014年10月17日 星期五

vbnet form icon from ImageList

Me.Icon = System.Drawing.Icon.FromHandle(CType(ImageList1.Images(x), System.Drawing.Bitmap).GetHicon())

2014年10月16日 星期四

2014年10月15日 星期三

vbnet 距自動執行時間


常常寫到自動執行的時間判斷,底下截取片段出來記錄一下
---
Dim dt_now As DateTime = Now.ToString("yyyy/MM/dd HH:mm:ss") '現在時間
Dim dt_tmpa As New DateTime  ' 定義的時間
 
 TSSLabauto.Text = "距自動執行時間:" + _
 (DateDiff(DateInterval.Hour, dt_now, dt_tmpa) Mod 24).ToString + "時" + _
 (DateDiff(DateInterval.Minute, dt_now, dt_tmpa) Mod 60).ToString + "分"

2014年10月3日 星期五

XmlWriter 類別

請參考MSDN:XmlWriter 類別
--
底下的這個用法,相對應 電子發票XML 格式寫法的輸出

Dim settings As New XmlWriterSettings()
settings.Indent = True
settings.NewLineOnAttributes = True
Dim writer As XmlWriter = XmlWriter.Create("books.xml", settings)

XML檔案基本操作-XmlDocument

請參考來源
--

Write XML

參考引用來源
--
 Sub Main()

      Dim oXML As Xml.XmlDocument
      Dim oNodes As Xml.XmlNode
      Dim oNode As Xml.XmlNode
      Dim sFilename As String = "D:\Junk\foo.xml"

      oXML = New Xml.XmlDocument
      oXML.Load(sFilename)

      oNodes = oXML.DocumentElement

      oNode = oNodes.ChildNodes(0)
      oNode.Item("s1").InnerText = "Pink Floyd"
      oNode.Item("s2").InnerText = "Dark Side of the Moon"
      oNode.Item("s3").InnerText = "1973"

      oNode = oNodes.ChildNodes(1)
      oNode.Item("s1").InnerText = "Deep Purple"
      oNode.Item("s2").InnerText = "Stormbringer"
      oNode.Item("s3").InnerText = "1974"

      oXML.Save(sFilename)

   End Sub

vbnet 範例教學

VB.net 網站教學(國外)
--

2014年9月29日 星期一

古代的"一升""一合"是多少?

參考引用來源:古代的"一升""一合"是多少?
--
十合为一升, 一合就是一百毫升。(2)医学上:一升为十合,每合重150克。
一斗为十升,每升约重1.5公斤;一升为十合,每合重150克;一合为十勺,每勺重15克

2014年9月25日 星期四

2014年9月24日 星期三

金湧ERP系統(網路版)



---
即日起系統所有功能全部開放,讓您免費測試使用至2015/5/31止!
測試使用期間有問題,歡迎來信來電告知;謝謝!!
測試滿意,歡迎您電洽詢註冊相關事宜!!

■金湧 ERP 系統,目前支援各行業別{持續增加中}■
1.進銷存系統(多店/網路版)
2.設備租借系統[契約月租制](多店/網路版)
3.POS零售系統(多店/網路版)
4.蔬果冷凍批發系統(多店/網路版)
5.設備租借系統[庫存管理型](多店/網路版)

★多元化特色★
1.支援條碼機列印
2.支援商品條碼本製作
3.支援匯出匯入 MS-Office Excel 2003.2007.2010 均可以,OpenOffice Calc
4.人性化操作,簡化重覆性操作
5.多門市系統
6.支援任何品牌盤點機資料匯入

下載:金湧ERP系統(網路版)

2014年9月5日 星期五

vbnet 刪除目錄下所有檔案


Public Shared Sub DeleteDir(ByVal aimPath As String)
    Try
        If (Not Directory.Exists(aimPath)) Then Exit Sub
        Dim fileList() As String = Directory.GetFileSystemEntries(aimPath)
        For Each FileName As String In fileList
        If (Directory.Exists(FileName)) Then
           DeleteDir(aimPath + Path.GetFileName(FileName))
        Else
        File.Delete(aimPath + Path.GetFileName(FileName))
        End If
        Next
        Catch ex As Exception
        MessageBox.Show(ex.ToString())
    End Try
End Sub

2014年9月4日 星期四

how to print barcodes in your visual basic

請參考來源
--
裡面有各檢查碼的函數

Crystal Report X1 動態存取相片檔

參考引用來源
--

想要尋找在 crystal report 8.5 中動態秀相片檔的方法,可是一直試不出來,不過在測試中卻發現在 crystal report X1 版,有提供這個功能,方法如下:

1.插入圖片,調整好大小
2.點右鍵,選取 [圖片格式設定]
3.點選 [圖片] , 編輯 [公式] 如下圖


4.將圖片路徑打入公式, [儲存並關閉]


5.這樣在 X1 版,就可以使用動態相片檔了
6.至於本來想在行政系統使用,只有等待升級,不難需要時只好借用 X1 版,或是那天有找到使用 8.5 版的方法

RS-232版本的電子錢櫃 打開指令

參考引用來源
---
一般傳統型的錢櫃都是全鋼材製造 ,重量大約在10公斤左右。大碩科技製造的PCD-425錢櫃帶有兩種可選擇的線圈: 24V(常規RJ-11),或是12V(RS-232)。  其中24V線圈主要是用在標籤印表機的橋接,因市面上的票據打印機多會提供一個RJ-11 4P4C的錢櫃接口,而印表機本身帶電通常都是24V的緣故。


12V版本的線圈主要用在RS-232版本,本錢櫃的RS-232接頭上有個DC-IN的小圓孔,能插上市面常見的12V的電源變壓器,另外RS-232上的第九支腳也能通電 (VCC +12V),所以亦可不需外接電源, 直接插上有供12V電壓的POS系統之COM Port即可正常工作。

RS-232版本的電子錢櫃的運作原理極為簡單, 只要送出任何訊號至COM Port, (如簡單的DOS命令: COPY/TYPE XXX COM1)即能開啟錢櫃。RJ-11版本(印表機橋接式)的就稍微複雜點,但較安全,須透過軟體送指令給印表機再由印表機發出開抽屜的命令:
QBASIC簡例: "PRINT #1,CHR$(&H1B);"p";CHR$(0);CHR$(100);CHR$(250);"
市面上大多數的標籤印表機的驅動軟體都已支援上述打開錢櫃的功能,所以也可以經由 "WINDOWS\控制台\印表機內容\進階選項" 那裡做設定。


較高階一些的錢櫃應用上需要用到"Micro Switch" (開關感測器), 主要是讓POS系統上的應用軟體偵測錢櫃的狀態是開或關,使用ESC/POS指令範例如下:
PRINT #1, CHR$(&1HB);"u";CHR$(0);
INPUT #1, DRAWER_STAT
注意: PCD-425基本版不內建Micro Switch, 如有需要下單時需另行註明。

2014年9月2日 星期二

mssql C:\Users\user\AppData\Local\Microsoft_Corporation\ user.config 解決方式

參考來源
--
Rename the user.config file located at C:\Users\[USER_NAME]\AppData\Local\Microsoft_Corporation\LandingPage.exe_StrongName_ryspccglaxmt4nhllj5z3thycltsvyyx\10.0.0.0 TO USER.CONFIG.BAK

2014年8月30日 星期六

VB.NET Crystal Reports Load Dynamically for mssql login

參考引用來源:VB.NET Crystal Reports Load Dynamically
---
使用 crystal report 設計階段階沒問題! 但電腦關機後,再次使用時;卻出現須要登入的問題
底下的範例即可解決!

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        Dim cryRpt As New ReportDocument
        Dim crtableLogoninfos As New TableLogOnInfos
        Dim crtableLogoninfo As New TableLogOnInfo
        Dim crConnectionInfo As New ConnectionInfo
        Dim CrTables As Tables
        Dim CrTable As Table

        cryRpt.Load("PUT CRYSTAL REPORT PATH HERE\CrystalReport1.rpt")

        With crConnectionInfo
            .ServerName = "YOUR SERVER NAME"
            .DatabaseName = "YOUR DATABASE NAME"
            .UserID = "YOUR DATABASE USERNAME"
            .Password = "YOUR DATABASE PASSWORD"
        End With

        CrTables = cryRpt.Database.Tables
        For Each CrTable In CrTables
            crtableLogoninfo = CrTable.LogOnInfo
            crtableLogoninfo.ConnectionInfo = crConnectionInfo
            CrTable.ApplyLogOnInfo(crtableLogoninfo)
        Next

        CrystalReportViewer1.ReportSource = cryRpt
        CrystalReportViewer1.Refresh()
    End Sub
End Class

2014年8月25日 星期一

VB.NET Crystal Reports for Beginners (mssql )

請參考來源:VB.NET Crystal Reports for Beginners
--

Crystal Reports Without Database

請參考來源:Crystal Reports Without Database
--
基本的 datatable 用法

Crystal Reports - 設計 Master / Detail 報表

請參考來源:Crystal Reports - 設計 Master / Detail 報表
--

VB.Net crystal report connection string

參考引用來源:VB.Net crystal report connection string
--
 Private Sub CrystalReportViewer1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CrystalReportViewer1.Load
        SetReportDb(My.Settings.colorlabConnectionString, CrystalReportViewer1, rpt_inwardreport1)
    End Sub



Public Sub SetReportDb(ByVal ConnectionString As String, ByRef CrystalReportViewer As CrystalDecisions.Windows.Forms.CrystalReportViewer, ByRef reportDocument As ReportClass)
        'Get SQL Server Details
        Dim builder As New System.Data.Common.DbConnectionStringBuilder()

        builder.ConnectionString = ConnectionString


        Dim zServer As String = TryCast(builder("Data Source"), String)
        Dim zDatabase As String = TryCast(builder("Initial Catalog"), String)
        Dim zUsername As String = TryCast(builder("User ID"), String)
        Dim zPassword As String = TryCast(builder("Password"), String)

        Dim ciReportConnection As New ConnectionInfo

        ciReportConnection.ServerName = zServer
        ciReportConnection.DatabaseName = zDatabase
        ciReportConnection.UserID = zUsername
        ciReportConnection.Password = zPassword

        'Assign data source details to tables

        For Each table As Table In reportDocument.Database.Tables
            table.LogOnInfo.ConnectionInfo = ciReportConnection
            table.ApplyLogOnInfo(table.LogOnInfo)
        Next

        For Each subrep As ReportDocument In reportDocument.Subreports
            For Each table As Table In subrep.Database.Tables
                table.LogOnInfo.ConnectionInfo = ciReportConnection
                table.ApplyLogOnInfo(table.LogOnInfo)
            Next
        Next

        'Assign data source details to the report viewer
        If CrystalReportViewer.LogOnInfo IsNot Nothing Then
            Dim tlInfo As TableLogOnInfos = CrystalReportViewer.LogOnInfo
            For Each tbloginfo As TableLogOnInfo In tlInfo
                tbloginfo.ConnectionInfo = ciReportConnection
            Next
        End If
        reportDocument.VerifyDatabase()
        reportDocument.Refresh()
        CrystalReportViewer.ReportSource = reportDocument
        CrystalReportViewer.Refresh()
    End Sub

Creating a Report Connected to a Secure SQL Server Database

請參考來源:MSDN Creating a Report Connected to a Secure SQL Server Database
--
1.In Solution Explorer, right-click the project name that is in bold type, point to Add, and then click Add New Item.
2.In the Add New Item dialog box, in the Templates view, select the Crystal Report template.
3.In the Name field, enter the name "NorthwindCustomers.rpt", and then click Open.
Note   If you have not registered before, you may be asked to register. To find out how to register, see Crystal Reports Registration and Keycode.
4.In the Create New Crystal Report Document panel of the Crystal Reports Gallery dialog box, select Using a Report Wizard.
5.In the Choose an Expert panel, select Standard. Click OK.
The Standard Report Creation Wizard window appears.
6.In the Available Data Sources panel, expand the Create New Connection folder.
7.From the subfolder that opens, expand the OLE DB (ADO) folder.
The OLE DB (ADO) window appears.
8.Select Microsoft OLE DB Provider for SQL Server, and then click Next.
9.Enter the values for your database server, user id and password into the Server, User ID and Password fields.
10.From the Database drop down list, select "Northwind."
11.Leave the Integrated Security checkbox unchecked because you are using SQL Server authentication instead of NT authentication.
Click Finish.
The OLE DB folder is now expanded, showing your database server, and within it, the Northwind database.
12.Expand the nodes Northwind, dbo, and Tables, and then select the Customers table.
13.Click the > symbol to move the table into the Selected Tables panel, and then click Next.
14.Expand the Customers table, and then hold down the Ctrl key while you click CompanyName, ContactName and City.
15.Click the > symbol to move these fields into the Fields to Display panel, then click Next.
16.In the Available Fields panel, under Report Fields, select Customer.City, then click the > symbol to move the field into the Group By panel, and then click Finish.
The NorthwindCustomers report is created and loaded into the main window of Visual Studio.

2014年8月20日 星期三

2014年8月16日 星期六

mssql varchar(max) 長度不足解決方法

一般 varchar(max) 會用到不足,都是跑複雜度高的統計數據
那該如何解決這問題呢?
目前使用的方法,採用2個變數來處理 !
例:
declare @a  varchar(max)
declare @b  varchar(max) 

exec (@a+@b)

2014年8月14日 星期四

mssql count 運用


select (select COUNT(*) from book) as 總本數,(select COUNT(*) from book where vipon<>'') as 會員數,
((select COUNT(*) from book) -(select COUNT(*) from book where vipon<>'')) as 非會員數

2014年8月11日 星期一

mssql count union all

參考引用來源:SQL: Combine Select count(*) from multiple tables
--

SELECT SUM(A)
FROM
(
    SELECT 1 AS A
    UNION ALL
    SELECT 1 AS A
    UNION ALL
    SELECT 1 AS A
    UNION ALL
    SELECT 1 AS A
) AS B




select sum(counts) from (
select count(1) as counts from aa
union all
select count(1) as counts from bb
) as cc

mssql count sum


select name, COUNT(name) as count from Table
group by name
    Union all
select 'SUM' name, COUNT(name)
from Table

坪數 如何計算?


坪數 如何計算?


房子要裝潢、施工 會需要丈量, 然後就會出現很多的單位, 在此列出一些常見的.


1坪 如何計算?

長(公尺) x 寬(公尺) x 0.3025 = 坪數
1坪的大小想像: 1個雙人床約為1坪 (180cm * 180cm)
36才 = 1坪
以台尺計算方式

6台尺 × 6台尺 = 1坪
長(台尺) × 寬(台尺) ÷ 36 = 地坪數
以公分計算方式

180 cm * 180 cm = 32400 平方公分 (1坪)
長(公尺) x 寬(公尺) ÷ 32400 = 地坪數
冷氣 與 房間坪數計算方式

下述參考此篇內容: 冷氣 vs. 房間坪數計算方式

先計算室內空間的坪數
冷房噸數計算: 坪數 x 每坪估算之標準 = 總須求熱量
計算單位:12000(BTU/H)=3000(Kcal/h)= 1冷凍噸 (以每小時為單位)
如何將 冷氣單位 kcal 換算 成冷氣的噸數?

kcal x 4 ÷ 8000 = 噸
8000BTU 為 1噸
所需要的噸數計算方式則為:

普通狀況 1坪 = 400kcal/h
有西曬 1坪 = 500kcal/h
西曬+頂樓 1坪 = 650kcal/h
冷氣視房間坪數為準, 180cm * 180cm = 1坪, 通常會介紹大約一個雙人床為一坪, 以此類推,能放入兩張雙人床則為兩坪大小.

1.0噸-適用 4~5坪
1.3噸-適用 5~7坪
1.5噸-適用 6~9坪
1.7噸-適用 7~10坪
2.5噸-適用 11~14坪
3.o噸-適用 14~17坪
3.5噸-適用 15~18坪
在自行考慮加上 西曬、頂樓 等狀況.

2014年8月6日 星期三

10進制轉(2進制、8進制、16進制)


System.Convert.ToString(10, 2); //十進位轉換二進位
System.Convert.ToString(10, 8); //十進位轉換八進位
System.Convert.ToString(10, 16); //十進位轉換十六進位

2014年8月4日 星期一

Graphics.DrawString 置中

參考引用來源:MSDN如何:對齊繪製的文字
--

Dim text1 As String = "Use StringFormat and Rectangle objects to" & _
    " center text in a rectangle."
Dim font1 As New Font("Arial", 12, FontStyle.Bold, GraphicsUnit.Point)
Try
    Dim rect1 As New Rectangle(10, 10, 130, 140)

    ' Create a StringFormat object with the each line of text, and the block
    ' of text centered on the page.
    Dim stringFormat As New StringFormat()
    stringFormat.Alignment = StringAlignment.Center
    stringFormat.LineAlignment = StringAlignment.Center

    ' Draw the text and the surrounding rectangle.
    e.Graphics.DrawString(text1, font1, Brushes.Blue, rect1, stringFormat)
    e.Graphics.DrawRectangle(Pens.Black, rect1)
Finally
    font1.Dispose()
End Try

PrintPreviewDialog zoom


Code Snippet
int PreferredZoomValue = 75;
PrintPreviewDialog dgl = new PrintPreviewDialog();
dgl.PrintPreviewControl.Zoom = PreferredZoomValue / 100f;

2014年7月28日 星期一

vbnet QRCode (使用:quricol32.dll )

參考來源1:QR CODE 二維條碼的簡介與列印 
參考來源2:Quricol - QR code generator library
參考來源3:This is a sample for create a QR Code using the library Quricol - QR code generator library 
--

  

vbnet 製作 Code 39

參考引用來源:[VB.NET] 生成 Code39 码 
--


一,新建 Code39.ashx 文档,代码如下:

Imports System.Web
Imports System.Web.Services
Imports System.Drawing
Imports System.IO

Public Class code39
    Implements System.Web.IHttpHandler

    Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

        Dim sCode As String = String.Empty
        '清除該頁輸出緩存,設置該頁無緩存  
        context.Response.Buffer = True
        context.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0)
        context.Response.Expires = 0
        context.Response.CacheControl = "no-cache"
        context.Response.AppendHeader("Pragma", "No-Cache")
        '將Code39條碼寫入記憶體流,並將其以 "image/Png" 格式輸出  
        Dim oStream As MemoryStream = New MemoryStream()
        Try
            Dim oBmp As Bitmap = GetCode39(context.Request.QueryString("id"))
            oBmp.Save(oStream, System.Drawing.Imaging.ImageFormat.Png)
            oBmp.Dispose()
            context.Response.ClearContent()
            context.Response.ContentType = "image/Png"
            context.Response.BinaryWrite(oStream.ToArray())
        Finally
            '釋放資源  
            oStream.Dispose()
        End Try

    End Sub

    ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

    Private Function GetCode39(ByVal strSource As String) As Bitmap
        Dim x As Integer = 5
        '左邊界
        Dim y As Integer = 0
        '上邊界
        Dim WidLength As Integer = 2
        '粗BarCode長度
        Dim NarrowLength As Integer = 1
        '細BarCode長度
        Dim BarCodeHeight As Integer = 20
        'BarCode高度
        Dim intSourceLength As Integer = strSource.Length
        Dim strEncode As String = "010010100"
        '編碼字串 初值為 起始符號 *
        Dim AlphaBet As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"
        'Code39的字母
        'Code39的各字母對應碼
        Dim Code39 As String() = {"000110100", "100100001", "001100001", "101100000", "000110001", "100110000", _
         "001110000", "000100101", "100100100", "001100100", "100001001", "001001001", _
         "101001000", "000011001", "100011000", "001011000", "000001101", "100001100", _
         "001001100", "000011100", "100000011", "001000011", "101000010", "000010011", _
         "100010010", "001010010", "000000111", "100000110", "001000110", "000010110", _
         "110000001", "011000001", "111000000", "010010001", "110010000", "011010000", _
         "010000101", "110000100", "011000100", "010101000", "010100010", "010001010", _
         "000101010", "010010100"}
        strSource = strSource.ToUpper()
        '實作圖片
        Dim objBitmap As New Bitmap(((WidLength * 3 + NarrowLength * 7) * (intSourceLength + 2)) + (x * 2), BarCodeHeight + (y * 2))
        Dim objGraphics As Graphics = Graphics.FromImage(objBitmap)
        '宣告GDI+繪圖介面
        '填上底色
        objGraphics.FillRectangle(Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height)

        Dim i As Integer = 0
        While i < intSourceLength
            '檢查是否有非法字元
            If AlphaBet.IndexOf(strSource(i)) = -1 OrElse strSource(i) = "*"c Then
                objGraphics.DrawString("含有非法字元", SystemFonts.DefaultFont, Brushes.Red, x, y)
                Return objBitmap
            End If
            '查表編碼
            strEncode = String.Format("{0}0{1}", strEncode, Code39(AlphaBet.IndexOf(strSource(i))))
            System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1)
        End While

        strEncode = String.Format("{0}0010010100", strEncode)
        '補上結束符號 *
        Dim intEncodeLength As Integer = strEncode.Length
        '編碼後長度
        Dim intBarWidth As Integer

        Dim ii As Integer = 0
        While ii < intEncodeLength
            '依碼畫出Code39 BarCode
            intBarWidth = If(strEncode(ii) = "1"c, WidLength, NarrowLength)
            objGraphics.FillRectangle(If(ii Mod 2 = 0, Brushes.Black, Brushes.White), x, y, intBarWidth, BarCodeHeight)
            x += intBarWidth
            System.Math.Max(System.Threading.Interlocked.Increment(ii), ii - 1)
        End While
        Return objBitmap
    End Function

End Class

純 C# 產生Code39 BarCode 圖片

參考引用來源:純 C# 產生Code39 BarCode 圖片
--
using System.Drawing;
using System.Drawing.Imaging;
private Bitmap GetCode39(string strSource)
{
  int x = 5; //左邊界
  int y = 0; //上邊界
  int WidLength = 2; //粗BarCode長度
  int NarrowLength = 1; //細BarCode長度
  int BarCodeHeight = 24; //BarCode高度
  int intSourceLength = strSource.Length;
  string strEncode = "010010100"; //編碼字串 初值為 起始符號 *

  string AlphaBet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; //Code39的字母

  string[] Code39 = //Code39的各字母對應碼
  {
       /* 0 */ "000110100",
       /* 1 */ "100100001",
       /* 2 */ "001100001",
       /* 3 */ "101100000",
       /* 4 */ "000110001",
       /* 5 */ "100110000",
       /* 6 */ "001110000",
       /* 7 */ "000100101",
       /* 8 */ "100100100",
       /* 9 */ "001100100",
       /* A */ "100001001",
       /* B */ "001001001",
       /* C */ "101001000",
       /* D */ "000011001",
       /* E */ "100011000",
       /* F */ "001011000",
       /* G */ "000001101",
       /* H */ "100001100",
       /* I */ "001001100",
       /* J */ "000011100",
       /* K */ "100000011",
       /* L */ "001000011",
       /* M */ "101000010",
       /* N */ "000010011",
       /* O */ "100010010",
       /* P */ "001010010",
       /* Q */ "000000111",
       /* R */ "100000110",
       /* S */ "001000110",
       /* T */ "000010110",
       /* U */ "110000001",
       /* V */ "011000001",
       /* W */ "111000000",
       /* X */ "010010001",
       /* Y */ "110010000",
       /* Z */ "011010000",
       /* - */ "010000101",
       /* . */ "110000100",
       /*' '*/ "011000100",
       /* $ */ "010101000",
       /* / */ "010100010",
       /* + */ "010001010",
       /* % */ "000101010",
       /* * */ "010010100"
  };


  strSource = strSource.ToUpper();

  //實作圖片
  Bitmap objBitmap = new Bitmap(
    ((WidLength * 3 + NarrowLength * 7) * (intSourceLength + 2)) + (x * 2),
    BarCodeHeight + (y * 2));

  Graphics objGraphics = Graphics.FromImage(objBitmap); //宣告GDI+繪圖介面

  //填上底色
  objGraphics.FillRectangle(Brushes.White, 0, 0, objBitmap.Width, objBitmap.Height);

  for (int i = 0; i < intSourceLength; i++)
  {
    if (AlphaBet.IndexOf(strSource[i]) == -1 || strSource[i] == '*') //檢查是否有非法字元
    {
      objGraphics.DrawString("含有非法字元", SystemFonts.DefaultFont, Brushes.Red, x, y);
      return objBitmap;
    }
    //查表編碼
    strEncode = string.Format("{0}0{1}", strEncode, Code39[AlphaBet.IndexOf(strSource[i])]);
  }

  strEncode = string.Format("{0}0010010100", strEncode); //補上結束符號 *

  int intEncodeLength = strEncode.Length; //編碼後長度
  int intBarWidth;

  for (int i = 0; i < intEncodeLength; i++) //依碼畫出Code39 BarCode
  {
    intBarWidth = strEncode[i] == '1' ? WidLength : NarrowLength;
    objGraphics.FillRectangle(i % 2 == 0 ? Brushes.Black : Brushes.White,
      x, y, intBarWidth , BarCodeHeight);
    x += intBarWidth;
  }
  return objBitmap;
}

2014年7月25日 星期五

II7 搞定 web.config 設定值

當採用 vs 2008 開發 asp.net ,預帶的 web.config 會無法掛到 IIS7 上
必須調整 web.config 的宣告設定值
參考項:
Default Document
<configuration>
   <system.webServer>
      <defaultDocument enabled="true">
         <files>
            <add value="home.html" />
         </files>
      </defaultDocument>
   </system.webServer>
</configuration> 
--
底下為調整後的 web.config

vbnet 列印 QR Code 好用的工具

官網 qrencode-win32
--
試了一大堆 for .net dll QRcode ,結果都是密度 dpi 不夠!
要開發電子發票,根本行不通
試了一下  qrencode-win32 , 果然可以用!! 轉出 41x41 或 82x82 縮小 1.7cm 均可掃出來!
不過這套用在程式,目前採用 .bat 批次檔去產QRcode 圖! 為 big5 格式!
若採用 process 呼叫丟值的話,不知道是不是就變 UTF-8 格式! 有待測試
--
還在為開發電子發票QRcode的,改用這支工具來用

總算看到支援UTF-8了!!
qrencode-win32- UTF-8
指令: qrcode -o my.png -s 5 -l Q < input.txt
---
OT: qrcode--參數用法

參數:
C:\Program Files (x86)\QRCodeGui>qrcode
qrencode version 3.1.1
Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi
Usage: qrencode [OPTION]... [STRING]
Encode input data in a QR Code and save as a PNG image.

   -h           display this message.
   --help       display the usage of long options.
   -o FILENAME  write PNG image to FILENAME. If '-' is specified, the result
                will be output to standard output. If -S is given,
structured
                symbols are written to FILENAME-01.png, FILENAME-02.png,
...;
                if specified, remove a trailing '.png' from FILENAME.
   -s NUMBER    specify the size of dot (pixel). (default=3)
   -l {LMQH}    specify error collectin level from L (lowest) to H
(highest).
                (default=L)
   -v NUMBER    specify the version of the symbol. (default=auto)
   -m NUMBER    specify the width of margin. (default=4)
   -S           make structured symbols. Version must be specified.
   -k           assume that the input text contains kanji (shift-jis).
   -c           encode lower-case alphabet characters in 8-bit mode.
(default)
   -i           ignore case distinctions and use only upper-case characters.
   -8           encode entire data in 8-bit mode. -k, -c and -i will be
ignored.
   -V           display the version number and copyrights of the qrencode.
   [STRING]     input data. If it is not specified, data will be taken from
                standard input.

C:\Program Files (x86)\QRCodeGui>

2014年7月24日 星期四

vb.net Datatable group by with linq

參考引用來源:Datatable group by with linq in vb.net
--
Dim query = From row In dt
        Group row By Month = row.Field(Of Int32)("Month") Into MonthGroup = Group
        Select New With {
            Key Month,
            .Sales = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Sales")),
            .Leads = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Leads")),
            .Gross = MonthGroup.Sum(Function(r) r.Field(Of Int32)("Gross"))
       }

For Each x In query
    Console.WriteLine("Month:{0} {1} {2} {3}", x.Month, x.Sales, x.Leads, x.Gross)
Next

--
from b in db.Company
group b by b.Name into grp
where grp.Count() > 1
select grp.Key

How to print raw ESC/POS commands from ASP.NET directly to the client printer

請參考來源:How to print raw ESC/POS commands from ASP.NET directly to the client printer
--

2014年7月23日 星期三

利用Byte單位來計算字串長度

參考來源:利用Byte單位來計算字串長度的幾種做法(Javascript,C#,VB.Net)
--
 System.Text.Encoding.Default.GetBytes(str).Length

asp.net mssql add/edit/delete sample

參考範例:Add/Edit/Delete in ASP.NET(VB) - MS SQL Server
--
基本顯示資料:Connect to MS SQL Database using ASP.NET
--
習題] 補充上集Ch.14--自己撰寫SqlDataSource「新增資料」,並採用參數(InsertParameters)

預設 web.config 為 .NET 3.5  版本
所以在IIS 內要設定 3.5 或更高版本,才能運作


asp.net web.config 設定 sql 連線字串

參考引用來源:Store connection string in web.config
--

Store connection string in web.config

Connection string in .NET 2.0 config file
In the appSettings location, add a key named whatever you like to reference your connection string to.

<appSettings>
<add key="myConnectionString" value="server=localhost;database=myDb;uid=myUser;password=myPass;" />
</appSettings>
To read the connection string from code, use the ConfigurationSettings class.

string connStr = ConfigurationSettings.AppSettings("myConnectionString");
Now you have the connection string loaded from web.config into your string variable in code.

Connection string in .NET 3.5 (and above) config file
Do not use appsettings in web.config. Instead use the connectionStrings section in web.config.

<connectionStrings>
<add name="myConnectionString" connectionString="server=localhost;database=myDb;uid=myUser;password=myPass;" />
</connectionStrings>
To read the connection string into your code, use the ConfigurationManager class.

string connStr = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;

2014年7月21日 星期一

行政院人事行政總處 全球資訊網

行政院人事行政總處 全球資訊網
--

SQL 日期時間轉換


SQL 日期時間轉換

MS SQL
YYYY-MM-DD (2008-06-26):CONVERT(CHAR(10), GETDATE(), 120)
HH:MM:SS:sss (17:24:30):CONVERT(CHAR(8), GETDATE(), 114)

MM DD YYYY (06 26 2008):CONVERT(CHAR(10), GETDATE(), 100)
MM/DD/YYYY (06/26/2008):CONVERT(CHAR(10), GETDATE(), 101)
MM.DD.YYYY (06.26.2008):CONVERT(CHAR(10), GETDATE(), 102)

DD/MM/YYYY (14/03/2011):CONVERT(CHAR(10), GETDATE(), 103)
DD.MM.YYYY (14.03.2011):CONVERT(CHAR(10), GETDATE(), 104)
DD-MM-YYYY (14-03-2011):CONVERT(CHAR(10), GETDATE(), 105)
DD MM YYYY (14 03 2011):CONVERT(CHAR(10), GETDATE(), 106)

YYYYMMDD (20110314):CONVERT(CHAR(8), GETDATE(), 112)
HH:MM:SS:sss (17:24:30:923):CONVERT(CHAR(12), GETDATE(), 114)


Sybase
YYYYMMDD (20080626):CONVERT(CHAR(10), GETDATE(), 112)
YYYY/MM/DD (2008/11/24):CONVERT(CHAR(10), GETDATE(), 111)
MM-DD-YYYY (11-24-2008):CONVERT(CHAR(10), GETDATE(), 110)
HH:mm:SS (15:49:34):CONVERT(CHAR(10), GETDATE(), 108)


MySQL
select DATE_FORMAT(now(), '%Y-%m-%d');
select DATE_FORMAT(now(), '%T');

use DATE_FORMAT(date,format)

format 格式如下:

%Y 年 YYYY ex:2011
%y 年 yy ex:11

%a 星期 英文縮寫名稱 ex:Fri
%b 月 英文縮寫名稱 ex:Feb
%M 月 英文全名 ex:February
%c 月 數值 ex:2 (二月)
%m 月 數值(00-12)

%D 日 數值 加英文首碼 ex:3rd, 20th
%d 日 數值 補零 ex:(00-31)
%e 日 數值 補零 ex:(0-31)
%j 一年的第幾天 (001-366)

%r 時間 小時12(hh:mm:ss AM 或 PM)ex:10:05:54 PM
%T 時間 小時24 (hh:mm:ss)

%H 小時24 補零 (00-23)
%h 小時12 補零 (01-12)
%k 小時24 (0-23)
%l 小時12 (1-12)
%i 分鐘 補零 (00-59)
%S 秒(00-59)
%s 秒(00-59)

%f 微秒
%p AM 或 PM

%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,與 %X 使用
%v 周 (01-53) 星期一是一周的第一天,與 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,與 %V 使用
%x 年,其中的星期一是周的第一天,4 位,與 %v 使用

Microsoft Point of Service for .NET

下載:Microsoft Point of Service for .NET v1.12 (POS for .NET) 
下載:Microsoft Point of Service for .NET v1.14 (POS for .NET) (Win 8.1)
 

QR codes are defined in versions

QR codes are defined in "versions" 
--

2014年7月20日 星期日

Get IP address by domain name


Imports System.Net
Imports System.Net.Sockets


Public Class Tester
    Public Shared Sub Main


        Try
            Dim myIPHostEntry As IPHostEntry = Dns.Resolve("www.google.com")
            Dim myIPAddresses() As IPAddress = myIPHostEntry.AddressList
            Dim myIPAddress As IPAddress

            Dim strIPAddressList As String

            For Each myIPAddress In myIPAddresses

                Console.WriteLine(myIPAddress.ToString)

            Next
        Catch ex As SocketException
            Console.WriteLine(ex.Message)
        End Try

    End Sub
End Class

2014年7月16日 星期三

printing QR codes through an ESC/POS thermal printer

參考引用來源:printing QR codes through an ESC/POS thermal printer
--


def test_qrcode (printer, text, print_also_text=false, qr_size=6.chr)

  s = text.size + 3
  lsb = (s % 256).chr
  msb = (s / 256).chr

  # https://code.google.com/p/python-escpos/wiki/Usage
  escpos = ""
  escpos << "\x1D\x28\x6B\x03\x00\x31\x43#{qr_size}"
  escpos << "\x1D\x28\x6B\x03\x00\x31\x45\x33"
  escpos << "\x1D\x28\x6B#{lsb}#{msb}\x31\x50\x30"
  escpos << text #
  escpos << "\x1D\x28\x6B\x03\x00\x31\x51\x30"

  # writing byte streams directly to the serial port
  printer.write escpos

end

電子天平透過RS232連線讀值

參考引用來源:電子天平透過RS232連線讀值
--
1.前言
以程式遠端讀取電子天平秤重數值,可將資料存檔紀錄歷史數據。

2.說明
本範例是針對Precisa Balances進行RS232遠端連線控制儀器,首先要做一條RJ45轉RS232的連接線(儀器端為RJ45接口,電腦端為RS232接口),RJ45端口接線配置與遠端控制的命令可參考原廠的操作說明書,這裡舉PRINT控制命令做說明。
PRT: Start printing(Press "Print" key)

加入命名空間

?
1
using System.IO.Ports;
加入serialPort,設定屬性

BaudRate:9600
DataBits:8
Parity:None
StopBits:One
Form_Load加入資料接收處理事件

private void Form1_Load(object sender, EventArgs e)
{
    serialPort1.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
}

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    System.Threading.Thread.Sleep(100);
    string message = serialPort1.ReadExisting();
    SaveData(message);
}
儲存資料

private void SaveData(string message)
{
    string _sign = "";
    double _weight = 0;
    string _unit = "";
    string _datetime = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
    _sign = message.Substring(3, 1);
    if (_sign == "-") _weight = -double.Parse(message.Substring(4, 9));
    if (_sign == "+") _weight = double.Parse(message.Substring(4, 9));
    _unit = message.Substring(15, 3);
    Console.WriteLine(_weight.ToString());
}
傳送命令

private void SendCommand(string command)
{
    serialPort1.Write(command);
}
遠端下控制命令
string cmd = "PRT\r\n";
SendCommand(cmd);

利用GDI+繪製條碼(Code 39)標籤

參考引用來源:利用GDI+繪製條碼(Code 39)標籤
--
1.前言:
在生產系統中,需要用到大量的條碼標籤列印,本範例利用GDI+繪圖的方式,產生條碼的圖檔,可供列印條碼標籤。

2.說明:
條碼的基本說明可參考
http://en.wikipedia.org/wiki/Barcode
本範例介紹Code39條碼,其相關資訊請參考
http://en.wikipedia.org/wiki/Code_39

建立CodeSystem類別

public class CodeSystem
{
    public static Hashtable Code39()
    {
        Hashtable code = new Hashtable();

        code.Add("0", "bwbWBwBwb");
        code.Add("1", "BwbWbwbwB");
        code.Add("2", "bwBWbwbwB");
        code.Add("3", "BwBWbwbwb");
        code.Add("4", "bwbWBwbwB");
        code.Add("5", "BwbWBwbwb");
        code.Add("6", "bwBWBwbwb");
        code.Add("7", "bwbWbwBwB");
        code.Add("8", "BwbWbwBwb");
        code.Add("9", "bwBWbwBwb");
        code.Add("A", "BwbwbWbwB");
        code.Add("B", "bwBwbWbwB");
        code.Add("C", "BwBwbWbwb");
        code.Add("D", "bwbwBWbwB");
        code.Add("E", "BwbwBWbwb");
        code.Add("F", "bwBwBWbwb");
        code.Add("G", "bwbwbWBwB");
        code.Add("H", "BwbwbWBwb");
        code.Add("I", "bwBwbWBwb");
        code.Add("J", "bwbwBWBwb");
        code.Add("K", "BwbwbwbWB");
        code.Add("L", "bwBwbwbWB");
        code.Add("M", "BwBwbwbWb");
        code.Add("N", "bwbwBwbWB");
        code.Add("O", "BwbwBwbWb");
        code.Add("P", "bwBwBwbWb");
        code.Add("Q", "bwbwbwBWB");
        code.Add("R", "BwbwbwBWb");
        code.Add("S", "bwBwbwBWb");
        code.Add("T", "bwbwBwBWb");
        code.Add("U", "BWbwbwbwB");
        code.Add("V", "bWBwbwbwB");
        code.Add("W", "BWBwbwbwb");
        code.Add("X", "bWbwBwbwB");
        code.Add("Y", "BWbwBwbwb");
        code.Add("Z", "bWBwBwbwb");
        code.Add("-", "bWbwbwBwB");
        code.Add(".", "BWbwbwBwb");
        code.Add(" ", "bWBwbwBwb");
        code.Add("$", "bWbWbWbwb");
        code.Add("/", "bWbWbwbWb");
        code.Add("+", "bWbwbWbWb");
        code.Add("%", "bwbWbWbWb");
        code.Add("*", "bWbwBwBwb");

        return code;
    }
}
建立Code39影像檔方法

private Bitmap Code39(string strInput)
{
    //Code 39 specification
    int narrowWidth = 1;
    int wideWidth = 2;
    int B = wideWidth;//Wide-Black width
    int b = narrowWidth;//Narrow-Black width
    int W = wideWidth;//Wide-White width
    int w = narrowWidth;//Narrow-White width          
    int padding = 15;
    int startPoint = padding;//繪製線條起點
    int strLength = strInput.Length;
    FontFamily fontFamily = new FontFamily("Arial");
    Font myFont = new Font(fontFamily, 9, FontStyle.Regular, GraphicsUnit.Point);
    int barcodeHeight = 60;
    int barcodeWidth = (wideWidth * 3 + narrowWidth * 7) * (strLength + 2); ;

    //定義影像檔
    /*寬度設定定義:
      以A為例,code為BwbwbWbwB加上結尾w共十個字元,其中寬線共三個,窄線共7個;
      字串長度加上前後的*;
      前後留白的寬度x2
    */
    int imgWidth = ((wideWidth * 3 + narrowWidth * 7) * (strLength + 2)) + padding * 2;
    int imgHeight = barcodeHeight + padding * 2;
    pictureBox1.Width = imgWidth;
    pictureBox1.Height = imgHeight;
    Bitmap bitmap = new Bitmap(imgWidth, imgHeight);
    //在image上繪圖
    Graphics g = Graphics.FromImage(bitmap);
    g.PageUnit = GraphicsUnit.Pixel;
    //繪圖品質設定
    g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
    g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.InterpolationMode = InterpolationMode.High;
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
    //先將背景色設定為白色
    g.FillRectangle(new SolidBrush(Color.White), 0, 0, bitmap.Width, bitmap.Height);

    string codeString = "";
    Hashtable getCode = CodeSystem.Code39();

    for (int i = 0; i < strInput.Length; i++)
    {
        string character = strInput[i].ToString().ToUpper();
        if (getCode[strInput[i].ToString().ToUpper()] != null && getCode[strInput[i].ToString().ToUpper()].ToString() != "*")
        {
            codeString += getCode[strInput[i].ToString().ToUpper()].ToString() + "w";
        }
        else
        {
            g.DrawString("Invalid\nCharacter", myFont, Brushes.Black, 0, (barcodeHeight + padding * 2) / 3);
            return bitmap;
        }
    }
    //前後用*包起字串,例如*Code39*
    codeString = getCode["*"].ToString() + "w" + codeString + getCode["*"].ToString();
    Console.WriteLine(codeString);
    int shiftPoint = 0;
    for (int i = 0; i < codeString.Length; i++)
    {
        string s = codeString[i].ToString();

        switch (s)
        {
            case "B":
                shiftPoint = B;
                break;
            case "b":
                shiftPoint = b;
                break;
            case "W":
                shiftPoint = W;
                break;
            case "w":
                shiftPoint = w;
                break;
        }

        g.FillRectangle(i % 2 == 0 ? new SolidBrush(Color.Black) : new SolidBrush(Color.White), startPoint, padding, shiftPoint, barcodeHeight);
        startPoint += shiftPoint;
    }

    //Draw footer string
    string footerString = "*" + strInput + "*";
    //g.DrawString(footerString, myFont, Brushes.Black, (float)(padding / 2f + imgWidth / 2f - (footerString.Length * myFont.Size / 2f)), (float)(barcodeHeight + padding + 2f));
    TextRenderer.DrawText(g, footerString, myFont, new Point((int)(padding / 2f + imgWidth / 2f - (footerString.Length * myFont.Size / 2f)), (int)(barcodeHeight + padding + 2f)), SystemColors.ControlText);

    return bitmap;
}
3.應用:

//定義影像檔
Bitmap bitmap = Code39("PIXNET");
//顯示影像
pictureBox1.Image = bitmap;

使用LinqToExcel讀取Excel 2003/2007檔案


參考引用來源:使用LinqToExcel讀取Excel 2003/2007檔案
--

1.前言:
讀取Excel檔案的方法很多,LinqToExcel是利用Linq的方式查詢讀取Excel 2003/2007的檔案,為一個MIT license的開放程式碼函式庫。

2.說明:
與眾多操作Excel檔案的函式庫相比,LinqToExcel只能算是輕量級的軟體,用以單純讀取Excel檔案。

有關LinqToExcel的說明可參考:
https://github.com/paulyoder/LinqToExcel#welcome-to-the-linqtoexcel-project

LinqToExcel軟體下載網址:
http://code.google.com/p/linqtoexcel/

本範例使用版本為LinqToExcel_1.7.1,建置平台選擇x86模式。
軟體解壓縮後,將\LinqToExcel_1.7.1的DLL檔複製到自己專案的bin目錄下

加入參考: LinqToExcel.dll, Remotion.Data.Linq.dll
加入命名空間:

using LinqToExcel;
using Remotion;

Excel轉成DataTable:


private DataTable ExcelToDataTable(string filePath, string sheetName)
{
    DataTable dt = new DataTable();
    ExcelQueryFactory excel = new ExcelQueryFactory(filePath);
    IQueryable query = from row in excel.Worksheet(sheetName) select row;

    var columnName = excel.GetColumnNames(sheetName);

    //建立欄位名稱
    foreach (var col in columnName)
    {
        dt.Columns.Add(col.ToString());
    }

    //寫入資料到資料列
    foreach (Row item in query)
    {
        dt.NewRow();
        object[] cell = new object[columnName.Count()];
        int idx = 0;
        foreach (var col in columnName)
        {
            cell[idx] = item[col].Value;
            idx++;
        }
        dt.Rows.Add(cell);
    }          

    return dt;
}
3.應用:

//範例一: 讀取Excel 2003檔案
string filePath = @"D:\tmp\b.xls";
string sheetName = "Sheet1";
DataTable dt = ExcelToDataTable(filePath, sheetName);
//範例二: 讀取Excel 2007檔案
string filePath = @"D:\tmp\c.xlsx";
string sheetName = "Sheet1";
DataTable dt = ExcelToDataTable(filePath, sheetName);

C#中利用DataTable.Compute()方法對資料欄位做數值計算

參考引用來源:C#中利用DataTable.Compute()方法對資料欄位做數值計算
--



1.前言:
如果要對DataTable中的特定欄位做資料分析,在不使用其他第三方函式庫的情況下,可以用Compute方法來做基本的數值計算。

2.說明:
用法: DataTable.Compute( string expression, string filter)
支援以下聚合函數:
•Sum (Sum)
•Avg (Average)
•Min (Minimum)
•Max (Maximum)
•Count (Count)
•StDev (Statistical standard deviation)
•Var (Statistical variance)
使用上要注意的是欄位的型態需要是數值型態,如果是字串型態,可以簡單定義一個新欄位為數值型,再複製要計算的欄位資料做資料分析,否則會出現彙總函式和型別的無效用法: String錯誤訊息。

有關DataTable.Compute()的說明可參考:
http://msdn.microsoft.com/en-us/library/system.data.datatable.compute(v=vs.100).aspx

程式碼:

private void btCalc_Click(object sender, EventArgs e)
{
    double mean, stdev, max, min, variance, count, sum;
    DataTable dt = TxtConvertToDataTable(@"d:\tmp\dt.csv", "tmp", ",");//讀取資料

    dt.Columns.Add("tmpColumn", typeof(double), "Convert(data, 'System.Double')");//加入暫存欄位,將資料中string的型態轉為double型態

    mean = (double)dt.Compute("Avg(tmpColumn)", string.Empty);
    stdev = (double)dt.Compute("Stdev(tmpColumn)", string.Empty);
    max = (double)dt.Compute("Max(tmpColumn)", string.Empty);
    min = (double)dt.Compute("Min(tmpColumn)", string.Empty);
    variance = (double)dt.Compute("Var(tmpColumn)", string.Empty);
    count = (int)dt.Compute("Count(tmpColumn)", string.Empty);
    sum = (double)dt.Compute("Sum(tmpColumn)", string.Empty);

    dt.Columns.Remove("tmpColumn");//移除暫存欄位      
   
    MessageBox.Show("Mean: "+mean+"\r\n"
        + "Stdev: " + stdev + "\r\n"
        + "Max: " + max + "\r\n"
        + "Min: " + min + "\r\n"
        + "Variance: " + variance + "\r\n"
        + "Count: " + count + "\r\n"
        + "Sum: " + sum + "\r\n"
        );
}

public DataTable TxtConvertToDataTable(string File, string TableName, string delimiter)
{
    DataTable dt = new DataTable();
    DataSet ds = new DataSet();
    StreamReader s = new StreamReader(File, System.Text.Encoding.Default);
    string[] columns = s.ReadLine().Split(delimiter.ToCharArray());
    ds.Tables.Add(TableName);
    foreach (string col in columns)
    {
        bool added = false;
        string next = "";
        int i = 0;
        while (!added)
        {
            string columnname = col + next;
            columnname = columnname.Replace("#", "");
            columnname = columnname.Replace("'", "");
            columnname = columnname.Replace("&", "");

            if (!ds.Tables[TableName].Columns.Contains(columnname))
            {
                ds.Tables[TableName].Columns.Add(columnname.ToUpper());
                added = true;
            }
            else
            {
                i++;
                next = "_" + i.ToString();
            }
        }
    }

    string AllData = s.ReadToEnd();
    string[] rows = AllData.Split("\n".ToCharArray());

    foreach (string r in rows)
    {
        string[] items = r.Split(delimiter.ToCharArray());
        ds.Tables[TableName].Rows.Add(items);
    }

    s.Close();

    dt = ds.Tables[0];

    return dt;
}

使用ExcelDataReader讀取Excel 2007檔案

參考引用來源:使用ExcelDataReader讀取Excel 2007檔案
--


1.前言:
ExcelDataReader是一個MIT license的開放原始碼的函式庫,可以用來讀取Excel 2007檔案。

2.說明:
ExcelDataReader的說明及軟體下載網址:
http://exceldatareader.codeplex.com/

本範例使用版本為ExcelDataReader v2.1(Beta)
軟體解壓縮後,將\2.1.beta.binary\Excel.dll的DLL檔複製到自己專案的bin目錄下

加入參考: Excel.dll
加入命名空間:

using Excel;
程式碼:
string filePath = @"d:\tmp\c.xlsx";
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);//Excel 2007格式; *.xlsx
excelReader.IsFirstRowAsColumnNames = true;
DataSet ds = excelReader.AsDataSet(); //所有的頁簽資料存在ds.Tables中
excelReader.Close();
dataGridView1.DataSource = ds.Tables[1];

使用NBarcodes產生一維條碼圖形

參考引用來源:使用NBarcodes產生一維條碼圖形
--
1.前言:
NBarcodes是一個MIT license的開放函式庫,用來製作一維條碼。

2.說明:
NBarcodes的說明可參考及軟體下載網址:
http://code.google.com/p/nbarcodes/

條碼編碼支援類型:
Code 128, Code 39, Standard 2 of 5, Interleaved 2 of 5, EAN-13, EAN-8, UPC-A, UPC-E and Postnet

本範例使用版本為nbarcodes-v1.0.0
軟體解壓縮後,將\nbarcodes-v1.0.0-bin\NBarCodes.dll的DLL檔複製到自己專案的bin目錄下

加入參考: NBarCodes.dll
加入命名空間:

using NBarCodes;
程式碼:
//產生Code128
NBarCodes.Forms.BarCodeControl bc = new NBarCodes.Forms.BarCodeControl();
bc.Type = BarCodeType.Code128;
bc.Data = "PIXNET";
bc.Visible = true;
BarCodeGenerator generator = new BarCodeGenerator(bc);
Image image = generator.GenerateImage();
pictureBox1.Image = image;


使用ZXing.Net產生一維/二維條碼圖形

參考引用來源:使用ZXing.Net產生一維/二維條碼圖形
--

分享:    
1.前言:
ZXing.Net是一個Apache License 2.0的開放函式庫,可以輕鬆地製作一維及二維條碼,讓專案報表開發更快速。

2.說明:
ZXing.Net的說明及軟體下載網址:
http://zxingnet.codeplex.com/

條碼解碼支援類型:
UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 93, Code 128, ITF, Codabar, MSI, RSS-14 (all variants), QR Code, Data Matrix, Aztec and PDF-417.
條碼編碼支援類型:
UPC-A, EAN-8, EAN-13, Code 39, Code 128, ITF, Codabar, Plessey, MSI, QR Code, PDF-417, Aztec, Data Matrix

本範例使用版本為ZXing.Net.0.12.0.0
軟體解壓縮後,將\ZXing.Net.0.12.0.0\net3.5\zxing.dll的DLL檔複製到自己專案的bin目錄下

加入參考: zxing.dll
加入命名空間:
using ZXing;
程式碼:

//範例一: 產生QRCode
BarcodeWriter bw = new BarcodeWriter();
bw.Format = BarcodeFormat.QR_CODE;
bw.Options.Width = 260;
bw.Options.Height = 237;
Bitmap bitmap = bw.Write("PIXNET");
pictureBox1.Image = (Image)bitmap;

//範例二: 產生Code128
BarcodeWriter bw = new BarcodeWriter();
bw.Format = BarcodeFormat.CODE_128;
bw.Options.Width = 200;
bw.Options.Height = 100;
bw.Options.PureBarcode = false;
Bitmap bitmap = bw.Write("PIXNET");
pictureBox1.Image = (Image)bitmap;

利用QrCode.Net來創建二維條碼圖形

參考引用來源:利用QrCode.Net來創建二維條碼圖形
--


1.前言:
傳統的一維條碼圖能記錄的資訊有限,而二維的條碼圖可記錄大量訊息,另外QR碼有容錯能力,可降低因為標籤部分磨損無法判讀的問題。本範例在利用open source的軟體,來建立QRCode的影像圖形。


2.說明:
QrCode.Net是一個MIT license的開放軟體,軟體最新版本可在下列網址下載:
本範例使用的版本為: 0.4 Pre-release
http://qrcodenet.codeplex.com/

QRCode的說明可參考以下網址:
http://en.wikipedia.org/wiki/QR_code

將軟體下載後解壓縮,在Gma.QrCodeNet.Encoding.Net35目錄下複製Gma.QrCodeNet.Encoding.Net35.dll到自己的專案bin目錄下。

加入參考:
Gma.QrCodeNet.Encoding.Net35.dll
加入命名空間:

using Gma.QrCodeNet.Encoding;
using Gma.QrCodeNet.Encoding.Windows.Render;
程式碼:

//輸入要製作二維條碼的字串
string codeString = "http://einboch.pixnet.net/blog";

//實例化,設定錯誤修正容量
/*
  Level L (Low)      7%  of codewords can be restored.
  Level M (Medium)   15% of codewords can be restored.
  Level Q (Quartile) 25% of codewords can be restored.
  Level H (High)     30% of codewords can be restored.
*/
QrEncoder encoder = new QrEncoder(ErrorCorrectionLevel.L);

//編碼
QrCode code = encoder.Encode(codeString);

//定義線條寬度
int moduleSizeInPixels = 12;

//繪二維條碼圖初始化
GraphicsRenderer renderer = new GraphicsRenderer(new FixedModuleSize(moduleSizeInPixels, QuietZoneModules.Two), Brushes.Black, Brushes.White);

//留白區大小
Point padding = new Point(10, 16);

//取得條碼圖大小
DrawingSize dSize = renderer.SizeCalculator.GetSize(code.Matrix.Width);
int imgWidth = dSize.CodeWidth + 2 * padding.X;
int imgHeight = dSize.CodeWidth+2 * padding.Y;
//設定影像大小
Image img = new Bitmap(imgWidth, imgHeight);
pictureBox1.Width = imgWidth;
pictureBox1.Height = imgHeight;
//繪製二維條碼圖
Graphics g = Graphics.FromImage(img);
renderer.Draw(g, code.Matrix, padding);

pictureBox1.Image = img;

ADO.NET MSSQL

請參考:SQL Helper Class

2014年7月15日 星期二

Get connection string from app.config file

參考引用:Get connection string from app.config file 
---

參考 ConfigurationManager
引入 System.Configuration

Private cn As New SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("StorkConnection").ConnectionString)

...
app.config



   
   
   
connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\database.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"providerName="System.Data.SqlClient"/>
   



2014年7月12日 星期六

mssql datetime 查询 (mssql 2008 r2 bug)

相關參考:[SQL SERVER][Memo]搜尋datetime類型欄位三兩事
--
今天MSSQL DB 發生一件怪事 !
竟然查 datetime 欄位,竟查不到資料....真不敢相信,以前一直這樣使用!
例:
select * from abc where gdate='2014/7/12'

gdate type datetime

(上例)以前這樣查,均可正常顯示資料出來! 但現在竟查不出來
納悶.......不相信,我使用另一個資料庫;使用上面的查法,能查出來啊...(天啊)
why ...到底是發生什麼事!  A 資料庫查不出日期 , B 資料庫卻查出日期
---
只好當這問題是 MSSQL 2008 R2 Express 的 bug...

解決方式:
MSSQL 服務重新啟動後 , 即可正常!!  (真是天大的bug..用這麼多年,這一次發生)

2014年7月6日 星期日

vb.net set mouse pointer position

參考來源:Cursor.Position 屬性
--
Me.Cursor = New Cursor(Cursor.Current.Handle)
Cursor.Position = New Point(0, 0)

vbnet check date format yyyyMMdd

參考引用來源:checking if string is a date in yyyyMMdd format
--
Dim ds As String = "20140706"
Dim dt As DateTime
If DateTime.TryParseExact(ds, "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture, _
      DateTimeStyles.None, dt) Then
   MessageBox.Show("Date is " & dt.ToString)
Else
   MessageBox.Show("Invalid date")
End If

2014年7月1日 星期二

池龍工作室

(永久網址) 已註冊網址 :  http://www.wushi.idv.tw/  進入:池龍工作室

說明:
由於微軟把 no-ip 所有免費的網址都撤銷,導致現在 no-ip 無法導引到網站!
相關請參考本篇 no-ip 官網發佈的資料 No-IP’s Formal Statement on Microsoft Takedown

--
看來,還是要付費的較沒問題!!
hinet 網域名稱申請服務
TWNIC-財團法人台灣網路資訊中心


2014年6月23日 星期一

vbnet 取螢幕


Me.Bounds = (From scr In Screen.AllScreens Where scr.Primary)(0).WorkingArea'主螢幕
Me.Bounds = (From scr In Screen.AllScreens Where Not scr.Primary)(0).WorkingArea'第2顆螢幕

2014年6月20日 星期五

vbnet Split


Dim a As String = "123@456@789"
Dim ch1 As Char() = New Char() {"@"}
Dim str As String() = a.Split(ch1)
MessageBox.Show(str.Length)
For i As Integer = 0 To str.Length - 1
       MessageBox.Show(str(i))
Next

2014年6月18日 星期三

如何從DataTable中取出Distinct的資料

參考引用來源
--
 Dim tmpView As DataView = Dt.DefaultView
Dim tmpTable as DataTable = tmpView.ToTable("TmpTable1",True,"LastName")

2014年6月17日 星期二

C# Excel嵌入到Winform

參考引用來源:
---


C# Excel嵌入到Winform
本文讲的这个技术是把Excel表格嵌入到自己开发程序的Form窗体中进行操作,给客户一个不用切换窗口的操作界面,似乎更好。这在VC中用OLE技术很容易实现,但是在C#中方法就不一样啦。下面将就此进行阐述。

一、首先简要回顾一下如何操作Excel表

先要添加对Excel的引用。选择项目-〉添加引用-〉COM-〉添加Microsoft Excel 9.0。(不同的office讲会有不同版本的dll文件)。
   using Excel;
   using System.Reflection;
 
   //产生一个Excel.Application的新进程
   Excel.Application app = new Excel.Application();
   if (app == null)
   {
    statusBar1.Text = "ERROR: EXCEL couldn''t be started!";
    return ;
   }
 
   app.Visible = true; //如果只想用程序控制该excel而不想让用户操作时候,可以设置为false
   app.UserControl = true;
 
   Workbooks workbooks =app.Workbooks;

   _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); //根据模板产生新的workbook
// _Workbook workbook = workbooks.Add("c://a.xls"); //或者根据绝对路径打开工作簿文件a.xls

   Sheets sheets = workbook.Worksheets;
   _Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
   if (worksheet == null)
   {
    statusBar1.Text = "ERROR: worksheet == null";
    return;
   }

   // This paragraph puts the value 5 to the cell G1
   Range range1 = worksheet.get_Range("A1", Missing.Value);
   if (range1 == null)
   {
    statusBar1.Text = "ERROR: range == null";
    return;
   }
   const int nCells = 2345;
   range1.Value2 = nCells;

二、将Excel用户界面嵌入到自己的Windows Form中

      由于目前,C#和vb.net都不支持OLE技术(参见微软支持中心Info:304562),,所以只有使用WebBrowser控件来完成此功能。(以下方法参见微软支持中心Howto:304662)
      1、右击工具箱,选择自定义工具箱,添加COM组件,选择“Microsoft Web 浏览器”(对应文件是/winnt/system32/shdocvw.dll),确定。在工具箱中将会出现文本为Explorer的WebBroser控件图标。



注意:在 Visual C# 2005 中,如果您找不到 SHDocVw.dll 文件或 AxSHDocVw.dll 文件,请在 Visual Studio 命令提示符下运行下面的命令: aximp %WINDIR%/system32/shdocvw.dll


      2、在Form1中添加WebBrowser控件。(对象名却省是axWebBrowser1)
      3、假定要打开的excel文件是: c:/a.xls。
       string strFileName = @"c:/a.xls";
     Object refmissing = System.Reflection.Missing.Value;
     axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing);
    值得注意的是用WebBrowser控件不支持菜单合并,也就是说无法把Excel表的菜单带入到我们的程序中。这是相对于OLE实现方法的一大缺点。幸好提供了可以把工具栏添加进来的功能,通过工具栏可以进行许多Excel专有的操作。
     //下面这句可以将excel本身的工具调添加进来
    axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing);
   
三、回到本文提出的问题,如何操作嵌入的Excel?

首先需要明白,用WebBrowser“装载”Excel"表,实际上仍然是在新的进程空间中运行Excel.exe。可以用任务管理器观察。因此,只要我们能够获取Excel.Application对象,就能像上文一中所说的那样操作Excel数据。
   幸好可以通过WebBrowser的方法NavigateComplete提供的事件参数e来访问Excel.Application。
public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
{
   Object o = e.pDisp;
   Object oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
   Object oApplication = o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
      //Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null);

   //由于打开的是excel文件,所以这里的oApplication 其实就是Excel.Application
   Excel.Application eApp =(Excel.Application)oApplication;//这样就可以象上文中所述来操作Excel了。
}

四、包含该WebBrowser的Form退出时候,如何确保Excel进程也退出?(参见Microsoft帮助中心KB317109)

由于WebBrowser只不过是对Excel表的浏览,而Excel在单独的进程中运行。所以要保证对该Excel对象eApp及其相应的所有成员变量都释放引用,才能保证在Form退出时excel进程跟着退出。这一点在一个程序需要多次打开关闭excel表时尤为重要。
      Excel.Application oApp;
      Excel.Workbooks oBooks;
      Excel.Workbook oBook;
      Excel.Worksheet oSheet;
      ...........
    private void ExcelExit()
    {
       NAR(oSheet);
       oBook.Close(False);
       NAR(oBook);
       NAR(oBooks);
       oApp.Quit();
       NAR(oApp);

       Debug.WriteLine("Sleeping...");
       System.Threading.Thread.Sleep(5000);
       Debug.WriteLine("End Excel");
    }
private void NAR(Object o)
{
        try{System.Runtime.InteropServices.Marshal.ReleaseComObject(o);}
        catch{}
        finally{o = null;}
    }
经过试验,我发现除了释放这些变量以外,必须把该axWebBroswer1也销毁掉,Excel进程才退出。否则的话,即使让axWebBroser1去Navigate空内容"about:blank", excel进程仍然不会退出。因此应该将axWebBroser1所在的Form关闭掉,或者直接调用axWebBrowser1.Dispose();
如果还是其它问题导致不能正常退出,就只有调用垃圾回收了。
GC.Collect();

2014年6月15日 星期日

vb.net form focus

參考引用來源:How to return keyboard focus to topmost form?
--
真是找了好久!! 這方法只有:讚!!

 C#.NET:

using System.Runtime.InteropServices;
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
static extern IntPtr GetForegroundWindow();


static void restoreKbFocus(IntPtr hWnd)
{
      if (GetForegroundWindow() != hWnd)
      {
           SetForegroundWindow(hWnd);
      }
}

void timer_Tick(object sender, EventArgs eArgs)
{
      if (sender == timer)
      {
            restoreKbFocus(this.Handle);
      }
}

VB.NET:

Imports System.Runtime.InteropServices
_
Private Shared Function SetForegroundWindow(hWnd As IntPtr) As Boolean
End Function
_
Private Shared Function GetForegroundWindow() As IntPtr
End Function

Private Shared Sub restoreKbFocus(hWnd As IntPtr)
If GetForegroundWindow() <> hWnd Then
SetForegroundWindow(hWnd)
End If
End Sub

Private Sub timer_Tick(sender As Object, eArgs As EventArgs)
If sender = timer Then
restoreKbFocus(Me.Handle)
End If
End Sub

2014年6月5日 星期四

vbnet 檢查印表機是否 online

--是否有安裝

Imports System.Drawing.Printing
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        MessageBox.Show(CheckPrinter("Microsoft XPS Document Writer").ToString)
        MessageBox.Show(CheckPrinter("EPSON Stylus Photo 895").ToString)
    End Sub
    Private Function CheckPrinter(ByVal printerName As String) As Boolean
        Dim online As Boolean = False
        Try
            Dim mprintDocument As PrintDocument = New PrintDocument()
            mprintDocument.PrinterSettings.PrinterName = printerName
            online = mprintDocument.PrinterSettings.IsValid
        Catch
            online = False
        End Try
        Return online
    End Function
End Class

---狀態判斷
 Private Enum PrinterStatus
PrinterIdle = 3
PrinterPrinting = 4
PrinterWarmingUp = 5
' For more states see WMI docs.
End Enum

Private Function PrinterStatusToString(ByVal ps As PrinterStatus) As
String
Dim s As String
Select Case ps
Case PrinterStatus.PrinterIdle
s = "waiting (idle)"
Case PrinterStatus.PrinterPrinting
s = "printing"
Case PrinterStatus.PrinterWarmingUp
s = "warming up"
Case Else ' Vielleicht gibt es noch weitere Falle...
s = "unknown state"
End Select
PrinterStatusToString = s
End Function

Private Sub Form1_Load( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs _
) Handles MyBase.Load
Dim strPrintServer As String
strPrintServer = "localhost"
Dim WMIObject As String, PrinterSet As Object, Printer As Object
WMIObject = "winmgmts://" & strPrintServer
PrinterSet = GetObject(WMIObject).InstancesOf("win32_Printer")
For Each Printer In PrinterSet
MsgBox( _
Printer.Name & ": " & _
PrinterStatusToString(Printer.PrinterStatus) _
)
Next Printer
End Sub

2014年5月30日 星期五

MSSQL 資料庫所有欄位名稱以及所有資料表名稱


搜尋資料庫所有欄位名稱,可以使用這兩種語法
select * from syscolumns
select * from sys.columns

取得資料庫中所有資料表的名稱,可以使用以下語法
SELECT * FROM INFORMATION_SCHEMA.TABLES

IdealProgrammer.com 超多程式語言範例的網站

Catalog of 1,300+ Hours of .NET Video Tutorials : IdealProgrammer.com
--
真多!! 有空要來好好進修了

Visual Studio 下載

Visual Studio 下載
---
Visual Studio 出版的速度真是快,1年1版 ..
這代表什麼 ?
....
....
....
新的技術和方法都有進步和突破
這腳步真的走得好快,大家跟上微軟腳步了嗎

超大免費架站空間2FREEHOSTING 20G空間 150G流量 無廣告 提供PHP 、MySQL

Free Web Hosting with cPanel, PHP5, SSH and MySQL. Host Free Website

---
超大免費架站空間2FREEHOSTING 20G空間 150G流量 無廣告 提供PHP 、MySQL

好康耶!!

2014年5月27日 星期二

how to create a ms access db and table using adodb in vb.net

參考1:how to create a ms access db and table using adodb in vb.net
參考引用2:How to create access database
--

\\\set a reference to COM adox ext 2.x for dll and security
Public Class Main
Public Shared Sub Main()
Dim catNewDB As New ADOX.Catalog
Dim fi As New IO.FileInfo("c:\db1.mdb")
If fi.Exists Then
If MessageBox.Show("Delete?", "Existing File db1.mdb", _
MessageBoxButtons.YesNo) = DialogResult.Yes Then
fi.Delete()
Else
Exit Sub
End If
End If
catNewDB.Create("Provider=Microsoft.Jet.OLEDB.4.0; " & "Data
Source=C:\db1.mdb")
'To make tables we use Adonet
Dim conn As New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLED B.4.0;" &
_
" Data Source=C:\db1.mdb;User Id=admin;Password=;")
Dim cmd As New OleDb.OleDbCommand("CREATE TABLE persons ( " & _
"AutoId int identity ," & _
"Id int NOT NULL," & _
"Name NVarchar(50)," & _
"BirthDate datetime," & _
"IdCountry int," & _
"CONSTRAINT [pk_AutoId] PRIMARY KEY (AutoId)) ", conn)
conn.Open()
Try
cmd.ExecuteNonQuery()
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message, "OleDbException")
Exit Sub
Catch ex As Exception
MessageBox.Show(ex.Message, "GeneralException")
Exit Sub
End Try
cmd = New OleDb.OleDbCommand("CREATE TABLE countries ( " & _
"AutoId int identity ," & _
"Id int NOT NULL," & _
"Name NVarchar(50)," & _
"CONSTRAINT [pk_AutoId] PRIMARY KEY (AutoId)) ", conn)
Try
cmd.ExecuteNonQuery()
Catch ex As OleDb.OleDbException
MessageBox.Show(ex.Message, "OleDbException")
Exit Sub
Catch ex As Exception
MessageBox.Show(ex.Message, "GeneralException")
Exit Sub
End Try
conn.Close()
End Sub
End Class
///