31 ธันวาคม 2558

SQL Server - การ Export SQL Server Data โดยใช้ Generate Scripts

การนำข้อมูลจาก SQL Server มีหลายวิธี เช่น การสำรองข้อมูล (backup) หรือ การก๊อปปี้ไฟล์ฐานข้อมูลโดยการ  Detach ออกก่อน ซึ่งวิธีเหล่านี้เราจะไม่สามารถเห็นคำสั่งหรือข้อมูลของฐานข้อมูล แต่ยังมีอีกวิธีการหนึ่งที่ทำให้เราสามารถ เห็นคำสั่งตั้งแต่เริ่มสร้างฐานข้อมูล ตาราง รวมถึงคำสั่งในการเพิ่มข้อมูลและข้อมูลต่างๆในตารางของฐานข้อมูลที่ต้องการได้
1. ให้คลิกเมาส์ปุ่มขวาที่ฐานข้อมูลที่ต้องการ Export
         เลือก Task -> Generate Scripts...

2. จะปรากฎหน้าต่าง Generate and Publish Script - Introduction ให้คลิกปุ่ม Next
3. หน้าต่าง Generate and Publish Script - Choose Objects เป็นส่วนที่ให้กำหนดว่าจะเลือกการ Export แบบใด
         - Script entire database and all database objects เป็นการเลือกสิ่งที่อยู่ภายใต้ฐานข้อมูลทั้งหมด
         - Select specific database objects เป็นการเลือกเฉพาะตารางที่ต้องการ

จากนั้นคลิกปุ่ม Next


4. หน้าต่าง Generate and Publish Script - Set Scripting Options 

- เลือก Save scripts to a specific location 
- เลือก Save to file 
            ที่ช่อง File name ให้กำหนดชื่อไฟล์และโฟลเดอร์ที่บันทึกรายละเอียดของ scripts

จากนั้นคลิกที่ปุ่ม Advanced
5. เมื่อคลิกปุ่ม Advanced จะปรากฎหน้าต่าง Advanced Scripting Options 
          ไปที่รายการ  Type of data to script  แล้วกำหนดค่าตามต้องการ

                - Data only  เป็นการ Export เฉพาะข้อมูล
                - Schema and data  เป็นการ Export โครงสร้างและข้อมูล
                - Schema only  เป็นการ Export เฉพาะโครงสร้าง


คลิกปุ่ม OK 
จะกลับมายังหน้าต่าง Generate and Publish Script - Set Scripting Options  ให้คลิกปุ่ม Next

6. หน้าต่าง Generate and Publish Script - Summary ให้คลิกปุ่ม Next

โปรแกรมก็จะทำการ Generate Scripts ให้จนเสร็จ ก็กดปุ่ม Finish ก็จะได้ไฟล์สคริปต์ตามที่ต้องการ สามารถนำไปใช้งานต่อได้

ตัวอย่างข้อมูลในไฟล์สคริปต์ ที่ Generate โดยเปิดผ่านทางหน้าต่าง New Query

สวัสดีวันส่งท้ายปีเก่า 31 ธันวาคม 2558
อย่าลืมไปดูไฟผู้ว่า ณ ลานคนเมือง 39 ล้านบาท

สวัสดีมีโชค


24 ธันวาคม 2558

ASP.NET dynamic HighCharts with SQL Server

การแสดงผลด้วยกราฟ ด้วย HighCharts

1. สร้างตารางเก็บข้อมูล ภายใต้ SQL Server ดังนี้

USE yourDatabase 
GO
CREATE TABLE [dbo].[tblTicker](
[RowOrder] [int] IDENTITY(1,1) NOT NULL,
[year] [nchar](4) NULL,
[Symbol] [nvarchar](15) NULL,
[Value1] [numeric](12, 2) NULL,
[value2] [numeric](12, 2) NULL
) ON [PRIMARY]

GO 

2. ทำการเพิ่มข้อมูลให้กับตาราง ตามตัวอย่างดังภาพ

3. ให้เปิดโปรแกรม Visual Studio 201x จากนั้นทำการสร้างเว็บฟอร์ม

- ไฟล์นามสกุล .aspx ป้อนคำสั่งดังนี้

<!DOCTYPE html>
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <title></title>
 <meta charset= "utf-8" />
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
 <script src="https://code.highcharts.com/highcharts.js"></script>
 <script src="https://code.highcharts.com/modules/data.js"></script>
 <script src="https://code.highcharts.com/modules/exporting.js"></script>
 <script type="text/javascript">
 if ('<%=hidXCategories1%>' == '') {
 execScript();
 }
 var firstSeries = '<%=hidValues1%>';
 var secondSeries = '<%=hidValues2%>';
 var xAxis = '<%=hidXCategories1%>';
 var categories = new Array();
 categories = xAxis.split(',');
 var seriesOne = new Array();
 seriesOne = firstSeries.split(',');
 for (var i = 0; i < seriesOne.length; i++) {
 seriesOne[i] = parseInt(seriesOne[i]);
 }
 var seriesTwo = new Array();
 seriesTwo = secondSeries.split(',');
 for (var i = 0; i < seriesTwo.length; i++) {
 seriesTwo[i] = parseInt(seriesTwo[i]);
 }
 $(document).ready(function () {
 chart = new Highcharts.Chart({
 chart: {
 renderTo: 'container',
 defaultSeriesType: 'line'
 },
 title: {
 text: 'ทดสอบ Line Chat'
 },
 xAxis: {
 categories: categories
 },
 yAxis: {
 title: {
 text: 'แกน Y'
 }
 },
 series: [
 { name: 'ข้อมูลที่ 1', data: seriesOne },
 { name: 'ข้อมูลที่ 2', data: seriesTwo }
 ]
 });
 });
 </script>
 </head>
 <body>
 <form id="form1" runat="server">
 <h4>Display line chart using Highcharts in Asp.net</h4>
 <asp:DropDownList ID="DropDownList1" runat="server">
 <asp:ListItem>2014</asp:ListItem>
 <asp:ListItem>2015</asp:ListItem>
<asp:ListItem>2016</asp:ListItem>
 <asp:ListItem>2017</asp:ListItem>
</asp:DropDownList>
 <asp:Button ID="Button1" runat="server" Text="Button" /&gt
 <br />
 <div>
 <div id="container" style="width: 500px; height: 500px"></div>
 </div>
 </form>
 </body>
 </html>



- ไฟล์นามสกุล .aspx.vb ป้อนคำสั่งดังนี้

Imports System.Data
Imports System.Data.SqlClient
Public Class highcharts
    Inherits System.Web.UI.Page
    Private dsSeries As New DataSet()
    Public hidValues1 As String
    Public hidValues2 As String
    Public hidXCategories1 As String
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    Public Function BindData() As DataSet
        Dim connString As String = ConfigurationManager.ConnectionStrings("SQLConnect").ToString()
        Dim con As New SqlConnection(connString)
        Dim cmd As New SqlCommand()
        cmd.Connection = con
        cmd.CommandText = "SELECT symbol,value1,value2 FROM tblTicker WHERE year ='" & DropDownList1.SelectedValue & "'"
        Dim da As New SqlDataAdapter(cmd)
        Try
            Dim ds As New DataSet()
            da.Fill(ds)

            Return ds
        Catch ex As Exception
            Throw ex
        End Try
    End Function

    Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim ri As Integer = 0
        'If Not IsPostBack Then
        dsSeries = BindData()
        'End If
        If dsSeries Is Nothing Then
            Return
        End If
        For Each dr As DataRow In dsSeries.Tables(0).Rows
            hidXCategories1 = (hidXCategories1 & dr("symbol").ToString()) + ","
            hidValues1 = (hidValues1 & dr("value1").ToString()) + ","
            hidValues2 = (hidValues2 & dr("value2").ToString()) + ","
            ri += 1
        Next
        If ri > 0 Then
            hidXCategories1 = Left(hidXCategories1, hidXCategories1.Length - 1)
            hidValues1 = Left(hidValues1, hidValues1.Length - 1)
            hidValues2 = Left(hidValues2, hidValues2.Length - 1)
        End If
    End Sub
End Class

- ไฟล์ web.config

 <configuration> 
 <system.web> 
 <compilation debug="true" strict="false" explicit="true" targetFramework="4.5" /> 
 <httpRuntime targetFramework="4.5" /> 
 </system.web> 
 <connectionStrings> 
 <add name="SQLConnect" connectionString="server=ชื่อServer;database=ชื่อDatabase;uid=sa;password=1234;" /> 
 </connectionStrings> 
 </configuration>

ให้ทำการกำหนด ชื่้อ Server, ชื่อ Database , ชื่อ User และรหัสผ่าน ให้ตรงกับที่กำหนดใน SQL Server

ตัวอย่างผลลัพธ์

สวัสดีมีกราฟใช้งาน

12 สิงหาคม 2558

Configuring IIS, ASP.NET, and SQL Server

เมื่อเราสร้างเว็บแล้วทำการ config web ผ่าน IIS แล้วเกิด Error

Server Error in '/' Application.


Parser Error

Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately.

Parser Error Message: Could not load type....


เราต้องมาแก้ปัญหาที่ IIS โดยเข้าไปกำหนดค่า Configuration ภาย้ใน IIS ดังนี้

การกำหนดค่า Configuring IIS, ASP.NET, and SQL Server

อ้างอิงจากเว็บ
http://www.codeproject.com/Articles/674930/Configuring-IIS-ASP-NET-and-SQL-Server

การกำหนดสิทธิให้กับ domain ย่อยๆ ให้ทำดังนี้

ไปที่ IIS เข้าไปที่ Default Web Site
ไปคลิกขวาที่ Floder ของเรา แล้วเลือกรายการ Convert to Application




จะปรากฎหน้าต่าง Add Application ให้คลิกปุ่ม OK




















ขั้นต่อมา

ที่ SQL Server Management Studio ให้ไปกำหนดสิทธิ์
โดยคลิกขวาที่ ชื่อฐานข้อมูล เลือก Properties
เลือก Permissions คลิกปุ่ม Search
ที่หน้าต่าง Select Users or Roles กำหนด NT AUTHORITY\SYSTEM
ไปกำหนดสิทธ์ (Grant) ในส่วนของ Connect ให้ติ๊กเครื่องหมายถูกที่ช่อง Grant


เสร็จเรียบร้อย โรงเรียน IIS

สวัสดีมีเว็บใช้

04 สิงหาคม 2558

การสร้าง VFP COM Object

พอดีเพื่อนๆ ที่ได้เขียนโปรแกรม VFP มีการนำเสนอ โปรเจกต์ พิมพ์รายงานของ VFP ผ่านทาง ASP และ ASP.net เลยทำให้อยากทำบ้าง ดังนั้นก็เป็นที่มาของวิธีการสร้าง VFP COM Object ขึ้นมาเพื่อจะได้ทำให้ VFP โลดแล่นอยู่บนเว็บบ้าง

การสร้าง VFP COM Object
1. เปิดโปรแกรม VFP (ตอนเปิดให้คลิกเมาส์ปุ่มขวา แล้วเลือก Run as Administrator) จากนั้นพิมพ์คำสั่งที่ Command Window
      MODIFY COMMAND myclass.prg

2. ทำการป้อนคำสั่งดังนี้
** คำสั่งได้มาจากเว็บ -> http://www.tek-tips.com/faqs.cfm?fid=3381

DEFINE CLASS myclass AS session OLEPUBLIC

PROCEDURE MyDoCmd(cCmd as String) as Variant ;
helpstring "Execute a VFP cmd"
&cCmd && just execute parm as if it were a fox command

FUNCTION MyEval(cExpr as String) ;
helpstring "Evaluate a VFP expression"
RETURN &cExpr && evaluate parm as if it were a fox expr

FUNCTION Error(nError, cMethod, nLine)
COMreturnerror(cMethod+' err#='+str(nError,5)+;
' line='+str(nline,6)+' '+message(),_VFP.ServerName)
&& this line is never executed

ENDDEFINE


ทำการบันทึก โดยกดปุ่ม Ctrl + W

3. ทำการ build dll เพื่อสร้าง .dll โดยพิมพ์คำสั่งที่ Command Window

BUILD PROJECT myserver FROM myclass

BUILD DLL myserver from myserver recomp

หากไม่เกิดข้อผิดพลาดใดๆ เป็นอันเสร็จ ก็จะได้ไฟล์ชื่อ myserver.dll เรียบร้อย
ทำการทดสอบว่า ไฟล์ dll และคำสั่งที่สร้างขึ้น ใช้ได้หรือไม่ โดยพิมพ์คำสั่งที่ Command Window

ox = CREATEOBJECT("myserver.myclass")

?ox.myeval("DATE()")


หากขึ้นวันที่บนหน้าจอแสดงว่า สำเร็จเรียบร้อย
ก็สามารถนำเอา myserver.dll ไปใช้ได้

สำหรับการเรียกใช้ใน asp.net ก็ให้ไปที่เมนู PROJECT เลือกรายการ Add Reference
จะเข้าสู่หน้าต่าง Reference Manage ให้คลิกเลือกที่ COM -> Type Libraries แล้วหาไฟล์ myserver.dll ที่เราสร้างขึ้น แล้วคลิกเลือก

ส่วนการเขียนคำสั่ง ใน ASP.Net เช่น ที่ Form -> Load

Dim oVFP As New myserver.myclass
Dim nRecno As Integer
Response.Write(oVFP.MyEval("time()"))

oVFP.MyDoCmd("USE c:\customer")

While oVFP.MyEval("!EOF()")
    nRecno = nRecno + 1
    Response.Write(nRecno)
    Response.Write(oVFP.MyEval("code"))
    Response.Write(oVFP.MyEval("name"))

    oVFP.MyDoCmd("SKIP")

End While

oVFP.MyDoCmd("USE IN customer")


สำหรับคำสั่งต่างๆ ที่เหลือก็ทดสอบดู หรือนำไปประยุกต์ตามต้องการ

หากต้องการนำไฟล์ myserver.dll ไปใช้งานกับเครื่องที่ไม่ได้ติดตั้งโปรแกรม Visual FoxPro ต้องทำการติดตั้้ง Runtime ของ Visual FoxPro ไปแทน


สวัสดี   /:-{)

29 พฤษภาคม 2558

SQL Server - OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".

การ Query ข้อมูลจากตาราง Excel ด้วย SQL Server ด้วยคำสั่ง

SELECT * FROM 
OPENROWSET('Microsoft.ACE.OLEDB.12.0',
                            'Excel 12.0;Database=D:\YourExcelFile.xlsx;
                             User=Admin;Password=;HDR=Yes;IMEX=1', 
                             'SELECT * FROM [Sheet1$]');

แล้วเกิด Error เช่น

OLE DB provider "Microsoft.ACE.OLEDB.12.0" for linked server "(null)"
returned message "Unspecified error"

ก่อนอื่นก็ต้องไปดูที่ โปรแกรม  Microsoft SQL Server Manage Studio

เปิดหน้าต่าง New Query... แล้วพิมพ์คำสั่ง

exec sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE
exec sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE WITH OVERRIDE

กดปุ่ม F5
จากนั้น ที่หน้าต่าง Object Explorer ดูตรง Linked Servers ว่าเรามี Provider ชื่อ Microsoft.ACE.OLEDB.12.0 อยู่แล้ว ดังภาพ  



















จากนั้นคลิกเมาส์ปุ่มขวา เลือก Properties จากนั้นให้คลิกเลือกที่
Dynamic parameter และ Allow  inprocess แล้วคลิกปุ่ม OK














จากนั้นไปทำการสำรวจ folder ที่เป็นพื้นที่เก็บข้อมูลชั่วคราวหรือ Temp file ซึ่งก็จะอยู่ภายใต้ Folder ชื่อ C:\User\ชื่อผู้ใช้\AppData\Local (ไฟล์จะถูกซ่อนอยู่ แต่ละเครื่องอาจจะอยู่คนละที่กัน ลอง Search หาดู)

จากนั้นคลิกเมาส์ปุ่มขวาที่ folder ชื่อ Temp เลือก Properties 
แล้วเอา Attribute ตรง Read-Only ออก
 






















และทำเช่นเดียวกันกับ โฟลดเดอร์ Temp ที่อยู่ใน
C:\Windows\ServiceProfiles\LocalService\AppData\Local



เท่านี้ก็ทำให้เราสามารถแก้ไขปัญหา Error ที่เกิดขึ้นกับการเปิดไฟล์ Excel จากภายนอกได้แล้ว

สวัสดี มีความสุข 

28 มีนาคม 2558

ASP.NET connect to a DBF file

การเชื่อมต่อกับไฟล์ dbf ด้วย ASP.NET

ก่อนอื่นให้ทำการ Download File VFPOleDB จากนั้นทำการติดตั้ง โปรแกรม (VFPOLEDBSetup.msi)

1. เปิดโปรแกรม Visual Studo 20xx  เลือก New Project....
2. คลิกที่รายการ Web -> ASP.NET Empty Web Application แล้วตั้งชื่อที่ช่อง Name: WebForm1
3. ทำการ Add -> New Item... -> Web Form ขึ้นมา

4. ไปที่เมนู PROJECT หรือ WEBSITE เลือกรายการ Add Refrence...
5. ที่หน้าต่าง Reference Manager ให้เลือกที่รายการ COM -> Type Libraries
     ติ๊กเลือก Microsoft OLE DB Provider for Visual FoxPro 7.0 Type Library ตามภาพ แล้วคลิก OK














6. ทำการเขียนคำสั่ง ในส่วนของ Web Form เช่น
ต้องการเรียกดูข้อมูลจากตาราง D:\CSS\Data\GROUP.dbf
ส่วนคำสั่ง SQL ทำการ Select ข้อมูล เฉพาะที่กำหนด 
เขียนคำสั่ง ดังนี้ (ปรับเปลี่ยนตามข้อมูลของแต่ละท่าน)

Imports System.Data

Partial Class WebForm1
    Inherits System.Web.UI.Page
    Dim DataDBF As String = "D:\CSS\Data\"
    Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
    Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing
    Dim retVal As Integer = 0
    Dim reader As OleDb.OleDbDataReader
    Dim cSearch As String
    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Try

            'if use visual fox pro Connect to a single DBF-file
            ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
            dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
            dBaseConnection.Open()
            cSearch = "อ"      ' ค้นหาตัวอักษร อ
            sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
            dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
            'myDA = New OleDbDataAdapter(comm)
            'dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)
            retVal = dBaseCommand.ExecuteNonQuery()
            reader = dBaseCommand.ExecuteReader()
            While reader.Read()
                Response.Write(reader("gr_code").ToString & " ")
                ' second column
                Response.Write(reader("gr_desc").ToString & " ")
                'intCount = intCount + 1
            End While
            dBaseConnection.Close()
        Catch ex As OleDb.OleDbException
            Response.Write(ex.Message)
        End Try
    End Sub
End Class

ทำการบันทึกแล้วเรียกดู จะปรากฏข้อมูล ดังภาพ

















จากตัวอย่างข้างต้นเป็นตัวอย่างการใช้ออปเจ็กต์ Reader เพื่ออ่านเรคคอร์ดทีละรายการเพื่อทำการแสดงโดยผ่านคำสั่ง HTML ภายใต้ Response.Write

สำหรับตัวอย่างต่อไปนี้ จะเป็นการแสดงข้อมูลผ่านทาง GridView
ให้ทำการลาก GridView มาไว้ที่เว็บฟอร์ม ดังภาพ


ตั้งชื่อ GridView -> GridView1









จากนั้น ก็ดัดแปลงคำสั่งใหม่ดังนี้

Imports System.Data

Partial Class WebForm1
    Inherits System.Web.UI.Page

    Dim DataDBF As String = "D:\CSS\Data\"
    Dim ConnectionString As String = String.Empty, sCommand As String = String.Empty
    Dim dBaseConnection As OleDb.OleDbConnection = Nothing, dBaseCommand As OleDb.OleDbCommand = Nothing

    Dim cSearch As String

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load

        Try
            'if use visual fox pro Connect to a single DBF-file
            ConnectionString = "Provider=vfpoledb;Data Source=" & IO.Path.GetDirectoryName(DataDBF) & ";Collating Sequence=machine;"
            dBaseConnection = New OleDb.OleDbConnection(ConnectionString)
            dBaseConnection.Open()
            cSearch = "อ"      ' ค้นหาตัวอักษร อ
            sCommand = "Select gr_code,gr_desc from group.dbf where gr_desc like '%" & cSearch & "%' "
            dBaseCommand = New OleDb.OleDbCommand(sCommand, dBaseConnection)

            '
            Dim dt As DataTable = GetData(dBaseCommand)
            GridView1.DataSource = dt
            GridView1.DataBind()
            '
            dBaseConnection.Close()
        Catch ex As OleDb.OleDbException
            Response.Write(ex.Message)
        End Try
    End Sub


    Private Function GetData(ByVal cmd As OleDb.OleDbCommand) As DataTable
        Dim dt As New DataTable()
        Dim sda As New OleDb.OleDbDataAdapter()
        cmd.CommandType = CommandType.Text
        cmd.Connection = dBaseConnection
        sda.SelectCommand = cmd
        sda.Fill(dt)
        sda.Dispose()
        Return dt
    End Function
End Class

หลังจากนั้น ก็ทำการบันทึก แล้วเรียกโปรแกรมดู

จะปรากฎข้อมูลดังตัวอย่าง




















สวัสดี มีสุข



06 มีนาคม 2558

SQL Server - การสร้าง Login , User และกำหนดสิทธิ แบบง่ายๆ

ตัวอย่างนี้นำเสนอ การสร้าง Login ชื่อ Kasem เพื่อเข้าใช้งาน SQL Server จากนั้นทำการเรียกฐานข้อมูลชื่อ myData แล้วทำการสร้าง User ภายใต้ฐานข้อมูล myData จากนั้นทำการกำหนดสิทธิในระดับ Database และ ระดับ Object

---ต้อง Login เป็น sa ก่อน

USE master
GO
-- สร้าง Login เพื่อเข้าใช้งาน SQL Server
CREATE LOGIN kasem
WITH PASSWORD ='P@ssw0d'
GO
-- เปิด Database ที่ต้องการสร้าง User
USE myData
GO
-- สร้าง User ให้เข้าใช้งาน Database ได้ แต่ทำอะไรไม่ได้
CREATE USER Kasem
GO

------- ระดับ DataBase จะมีผลกับทุกๆ ตาราง วิว etc....
-- Grant ระดับ database ว่าให้ user Kasem ทำอะไรได้บ้าง
-- การ grant User เพื่อให้สิทธิใช้ เรียกดูข้อมูลได้ อย่างเดียว
GRANT SELECT TO [Kasem] WITH GRANT OPTION
-- การ grant User เพื่อให้สิทธิเพิ่มข้อมูลได้
GRANT INSERT TO [Kasem] WITH GRANT OPTION
-- ส่วน UPDATE, DELETE หรือ อื่นๆ ก็กำหนดตามต้องการ

------- ระดับ Object จะมีผลกับตัวที่ระบุ
-- การ Grant ระดับ Object เลือกเฉพาะตารางหรือ object ที่ต้องการ
GRANT UPDATE ON vwStudent TO Kasem
GRANT DELETE ON vwStudent TO Kasem

"I Believe in You"

Copyright(c) 2007 - 2022 by Kasem Kamolchaipisit.