2012年3月31日 星期六

win7 Arial 字體不見,設定方式

真是,被打敗;好好常用的字為何不用了??
奇怪的作法
底下是 win7 64bit 將 Arial 字體在應用程式中能顯示並使用的方法!





2012年3月29日 星期四

AppSettingsReader 類別

參考MSDN:AppSettingsReader 類別 
--
重點在:
下列範例會建立包含 區段的組態檔,然後再使用 AppSettingsReader 讀取剛產生的設定。

ConfigurationManager.RefreshSection("appSettings")


Public Shared Sub Main(ByVal args() As String)
            ' Get the count of the Application Settings.
            Dim appStgCnt As Integer = ConfigurationManager.AppSettings.Count
            Dim asName As String = "AppStg" + appStgCnt.ToString()
            ' Get the configuration file.
            Dim config As System.Configuration.Configuration = _
            ConfigurationManager.OpenExeConfiguration( _
            ConfigurationUserLevel.None)
            ' Add an Application setting.
            config.AppSettings.Settings.Add(asName, _
            DateTime.Now.ToLongDateString() + " " + _
            DateTime.Now.ToLongTimeString())
            ' Save the configuration file.
            config.Save(ConfigurationSaveMode.Modified)
            ' Force a reload of a changed section.
            ConfigurationManager.RefreshSection("appSettings")
            Console.WriteLine()
            Console.WriteLine("Application Settings:")
            ShowAppSettings()
            Console.WriteLine()
            Console.WriteLine("Press 'Enter' to exit.")
            Console.ReadLine()
End Sub 'Main



詳細請參考MSDN
--
相信很多人都被這 app.config 困擾,為何要關閉再啟動一次才生效的問題!

2012年3月28日 星期三

抓取月份的最後一天

這方法很多種,就看怎抓而已
參考來源
--
參考範例,是用白話方式取得的
下個月 yyyy/mm/1  減 1 天 就是當月最後一天了
程式:
int nYear = 2006;
int nMonth = 10; 
DateTime oDate = new DateTime(nYear, nMonth, 1).AddMonths(1).AddDays(-1);

2012年3月27日 星期二

SQL Server 2008 R2 SSMS 管理工具中的 IntelliSense 功能失效

真是...什麼都遇得到
g了好久,找到2篇
參考1
參考2
--
官網:kb2507770 (下載修正檔hotfix)
下載:SQLServer2008R2_RTM_CU7_2507770_10_50_1777_x64

暈倒
我的不能裝..(版本:MS-SQL 2008 R2 SP1 Express)
訊息:SQL Server 執行個體 Shared Component 的版本與 SQL Server 更新所預期的版本不符。已安裝的 SQL Server 產品版本為 10.51.2500.0,而預期的 SQL Server 版本為 10.50.1600.1。

怪了,新的版本一樣 IntelliSense 功能失效啊....
真是...
等待新的 fix 了

---
等不及的,也是有解法:
移除:MS-SQL 2008 R2 SP1 Express 後 , 再安裝一次就可以了

Visual Studio 11 Beta

Visual Studio 11 Beta 下載 
--
果然跟隨 win8  有消息了
有興趣要先試試 beta 版本,可以到官網下載唷!

須搭配:NET Framework 4.5 Beta

不過呢,還沒有繁體版(要再一陣子吧)

2012年3月26日 星期一

利用UNION ALL整合統計合併資料

參考來源

如何下SQL語法統計年,月,季的資料

參考來源

使用 ROW_NUMBER 來實現群組編排序號


Select ROW_NUMBER() OVER(PARTITION BY gName ORDER BY gName DESC) AS 'Row Number',
gName
From @table

財星會計軟體 (系統)














財星會計軟體 (系統)
  市面會計軟體多又多,本會計系統經過製作業工廠千萬人的使用;將繁鎖的操作過程都簡化
只要輕輕鬆鬆您就將各項帳完成!
  本工作室(池龍工作室 http://wushi.myftp.org)好不容易取得總代理,本系統在大陸(台商)已運作10年以上!
  歡迎來信索取試用註冊碼,好的不怕您來試用;堅持品質!
  懂會計的您,您一定要來試試看唷!
  本會計系統區分:單機版,網路版(可跨兩岸,製造業..等等歡迎下載試用)

ERP_ACC會計安裝說明.rar  (含登入系統後的功能選單畫面)
https://www.asuswebstorage.com/navigate/share/GYYM47FGNY

ERP_ACC.part01.exe
https://www.asuswebstorage.com/navigate/share/GYYWLUBGNY

ERP_ACC.part02.rar
https://www.asuswebstorage.com/navigate/share/GYYQPU6GNY

ERP_ACC.part03.rar
https://www.asuswebstorage.com/navigate/share/GYYBIGBGNY

ERP_ACC.part04.rar
https://www.asuswebstorage.com/navigate/share/GYY4JIBGNY

ERP_ACC.part05.rar
https://www.asuswebstorage.com/navigate/share/GYYUKABGNY

ERP_ACC.part06.rar
https://www.asuswebstorage.com/navigate/share/GYYPWPBGNY

ERP_ACC.part07.rar
https://www.asuswebstorage.com/navigate/share/GYY975BGNY



Box.net雲端下載:

ERP_ACC會計安裝說明.rar
http://www.box.com/s/6b61543374ff38e51c74
ERP_ACC.part01.exe
http://www.box.com/s/82493a9484b5555d5481
ERP_ACC.part02.rar
http://www.box.com/s/a7d2eaf677a8f81e8479
ERP_ACC.part03.rar
http://www.box.com/s/cd20972203571eb295ac
ERP_ACC.part04.rar
http://www.box.com/s/06e8f0733c9c87acd9d7
ERP_ACC.part05.rar
http://www.box.com/s/c3ec6cf49a4221e53cb4
ERP_ACC.part06.rar
http://www.box.com/s/eda939e3c1c8f88cc3b3
ERP_ACC.part07.rar
http://www.box.com/s/07bc57863dc386c30de3
ERP_ACC.part08.rar
http://www.box.com/s/d911e737c60b6c5b0166
ERP_ACC.part09.rar
http://www.box.com/s/a83c1dd4b7a41b547027
ERP_ACC.part10.rar
http://www.box.com/s/848d19bb71225237eb6d
ERP_ACC.part11.rar
http://www.box.com/s/b05bffb87076aa698cc4
ERP_ACC.part12.rar
http://www.box.com/s/6859f4cf17da6c5d312b
ERP_ACC.part13.rar
http://www.box.com/s/e17abf5160963afeb242
ERP_ACC.part14.rar
http://www.box.com/s/d5d7edc91ce06ae23c2f
ERP_ACC.part15.rar
http://www.box.com/s/c6d77584f3cabac177f3
ERP_ACC.part16.rar
http://www.box.com/s/ce540ff330457a8400b6
ERP_ACC.part17.rar
http://www.box.com/s/5790e57e53137ff39a3b
ERP_ACC.part18.rar
http://www.box.com/s/52342c63574e648f2769
ERP_ACC.part19.rar
http://www.box.com/s/6c3207589bf8cac208e0
ERP_ACC.part20.rar
http://www.box.com/s/ad7da986845efc8c5c3e
ERP_ACC.part21.rar
http://www.box.com/s/7c97eacc64f6fe521dda
ERP_ACC.part22.rar
http://www.box.com/s/f5ef3414b5927f5cb8ec
ERP_ACC.part23.rar
http://www.box.com/s/e9fbec1191b2ad9ccaf4
ERP_ACC.part24.rar
http://www.box.com/s/eb2aa160a6f953b7d2ef
ERP_ACC.part25.rar
http://www.box.com/s/3b09d3d6e522adcf58ef
ERP_ACC.part26.rar
http://www.box.com/s/aa7c57f9a7201e3f294c
ERP_ACC.part27.rar
http://www.box.com/s/5b0ea27d7050997c2526

2012年3月25日 星期日

CrystalReport小數後不顯0

參考來源
--
格式化欄位 —> 數位 -> 自定義 -> 數位 -> 小數位數(D) -> 編輯公式 :

if Right(ToText({你的報表欄位},4),4) ="0000" then
0
else if Right(ToText({你的報表欄位},4),3) ="000" then
1
else if Right(ToText({你的報表欄位},4),2) ="00" then
2
else if Right(ToText({你的報表欄位},4),1) ="0" then
3
else
4

2012年3月22日 星期四

取系統路徑 Windows Special Folders

參考1
參考2
--
System.Environment.GetFolderPath(Environment.SpecialFolder.Desktop)


TextBox1.Text = Environ("systemroot")
Environ內的參數請搭配下列系統參數即可(將%%中的參數填入):
Windows系統變數
以下為Windows系統變數(C語言中使用)
1 %SystemDrive%:系統磁碟機,預設是C:
2 %SystemRoot%:系統根目錄,預設是C:\WINNT或C:\WINDOWS
3 %SystemDirectory%:系統目錄,預設是C:\WINNT\System32或C:\WINDOWS\System32
4 %WinDir%:Windows目錄,預設是C:\WINNT或C:\WINDOWS
5 %ProgramFiles%:應用程式目錄,預設是C:\Program Files
6 %Temp%、%Tmp%:暫存檔目錄 %HomeDrive%:使用者目錄的磁碟機
7 %HomePath%:使用者家目錄
8 %OS%:作業系統名稱,其值固定為Windows_NT
9 %UserDomain%:包含使用者帳號的網域名稱,或者電腦名稱
10 %UserName%:使用者帳號名稱
11 %ALLUSERSPROFILE%:All Users設定檔的資料夾位置。
12 %APPDATA%:目前使用者的Application Data資料夾位置。
13 %CD%:目前的工作資料夾。
14 %CLIENTNAME%:目前使用者的NETBIOS電腦名稱。
15 %CMDCMDLINE%:處理目前命令提示字元視窗命令的cmd.exe的完整路徑。
16 %CMDEXTVERSION%:目前Command Processor Extensions的版本。
17 %CommonProgramFiles%:Common Files資料夾的路徑。
18 %COMPUTERNAME%:電腦名稱。
19 %COMSPEC%::命令提示字元視窗的解譯程式路徑,通常與%CMDCMDLINE%相同。
20 %DATE%:目前的系統日期。
21 %ERRORLEVEL%:最近執行過的命令的錯誤碼;非零的值表示發生過的錯誤碼。
22 %HomeDrive%:使用者目錄的磁碟機。
23 %HOMESHARE%:目前使用者共用資料夾的網路路徑。
24 %LOGONSEVER%:目前使用者所登入的網路控制器名稱。
25 %NUMBER_OF_PROCESSORS%:電腦的處理器數量。
26 %Path%:執行檔的搜尋路徑。

Sql Server 2008 資料庫設計與應用 筆記 (SQL Server 2008)


請參考來源
--
感覺上還不錯 ; 有興趣的可參考

引用了底下,其它詳細請至原處
---
--P11-41

WHEN MATCHED THEN -- 兩者皆有的資料
WHEN NOT MATCHED BY TARGET THEN --目標資料表沒有,而來源有的資料
WHEN NOT MATCHED BY SOURCE THEN --目標資料表有,而來源沒有的資料

--P12-4 規則物件
ALTER TABLE 員工
ADD CHECK (性別 IN ('男','女')),
CHECK (出生日期>='1911/01/01' AND 出生日期<=GETDATE()),
CHECK (住家電話 IS NOT NULL OR 手機電話 IS NOT NULL)
--利用範圍建立規則
CREATE RULE RULE_PRICE
AS
@PRICE>=10 AND @PRICE<=50

--利用清單建立規則
CREATE RULE RULE_CATEGORYNAME_01
AS
@CATEGORYNAME IN ('茶類','果汁')
CREATE RULE RULE_CATEGORYNAME_02
AS
@CATEGORYNAME NOT IN ('酒類')

--繫結 規則物件至資料行
EXEC sp_bindrule Rule_Price,'產品資料.單價'
--解除與資料表資料行的繫結
EXEC sp_unbindrule '產品資料.單價'

--繫結 預設值 至資料行
EXEC sp_bindefault df_city '產品資料.倉儲地點'
--解除與資料表資料行的繫結
EXEC sp_unbindefault '產品資料.倉儲地點'

SQL 2008 整合 SP1

請至來源處

直接執行預存

exec  [TEST].[dbo].[sp_PNO]

DATAGRIDVIEW載入DBF檔


DBF檔請先匯出成dbase IV 格式

Dim cnn As OleDb.OleDbConnection
cnn = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\POLLYPRO\DATA\NSAMPLE;Extended Properties=DBASE IV;")
Dim da As New OleDbDataAdapter("Select * From test.DBF", cnn)
Dim ds As New DataSet
da.Fill(ds)
GridView1.DataSource = ds.Tables(0)

2012年3月21日 星期三

清除 OS 暫存檔 bat


@echo off
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"

2012年3月20日 星期二

CrystalReport 使用方法 & 引用參考 問題集

請參考
--
看來轉到 vs 2010 要使用 crystal report 會遇到這些問題了!!
得親自試試看了!

先記錄起來,底下引用:
在VISUAL STUDIO 2010環境下開發Crystal Report需檢查是否裝有底下程式:
crystal report 官方下載網頁
SAP Crystal Reports, version for Visual Studio 2010 
SAP Crystal Reports runtime engine for .NET Framework 4 (32-bit)

---
果然是真的,遇上了; 出現:未知的查詢引擎錯誤
暈倒....

這是新版的 for vs 2010

--------------
2012/3/21
更新後,卻變成:載入報表失敗!

2012/3/22
解決方式:
須在 app.config 加入 () 這一區段
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

倒是奇怪,測很多台這樣都ok ; 為開發這台不行...OS 出問題了!?...ORZ

SqlDataAdapter 範例(ADO.NET)

引用來源
--
Imports System.Data.SqlClient
Public Class User_Edit
Inherits System.Windows.Forms.Form
Dim myConnection As SqlConnection
Dim myCommand As SqlCommand
Dim ra As Integer

Private Sub btnUpdate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnUpdate.Click

myConnection = New SqlConnection("server=.\SQLExpress;Initial Catalog=BillMasterDB;Integrated Security=True")
myCommand = New SqlCommand("update Tbl_UserDetails set Usr_Fname='" + txtFname.Text + "',Usr_Lname='" + txtLname.Text + "',Usr_Gender='" + txtGender.Text + "',Usr_DOB='" + txtDOB.Text + "',Usr_Address1='" + txtAddr1.Text + "',Usr_Address2='" + txtAddr2.Text + "',Usr_City='" + txtCity.Text + "',Usr_State='" + txtState.Text + "',Usr_Country='" + txtCountry.Text + "',Usr_Zip='" + txtZip.Text + "',Usr_Email='" + txtEmail.Text + "',Usr_Phone='" + txtPhone.Text + "',Usr_Mobile='" + txtMobile.Text + "' where Usr_Fname='" + txtFname.Text + "' ", myConnection)
Try
myConnection.Open()
ra = myCommand.ExecuteNonQuery()
myConnection.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
myConnection = New SqlConnection("server=.\SQLExpress;Initial Catalog=BillMasterDB;Integrated Security=True")
myCommand = New SqlCommand("update Tbl_User set Usr_Type='" + txtUsertype.Text + "',Usr_Pwd='" + txtPass.Text + "' where Usr_Name= '" + txtUsername.Text + "' ", myConnection)
Try
myConnection.Open()
ra = myCommand.ExecuteNonQuery()
MessageBox.Show("Updated")
myConnection.Close()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub

Private Sub btnCancel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.Close()
End Sub

Private Sub User_Edit_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim conn As SqlConnection
Dim da As New SqlDataAdapter
Dim ds As New DataSet
conn = New SqlConnection("server=.\SQLExpress;Initial Catalog=BillMasterDB;Integrated Security=True")
conn.Open()
da = New SqlDataAdapter("select Tbl_User.Usr_Name,Tbl_User.Usr_Type,Tbl_User.Usr_Pwd,Tbl_UserDetails.Usr_Fname,Tbl_UserDetails.Usr_Lname,Tbl_UserDetails.Usr_Gender,Tbl_UserDetails.Usr_DOB,Tbl_UserDetails.Usr_Address1,Tbl_UserDetails.Usr_Address2,Tbl_UserDetails.Usr_City,Tbl_UserDetails.Usr_State,Tbl_UserDetails.Usr_Country,Tbl_UserDetails.Usr_Zip,Tbl_UserDetails.Usr_Email,Tbl_UserDetails.Usr_Phone,Tbl_UserDetails.Usr_Mobile from Tbl_User inner join Tbl_UserDetails on Tbl_User.Usr_Name=Tbl_UserDetails.Usr_Fname", conn)

ds = New DataSet("UserEdit")
da.Fill(ds, "UserEdit")
DataGridView1.DataSource = ds.Tables("UserEdit")
conn.Close()


txtUsername.Text = User_Management.DataGridView1.CurrentRow.Cells(0).Value.ToString()
txtUsertype.Text = User_Management.DataGridView1.CurrentRow.Cells(1).Value.ToString()
txtPass.Text = User_Management.DataGridView1.CurrentRow.Cells(2).Value.ToString()
txtFname.Text = User_Management.DataGridView1.CurrentRow.Cells(3).Value.ToString()
txtLname.Text = User_Management.DataGridView1.CurrentRow.Cells(4).Value.ToString()
txtGender.Text = User_Management.DataGridView1.CurrentRow.Cells(5).Value.ToString()
txtDOB.Text = User_Management.DataGridView1.CurrentRow.Cells(6).Value.ToString()
txtAddr1.Text = User_Management.DataGridView1.CurrentRow.Cells(7).Value.ToString()
txtAddr2.Text = User_Management.DataGridView1.CurrentRow.Cells(8).Value.ToString()
txtCity.Text = User_Management.DataGridView1.CurrentRow.Cells(9).Value.ToString()
txtState.Text = User_Management.DataGridView1.CurrentRow.Cells(10).Value.ToString()
txtCountry.Text = User_Management.DataGridView1.CurrentRow.Cells(11).Value.ToString()
txtZip.Text = User_Management.DataGridView1.CurrentRow.Cells(12).Value.ToString()
txtEmail.Text = User_Management.DataGridView1.CurrentRow.Cells(13).Value.ToString()
txtPhone.Text = User_Management.DataGridView1.CurrentRow.Cells(14).Value.ToString()
txtMobile.Text = User_Management.DataGridView1.CurrentRow.Cells(15).Value.ToString()


End Sub
End Class

datagridview 自動定位到最後一行

dataGridView1.CurrentCell = dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[0];

2012年3月19日 星期一

西元年轉民國年


SELECT CONVERT(VARCHAR(2),CONVERT(VARCHAR(4),GETDATE(),20) - 1911) + '/' +
        SUBSTRING(CONVERT(VARCHAR(10),GETDATE(),20),6,2) + '/' +
        SUBSTRING(CONVERT(VARCHAR(10),GETDATE(),20),9,2)

MS SQL 取得所有資料庫名稱

select name from master.dbo.sysdatabases

2012年3月18日 星期日

TableDiff.exe 工具

引用來源
TableDiff.exe GUI
參考3
sqltablediff 這個較ok GUI
---
It's installed on the server in the:

"C:\Program Files\Microsoft SQL Server\90\COM\TableDiff.exe"
if your SQL Server is installed in the program files on c: drive.



Example use:

This compares 2 tables in the same database on the same server and creates a new table called DiffsTable that holds the differences:



"C:\Program Files\Microsoft SQL Server\90\COM\tablediff.exe" -sourceserver MyServer1
                                                             -sourcedatabase MyDatabase1
                                                             -sourcetable MyTable1
                                                             -destinationserver MyServer1
                                                             -destinationdatabase MyDatabase1
                                                             -destinationtable MyTable2
                                                             -et DiffsTable


This compares 2 tables in the same database on the same server and creates a new table called DiffsTable that holds the differences and

creates a T-SQL script file at d:\MyTable1_MyTable2_diff.sql

that holds the UPDATE/INSERT/DELETE statements to synchronize the 2 tables:



"C:\Program Files\Microsoft SQL Server\90\COM\tablediff.exe" -sourceserver MyServer1
                                                             -sourcedatabase MyDatabase1
                                                             -sourcetable MyTable1
                                                             -destinationserver MyServer1
                                                             -destinationdatabase MyDatabase1
                                                             -destinationtable MyTable2
                                                             -et DiffsTable
                                                             -f d:\MyTable1_MyTable2_diff.sql

---
C:\Program Files\Microsoft SQL Server\90\COM> tablediff.exe -sourceserver COMPUTERNAME1 -sourcedatabase MyDBName -sourcetable MyTable -sourceuser sa -sourcepassword 17940ufddjf9u32jrkf -sourcelocked -destinationserver COMPUTERNAME2 -destinationdatabase MyDBName -destinationtable MyTable -destinationuser sa -destinationpassword 4738er703urdf14j -f test.sql

兩個資料表互相比對更新的SQL指令


DECLARE 
@ris_area_code char(8),@area_code varchar(5),@area_name as nvarchar(10)
DECLARE
mycursor CURSOR FOR
select ris_area_code,area_code,area_name
from new_ris_area Where area_code <>''

open mycursor
FETCH NEXT FROM mycursor INTO @ris_area_code,@area_code,@area_name 
WHILE @@FETCH_STATUS = 0
 begin
 Update StateZip Set village_prefix=@ris_area_code
 ,StateZip_name=@area_name
 Where StateZip_Id=@area_code
 FETCH NEXT FROM mycursor INTO @ris_area_code,@area_code,@area_name 
 end

CLOSE mycursor
DEALLOCATE mycursor

比對差異資料的SQL

參考1
參考2
--
EXCEPT 會從左側查詢中傳回在右側查詢中找不到的任何個別值。
INTERSECT 會傳回 INTERSECT 運算元左右兩側查詢都傳回的任何個別值。

select * from a
execept  (或 intersect)
select * from b

SQL - 快速的複製一個資料表(Table),並成為另一個資料表(Table)

參考來源
--
用法:
select * into 備份的資料表 from 來源資料表

例:
select *  into book_tmp from book

也可加入條件: where
如下:
select *  into book_tmp from book  where isbn='xxx'

SQL Server 有連線數限制嗎

參考:測的時候到了25人就連不上了 ?
微軟:SQL Server 的最大容量規格 
 

google adsense 變簡體的困擾





---
在前幾天起 , adsense 的url 就一直都是 zh 而已
若要變繁體,改成: zh-tw 即可

2012年3月16日 星期五

VB.NET - TechTalkz.com

VB.NET - TechTalkz.com

mdi icon

此用法是當父開啟子視窗後,加在左上角的 icon 圖,秀出我們自己的icon 而非 vs 內定的 icon
此問題,困擾我好久,原是來是前面(父視窗呼叫子視窗時)就要先處理
--
參考引用
--
 frm_Child1 = new FormChild
AddHandler frm_Child1.Shown, AddressOf ShowChildIcon
frm_Child1.Name = formText
frm_Child1.MdiParent = Me
frm_Child1.show
and sub:

Private Sub ShowChildIcon(ByVal sender As Object, ByVal e As
System.EventArgs)
sender.windowstate = FormWindowState.Maximized
End Sub

2012年3月15日 星期四

sql Server 中恢復 IDENTITY (自動編號) 的值

引用來源
--
IDENTITY(标识)列,也有很多人称之为自增列,在SQL Server 2000中,标识列通过IDENTITY来定义,下面是与获取最后插入记录的标识值有关的函数的一个示例说明


SQL Server 中,可以使用 SCOPE_IDENTITY()、 @@IDENTITY 、 IDENT_CURRENT() 来取得最后插入记录的值值,它们的区别在于:
SCOPE_IDENTITY() 返回插入到同一作用域中的 IDENTITY 列内的最后一个 IDENTITY 值。一个作用域就是一个模块——存储过程、触发器、函数或批处理。因此,如果两个语句处于同一个存储过程、函数或批处理中,则它们位于相同的作用域中。
@@IDENTITY 返回在当前会话的所有表中生成的最后一个标识值
IDENT_CURRENT() 返回为任何会话和任何作用域中的指定表最后生成的标识值

当一个表中的记录删除后如果再新加,SQL会在原来的 IDENTITY 基础上增加.我们可以用下面的命令来复位

DBCC CHECKIDENT(表名,RESEED,0)



下面是从一个朋友的Blog上传过来的.清空整个数据库的SQL语句

SET NoCount ON
   DECLARE @tableName varchar(512)
   Declare @SQL varchar(2048)
   SET @tableName=''
   WHILE EXISTS
   (  
   --Find all child tables and those which have no relations
   SELECT T.table_name   FROM INFORMATION_SCHEMA.TABLES T
          LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC    ON T.table_name = TC.table_name
     WHERE ( TC.constraint_Type = 'Foreign Key' OR TC.constraint_Type IS NULL )
         AND T.table_name NOT IN ( 'dtproperties', 'sysconstraints', 'syssegments' )
         AND Table_type = 'BASE TABLE'
         AND T.table_name > @TableName
         )
    Begin
        SELECT @tableName = min(T.table_name)    FROM INFORMATION_SCHEMA.TABLES T
        LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC    ON T.table_name=TC.table_name
           WHERE ( TC.constraint_Type = 'Foreign Key' OR TC.constraint_Type IS NULL )
         AND T.table_name NOT IN ( 'dtproperties', 'sysconstraints', 'syssegments' )
         AND Table_type = 'BASE TABLE'
         AND T.table_name > @TableName
         --Truncate the table
         SET @SQL = 'Truncate table '+ @TableName
         print (@SQL)
         Exec(@SQL)
     End
 
   SET @TableName=''
   WHILE EXISTS
   (
   --Find all Parent tables
     SELECT T.table_name     FROM INFORMATION_SCHEMA.TABLES T
     LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC     ON T.table_name = TC.table_name
     WHERE TC.constraint_Type = 'Primary Key'
     AND T.table_name <> 'dtproperties'
     AND Table_type='BASE TABLE'
     AND T.table_name > @TableName
     )
   Begin
     SELECT @tableName = min(T.table_name)   FROM INFORMATION_SCHEMA.TABLES T
          LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC   ON T.table_name=TC.table_name
     WHERE TC.constraint_Type = 'Primary Key'
     AND T.table_name <> 'dtproperties'
     AND Table_type = 'BASE TABLE'
     AND T.table_name > @TableName
     --Delete the table
   
        SET @SQL = ' delete from '+ @TableName
         print (@SQL)
         Exec(@SQL)
     --Reset identity column
         IF EXISTS ( SELECT *   FROM INFORMATION_SCHEMA.COLUMNS
             WHERE COLUMNPROPERTY(
             OBJECT_ID( QUOTENAME(table_schema)+ '.' + QUOTENAME(@tableName) ),
             column_name,'IsIdentity'
             ) = 1
           )

     DBCC CHECKIDENT(@tableName,RESEED,0)
   End
   SET NoCount OFF
1、先找出没有外键约束的表,truncate
2、有外键的表,先delete,再复位identity列

找出資料庫內所有自動編號的資料表+欄位

引用來源
---
這篇真是寶貴呀,太棒了!!

 SELECT QUOTENAME(t.TABLE_SCHEMA) + '.' + QUOTENAME(t.TABLE_NAME)  AS TableName,
c.COLUMN_NAME AS ColumnName,
c.DATA_TYPE AS 'DataType',
IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) AS CurrentIdentityValue,
CASE c.DATA_TYPE
WHEN 'bigint' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 9223372036854775807
WHEN 'int' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 2147483647
WHEN 'smallint' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 32767
WHEN 'tinyint' THEN (IDENT_CURRENT(t.TABLE_SCHEMA  + '.' + t.TABLE_NAME) * 100.) / 255
END AS 'PercentageUsed'
FROM INFORMATION_SCHEMA.COLUMNS AS c
INNER JOIN
INFORMATION_SCHEMA.TABLES AS t
ON c.TABLE_SCHEMA = t.TABLE_SCHEMA AND c.TABLE_NAME = t.TABLE_NAME
WHERE COLUMNPROPERTY(OBJECT_ID(t.TABLE_SCHEMA + '.' + t.TABLE_NAME), c.COLUMN_NAME, 'isIdentity') = 1
AND c.DATA_TYPE IN ('bigint', 'int', 'smallint', 'tinyint')
AND t.TABLE_TYPE = 'BASE TABLE'
ORDER BY PercentageUsed DESC

textbox 捲動

參考
--
Text1.AppendText("用這個方法新增文字!可保持捲動軸在最下方唷!") 

取 sql name

select @@SERVERNAME

相關查詢判斷 server name ,參考
---
上文內指令無法用在sql2008

底下我的記錄:
 exec sp_helpserver 'POST'

if exists(select   *   from sys.servers   where  servers.name ='POST')
begin
print   'ok '
end

2012年3月14日 星期三

微軟 WMI 說明檔

MSDN:Windows Management Instrumentation 

有需要的,可參考

Windows XP 使用安全性設定功能

一些較進階的功能,在windows xp 安裝後並未打開
很多功能都須要手動調整
如題,底下的操作:

用命令列修改 XP 目錄/檔案權限

參考引用
--

因根目錄之安全性標籤鎖住,用GPEDIT.MSC 找不到解法,只好用此方法

cacls.exe 是用來管理 ACL 的工具, ACL 翻成中文是「存取控制清單」。 ACL 的功用是列出哪些使用者對電腦上的哪些資源有哪些權限,當使用者要存取某個資源的時候,就可以透過 ACL 檢查這個存取動作是否合法。這個資源可能是檔案、資料夾或印表機……等,而權限可以是讀取、寫入、執行……等。在 ACL 裡面包含了許多 ACE ,而每個 ACE 就代表某個使用者對某項資源具有哪些權限。

在 Windows 平台上只有 NTFS 的磁區具有 ACL 的功能,如果在 NTFS 磁區上的某個檔案(資料夾)上按下滑鼠右鍵 → 內容 → 安全性,就可以看到這個檔案(資料夾)的 ACL

資料夾的權限種類比檔案多了一種「清單資料夾內容」。

使用方式
cacls.exe 的語法如下:

cacls filename [/T] [/E] [/C] [/G user:perm [...]] [/R user [...]]
[/P user:perm [...]] [/D user [...]]
參數說明如下:

/T
變更目錄及其子目錄下所有指定檔案的 ACL 。例如用

> cacls test/*.txt /t
可以指定 test 目錄及其子目錄下所有的純文字文件檔。

/E
編輯 ACL 而非取代。不加上 /E 的話會先將 ACL 清空,再將指定的使用者權限加上去。

/C
忽略錯誤並繼續執行。

/G user:perm
授與 (Grant) 使用者權限。 perm 的值可以是下面其中一個:

perm 描述 允許 拒絕
r 讀取 讀取及執行、清單資料夾內容、讀取 無
w 寫入 寫入 無
c 變更 修改、讀取及執行、清單資料夾內容、讀取、寫入 無
f 完全控制 完全控制、修改、讀取及執行、清單資料夾內容、讀取、寫入 無

/R user
撤銷 (Revoke) 指定使用者的權限,需和 /E 同時使用。

/P user:perm
取代 (Replace) 指定使用者的權限。 perm 的值可以是下面其中一個:

perm 描述 允許 拒絕
n 沒有權限 無 完全控制、修改、讀取及執行、清單資料夾內容、讀取、寫入
r 讀取 讀取及執行、清單資料夾內容、讀取 無
w 寫入 寫入 無
c 變更 修改、讀取及執行、清單資料夾內容、讀取、寫入 無
f 完全控制 完全控制、修改、讀取及執行、清單資料夾內容、讀取、寫入 無

/D user
拒絕 (Deny) 指定使用者存取,相當於 /P user:n

權限說明
完全控制
具有所有的權限。

修改
選擇「修改」會自動加上「讀取及執行」、「讀取」、「寫入」權限,此外「修改」還可以刪除、重新命名檔案。

讀取及執行
讀取與執行檔案,選擇這一個權限會自動加上「清單資料夾內容」與「讀取」這兩個權限。

清單資料夾內容
僅限瀏覽資料夾裡面的檔案清單。

讀取
讀取檔案/資料夾。

寫入
新增檔案或變更已存在的檔案內容(不包括重新命名)。

範例
新增權限
讓 Guest 帳號可以寫入 test 目錄:

> cacls test /e /g Guest:w
變更 ACL
將 test 目錄變更成只有 Administrators 可以完全控制:

> cacls test /g Administrators:f
顯示權限
顯示 ACL :

> cacls test
結果可能為

C:\\test BUILTIN\\Administrators:(OI)(CI)F
輸出結果裡面的 (OI) 、 (CI) 、 (IO) 代表意思如下:

輸出 ACE 套用到
OI 此資料夾及檔案。
CI 此資料夾及子資料夾。
IO ACE 不套用到目前的檔案/目錄。
無輸出訊息 只有此資料夾。
(IO)(CI) 此資料夾、子資料夾及檔案。
(OI)(CI)(IO) 只有子資料夾及檔案。
(CI)(IO) 只有子資料夾。
(OI)(IO) 只有檔案。

注意事項
永遠的控制者
擁有者的設定超越於 ACL ,也就是對於妳所建立的檔案或資料夾,妳永遠有所有的權限。那麼怎麼看檔案或擁有者是誰呢?在檔案或資料夾上按滑鼠右鍵 → 內容 → 安全性 → 進階 → 擁有者,就可以看到該項資源的擁有者。


誰可以變更 ACL
具有「完全控制」權限的使用者才可以變更 ACL 。

使用於批次檔
在沒有加上 /E 選項時,會出現以下詢問:

您是否確定 (Y/N)?
並等待使用者輸入 Y 或 N 並按下 Enter 。如果要在批次檔裡面使用的話,可以使用 pipe ,範例如下:

echo y cacls test /t /g "Administrators":f
值得注意的是 echo y 與 之間不可以有任何空白。

權限之繼承
一般來說資料夾 A 下的子資料夾或檔案會繼承 A 的 ACL 。例如下圖的「從父項繼承套用到子物件的權限項目,包括明確定義於此的項目」:


如果不想繼承,而想為該資料夾或檔案特別設定不一樣的 ACL ,可以將該選項取消掉

2012年3月13日 星期二

資料庫打包 打包之後,運行之前



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace System
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public string ConnectionString;
        private SqlConnection Conn;
        private SqlCommand Comm;
        public string StrSQL;
        public string DataBaseName;
        public string DataBase_MDF;
        public string DataBase_LDF;
        public string DataBaseOfBackupName;
        public string DataBaseOfBackupPath;
        private void Form1_Load(object sender, EventArgs e)
        {
            C;
            DataBaseName = "risheng";
            DataBase_MDF = @"E:\risheng_Data.MDF";
            DataBase_LDF = @"E:\risheng_Log.LDF";
            AddDataBase();
        }
        ///

        /// 執行創建/修改數據庫和表的操作
        ///

        public void DataBaseAndTableControl()
        {
            try
            {
                Conn = new SqlConnection(ConnectionString);
                Conn.Open();
                Comm = new SqlCommand();
                Comm.Connection = Conn;
                Comm.CommandText = StrSQL;
                Comm.CommandType = CommandType.Text;
                Comm.ExecuteNonQuery();
                MessageBox.Show("數據庫操作成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                Conn.Close();
            }
        }
        ///

        /// 附加數據庫
        ///

        public void AddDataBase()
        {
            try
            {
                Conn = new SqlConnection(ConnectionString);
                Conn.Open();
                Comm = new SqlCommand();
                Comm.Connection = Conn;
                Comm.CommandText = "sp_attach_db";
                Comm.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
                Comm.Parameters[@"dbname"].Value = DataBaseName;
                Comm.Parameters.Add(new SqlParameter(@"filename1", SqlDbType.NVarChar));
                Comm.Parameters[@"filename1"].Value = DataBase_MDF;
                Comm.Parameters.Add(new SqlParameter(@"filename2", SqlDbType.NVarChar));
                Comm.Parameters[@"filename2"].Value = DataBase_LDF;
                Comm.CommandType = CommandType.StoredProcedure;
                Comm.ExecuteNonQuery();
                MessageBox.Show("附加數據庫成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                Conn.Close();
            }
        }
        ///

        /// 分離數據庫
        ///

        public void DeleteDataBase()
        {
            try
            {
                Conn = new SqlConnection(ConnectionString);
                Conn.Open();
                Comm = new SqlCommand();
                Comm.Connection = Conn;
                Comm.CommandText = @"sp_detach_db";
                Comm.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));

                Comm.Parameters[@"dbname"].Value = DataBaseName;
                Comm.CommandType = CommandType.StoredProcedure;
                Comm.ExecuteNonQuery();
                MessageBox.Show("分離數據庫成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                Conn.Close();
            }
        }
        ///

        /// 備份數據庫
        ///

        public void BackupDataBase()
        {
            try
            {
                Conn = new SqlConnection(ConnectionString);
                Conn.Open();
                Comm = new SqlCommand();
                Comm.Connection = Conn;
                Comm.CommandText = "use master;backup database @dbname to disk = @backupname;";
                Comm.Parameters.Add(new SqlParameter(@"dbname", SqlDbType.NVarChar));
                Comm.Parameters[@"dbname"].Value = DataBaseName;
                Comm.Parameters.Add(new SqlParameter(@"backupname", SqlDbType.NVarChar));
                Comm.Parameters[@"backupname"].Value = @DataBaseOfBackupPath + @DataBaseOfBackupName;
                Comm.CommandType = CommandType.Text;
                Comm.ExecuteNonQuery();
                MessageBox.Show("備份數據庫成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                Conn.Close();
            }
        }
        ///

        /// 還原數據庫
        ///

        public void ReplaceDataBase()
        {
            try
            {
                string BackupFile = @DataBaseOfBackupPath + @DataBaseOfBackupName;
                Conn = new SqlConnection(ConnectionString);
                Conn.Open();
                Comm = new SqlCommand();
                Comm.Connection = Conn;
                Comm.CommandText = "use master;restore database @DataBaseName From disk = @BackupFile with replace;";
                Comm.Parameters.Add(new SqlParameter(@"DataBaseName", SqlDbType.NVarChar));
                Comm.Parameters[@"DataBaseName"].Value = DataBaseName;
                Comm.Parameters.Add(new SqlParameter(@"BackupFile", SqlDbType.NVarChar));
                Comm.Parameters[@"BackupFile"].Value = BackupFile;
                Comm.CommandType = CommandType.Text;
                Comm.ExecuteNonQuery();
                MessageBox.Show("還原數據庫成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            finally
            {
                Conn.Close();
            }
        }
              //  還原數據庫
        private void button0_Click(object sender, EventArgs e)
        {
            C;
            DataBaseName = "MyDatabase";
            DataBaseOfBackupName = @"back.bak";
            DataBaseOfBackupPath = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\";
            ReplaceDataBase();
        }
         
          // 附加數據庫
        private void button1_Click_1(object sender, EventArgs e)
        {
            C;
            DataBaseName = "MyDatabase";
            DataBase_MDF = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\MyDatabase_Data.MDF";
            DataBase_LDF = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\MyDatabase_Log.LDF";
            AddDataBase();
        }
         
          // 備份數據庫
        private void button2_Click(object sender, EventArgs e)
        {
            C;
            DataBaseName = "MyDatabase";
            DataBaseOfBackupName = @"back.bak";
            DataBaseOfBackupPath = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\";
            BackupDataBase();
        }
         
          // 分離數據庫
        private void button3_Click(object sender, EventArgs e)
        {
            C;
            DataBaseName = "MyDatabase";
            DeleteDataBase();
        }
    }
}

sql 自動附加資料庫


using System.Data.OleDb;    //引入命名空間

 try
            {
                //數據庫連接對像
                OleDbConnection Conn = new OleDbConnection("Provider=SQLOLEDB;Data Source=(local)
                OleDbCommand Comm = new OleDbCommand();   //命令
                Comm.CommandText = "sp_attach_db";
                Comm.CommandType = CommandType.StoredProcedure;   //引入存儲過程
                Comm.Parameters.Add("@dbname", "DBQQ");
                Comm.Parameters.Add("@filename1", @"D:\自動附加數據庫\ss.mdf");   //地址
                Comm.Connection = Conn;    //初始化連接對像
                Conn.Open();   //打開連接對像
                Comm.ExecuteNonQuery();
                Conn.Close();   //關閉連接對像
           
            }
            catch (Exception ex)
            {
                MessageBox.Show("附加失敗:" + ex.Message);
            }
附註:運行環境是 SQL2005 VS2005

程式打包並自動安裝 SQL

參考來源
--
真不錯


參考1 : 有圖解
參考2
  

自動附加 sql db


執行存儲過程sp_attach_db。如:
EXEC sp_attach_db @dbname = N'pubs',
    @filename1 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf',
    @filename2 = N'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs_log.ldf' ;
在SqlServer2005版本及其它更加新的版本,建議用Create Database .... For Attach。




1、創建安裝項目「Setup」安裝項目

在「文件」菜單上指向「添加項目」,然後選擇「新建項目」。

在「添加新項目」對話框中,選擇「項目類型」窗格中的「安裝和部署項目」,然後選擇「模板」窗格中的「安裝項目」。在「名稱」框中鍵入 「setup」(其他名稱也行,隨個人意願)。

單擊「確定」關閉對話框。

項目被添加到解決方案資源管理器中,並且文件系統編輯器打開。

在「屬性」窗口中,選擇 ProductName 屬性,並鍵入」xxxx系統」(你所做項目程序的名稱)。



2、在安裝項目中創建安裝程序類(install.cs)。

在你項目的解決方案上右鍵,選擇「添加」中的「新建項目」。然後選擇「類庫」,在名稱中輸入DbSetUp,位置選擇你的項目程序所在目錄。點「確定」關閉對話框。

在新項目「DbSetUp」上右鍵,選擇「添加」中的「新建項」。然後選擇Visual c#項目項中的「安裝程序類」,點「添加」關閉對話框。

切換到代碼視圖,在install.cs文件中寫入如下代碼:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Diagnostics;
using System.Data.SqlClient;

namespace DBSetUp
{
    [RunInstaller(true)]
    public partial class Installer1 : Installer
    {
        public Installer1()
        {
            InitializeComponent();
        }

        private void CreateDataBase()
        {
            // 啟動SQL服務, 預防裝完之後服務未啟動
            Process p = new Process();
            p.StartInfo.FileName = "cmd.exe";

            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.CreateNoWindow = true;

            p.Start();
            p.StandardInput.WriteLine("net start MSSQL$Rybx");//Rybx為客戶端數據庫實例名
            p.StandardInput.WriteLine("exit");
            p.StandardOutput.ReadToEnd();

            // 「server」:客戶端數據庫實例名, 「user id」:Sa ,「password」:Sa的密碼
            string strSql = string.Format("server={0}; user id={1}; password={2}; Database=master", @"(local)/Rybx", "sa", "qjs");
            //需要附加的數據庫文件,我的設置是在項目程序的安裝目錄下的database文件夾下
            string strMdf = this.Context.Parameters["targetdir"] + @"/database/RybxMis.mdf";
            string strLdf = this.Context.Parameters["targetdir"] + @"/database/RybxMis.ldf";

            string str;
            SqlConnection myConn = new SqlConnection(strSql);
            str = "EXEC sp_attach_db @dbname = N'RybxMis', @filename1 = N'" + strMdf + "',@filename2=N'" + strLdf + "'";
            SqlCommand myCommand = new SqlCommand(str, myConn);
            myConn.Open();
            myCommand.ExecuteNonQuery();
            myConn.Close();
        }

        protected override void OnAfterInstall(System.Collections.IDictionary savedState)
        {
            base.OnAfterInstall(savedState);
            try
            {
                CreateDataBase();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }
        }

    }
}

     單擊「生成」菜單下「生成解決方案」,生成install.dll安裝類文件。

3、將「主程序」項目的輸出添加到部署項目中

     在你項目程序的安裝項目(上面第一步創建的Setup)上右鍵,選擇「視圖」中的「文件系統」,在 「應用程序文件夾」上右鍵,選擇「添加」中的「項目輸出」,打開「添加項目輸出組」對話框,在「項目」下拉表框中選擇你的主安裝程序類,如上面的「DbSetUp」。

     從列表框中選擇「主輸出」組,然後單擊「確定」關閉。

4、創建自定義安裝對話框

如需要可在解決方案資源管理器中選擇安裝項目「Setup」項目,在「視圖」菜單上指向「編輯器」,然後選擇「用戶界面」。在用戶界面編輯器具中,選擇「安裝」下的「啟動」節點。在「操作」菜單上,選擇「添加對話框」。詳細設置請參考msdn,這裡不再詳細說明。

5、建自定義操作

在安裝項目「Setup」項目上右鍵,選擇「視圖」中的「自定義操作」。

在「自定義操作」中選擇「安裝」節點。單擊右鍵「添加自定義操作」,在選擇項目中的項中選擇「應用程序文件夾」,選擇「主輸出來自DbSetUp(活動)」。

左鍵點擊「主輸出來自DbSetUp(活動)」,在「屬性窗口」中選擇「CustomActionData」屬性並鍵入/targetdir="[TARGETDIR]/"。

/targetdir="[TARGETDIR]/" 是你項目程序的安裝路徑,設置此參數以便在install類中獲得該路徑。

  在安裝項目「Setup」項目上右鍵,單擊「生成」,即可生成項目程序的安裝程序,即SetUp.exe。在實際部署中最後需要用Orca MSI安裝文件修改器修改設置SetUp.exe文件,詳細請參照「將MSDE Sp3(注意是sp3)打包進.Net安裝項目中(WinForm應用)」。

win7 暫存檔 位置


WINDOWS VISTA跟 7 應該有三個 Temp

C:\Users\***\AppData\Local\Temp

C:\Windows\Temp

C:\Documents and Settings\***\Local Settings\Temp

開始→執行→輸入%temp%

2012年3月11日 星期日

MSSQL Output in XML using For XML

參考來源
--
1:
select * from Employee for xml path, ELEMENTS XSINIL, root('Client')

2:
select Employee.ID as '@ID', FirstName,LastName,DOB ,
(select SalariedMonth as 'Month' from employeesalary where
employee.id = employeesalary.id for xml path(''),Type) as 'Salary'
from Employee
for xml path('Employee'),Elements XSINIL,root('Employees')

3:
select Employee.ID as '@ID', FirstName,LastName,DOB ,
(select SalariedMonth as 'data()' from employeesalary where
employee.id = employeesalary.id for xml path(''),Type) as 'Salary'
from Employee
for xml path('Employee'),Elements XSINIL,root('Employees')

2012年3月9日 星期五

sql 不同資料庫用法

用法:
select  * from dbname.dbo.tablename
--
例:
select  * from testa.dbo.user
select  * from testb.dbo.user

2012年3月8日 星期四

INFORMATION_SCHEMA.COLUMNS,取所有表PK

請參考來源
 --
取所有表PK

select TABLE_NAME, COLUMN_NAME   from INFORMATION_SCHEMA .KEY_COLUMN_USAGE  where TABLE_NAME<>''  order by TABLE_NAME,COLUMN_NAME 

利用SQL指令找出資料庫的資料表,資料表的欄位名,資料表的PK欄位



找出資料庫裡所有的資料表

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES ORDER BY TABLE_NAME

依資料表名稱找出所有欄位資訊

SELECT COLUMN_NAME,ORDINAL_POSITION,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'Table1'

依資料表名稱找出此表的PK欄位

SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'Table1'
資料庫

取得DB裡所有Table Name


MS SQL:
SELECT * FROM INFORMATION_SCHEMA.TABLES

Access:
SELECT * FROM MSYSOBJECTS

Oracle:
SELECT * FROM USER_OBJECTS

sql table to xml

參考1
參考2
參考3
--
原則:
select * from xx  [ for xml {參數}]

條列 Stored Procedure、Function、View、Trigger

請參考來源
--
真是精緻呀

sql 異地備份所有資料庫


declare @disk varchar(200)
select @disk='\\192.168.0.1\database'
declare backdatabase cursor for
select name from sysdatabases where dbid>6 --所有用户表 dbid自己随时调整
declare @name varchar(50)
open backdatabase
fetch next from backdatabase
into @name
--建立连接
declare @con varchar(500)
select @con='net use '+@disk+' pass /user:192.168.0.1\userName'
exec master..xp_cmdshell @con
while @@fetch_status=0
begin
 --建立目录
 declare @str varchar(500)
    select @str='if not exist '+@disk+'\'+@name+' mkdir '+@disk+'\'+@name
 exec master..xp_cmdshell @str
 --备份文件
 declare @sql varchar(500)
 select @sql=@disk+'\'+@name+'\'+@name+'_backup_'+replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-','_'),' ','_'),':','') +'.bak'
 backup database @name to disk=@sql
 fetch next from backdatabase into @name
end
close backdatabase
deallocate backdatabase

SQLBackupRestore 專門分析說明

SQLBackupRestore 官網
 --
裡面有:
BACKUP:

BACKUP DATABASE AdventureWorks TO DISK = 'G:\Backups\AdventureWorks.bak'

還原部分


[SQL] 資料庫備份與還原 - Backup、Restore (也可參考本篇)
 

SQL 備份歷史紀錄

參考引用
MSDN backupset
--
SELECT
a.[database_name] as '資料庫名稱',
CASE a.[type]
WHEN 'D' THEN N'資料庫'
WHEN 'I' THEN N'差異資料庫'
WHEN 'L' THEN N'紀錄'
WHEN 'F' THEN N'檔案或檔案群組'
WHEN 'G' THEN N'差異檔案'
WHEN 'P' THEN N'部分'
WHEN 'Q' THEN N'差異部分'
ELSE N'NULL'
END as '備份類型',
a.[first_lsn] as '備份組中第一個LSN',
a.[last_lsn]  as '備份組之後下一個LSN',
a.[database_backup_lsn] as '最近的完整資料庫備份之LSN',
a.[differential_base_lsn] as '差異備份的基底 LSN',
a.[backup_finish_date] as '備份完成的日期和時間'
FROM
msdb..backupset a INNER JOIN master..sysdatabases b ON
a.database_name COLLATE DATABASE_DEFAULT
       = b.name COLLATE DATABASE_DEFAULT
ORDER BY
a.database_name, a.backup_finish_date 

平均成本計算公式

參考1
參考2
參考3
參考4
--

平均成本的計算公式:
  平均成本是指單位產量的成本,具體地:
  平均總成本=總成本/總產量
  平均固定成本=固定成本/總產量
  平均可變成本=可變成本/總產量。

NetBeans 建立 desktop application

參考來源
--
1) File->New Project->Java->Java Application
2) Project Name: test1

This gives me my project with my chosen name.
Next I right click on the project and

3) New -> JFrame Form..
4) Finish

This gives me a JFrame with the default name of NewJFrame, with a main program, which means I can start from it. Now I've got 2 files: Test2.java and NewJFrame.java.
Here is the trick:

5) Right click on Test2.java and delete it
6) Right click on NewJFrame and refactor it, Rename it to Test2.

You now have an application just like you are used to. 

2012年3月7日 星期三

netbeans 7.1.1 下載安裝 (6.9 正體中文版)

NetBeans 6 程式開發軟體快速入門手冊.
國立中山大學程式諮詢網
--
JDK 7u3 with NetBeans 7.1.1    直接下載此版,即包含 JDK+NetBeans

NetBeans IDE 6.9 下載 (正體中文版)

crystal report要如何解決民國百年的問題


'中華民國'+Trim(ToText(Year(CurrentDate) - 1911, '#00')) + '年'
 + ToText(Month(CurrentDate), '00') + '月' +
ToText(Day(CurrentDate), '00')+'日'

Crystal Report 不足列時補空白行

參考引用
--
 案列描述:

 假設一頁顯示七筆,現在總顯示筆數是十筆,

 在第二頁的時候會顯示三筆,然後以下空白,

 但現在需要以下補完空白行,所以... 需要動點手腳唷!!

方法描述:

 1.在 Crystal Report 的 rpt 中,產生多個細目區段,並畫入空白行格式(N-1個)。

 2.在原來的細目資料中(細目a),開啟「區段專家」,在「在之後新增分頁」點選「公式」,鍵入以下公式1。

 3.每個空白行細目區段中,開啟「區段專家」,在「抑制顯示(無擷取項目)」點選「公式」,鍵入以下公式2。

公式1:

if onlastrecord then
   formula = false
else
   if RecordNumber mod 7 =0 then
      formula =true
   else
      formula =false
   end if
end if

公式2:

細目b(第一個):

if not onlastrecord or (RecordNumber mod 7 = 0) then
   FORMULA = TRUE
else
   if (RecordNumber mod 7 <=1 ) then '第一筆
      FORMULA = FALSE
   else
      FORMULA = TRUE
   end if
end if

細目c(第二個):

if not onlastrecord or (RecordNumber mod 7 = 0) then
   FORMULA = TRUE
else
   if (RecordNumber mod 7 <=2 ) then '第二筆
      FORMULA = FALSE
   else
      FORMULA = TRUE
   end if
end if

以此類推...至N-1個,

SQL 2008 以設定檔安裝 - ConfigurationFile.ini

參考引用來源
---
 一般來說要安裝作業系統或是應用程式,都得下一步、下一步的執行安裝,但是如果你得同時安裝數十台伺服器,那可是會花轟,外加穿插其他業務,這麼一來肯定會花不少時間。所幸 SQL Server 的安裝,提供了非(GUI,step by step)的方式,讓你以快速的方式安裝起你的 SQL 2008。

在安裝 SQL Server 2008時,當要真正進行安裝的最後一個步驟,按下 Install 前,畫面會提示你剛剛所做一切設定資料,會寫在

磁碟機:\安裝SQL路徑\100\SetupBootstrap\日期_序號\

例如:C:\Program Files\Microsoft SQL Server\100\Setup Bootstrap\Log\20100106_172231

檔名為:ConfigurationFile.ini

內容大約為

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

;SQLSERVER2008 Configuration File
[SQLSERVER2008]

; Specify the Instance ID for the SQL Server features you have specified. SQL Server directory structure, registry structure, and service names will reflect the instance ID of the SQL Server instance.

INSTANCEID="MSSQLSERVER"

; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.

ACTION="Install"

; Specifies ...........略

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

有了這個檔案後,要安裝下一台 SQL Server 時,只要

1. 適當修改 ConfigurationFile.ini 以符合新 Server 設定

2. 用 Setup.exe /ConfigurationFile=Your_ConfigurationFile.INI 來進行安裝SQL

3. 若是用組態檔外的密碼設定值,可在命令模式以些許參數來指定安裝,如

Setup.exe /SQLSVCPASSWORD="************"
/AGTVCPASSWORD="************"
/ASSVCPASSWORD="************"
/ISSVCPASSWORD="************"
/RSSVCPASSWORD="************"
/ConfigurationFile=Your_ConfigurationFile.INI

SQL Server 2012 聽說:廢除 OLE DB,擁抱 ODBC

請參考來源

SQL Server 2012 Express

微軟官網下載 ms-sql 2012 express
英文官網 ms-sql 2012 RC0
--
必須安裝:
1.Microsoft .Net Framework 3.5 SP1 以上(含)
2.Microsoft .Net Framework 4.0

2012/4/14  MS-SQL 2012 繁體中文版出了
下載 SQL Server 2012 Express



Microsoft Web Platform Installer

platform 微軟官網
-- 
免費工具 Microsoft Web Platform Installer 3.0 (Web PI),可以讓您更輕鬆地下載、安裝和隨時更新 Microsoft Web Platform 的最新元件,包括網際網路資訊服務 (IIS)、SQL Server Express、.NET Framework 和 Visual Web Developer。 此外,您也可以透過 Web PI 來安裝熱門的開放原始碼 ASP.NET 和 PHP Web 應用程式。

2012年3月6日 星期二

SQL SELECT 除法有小數


SQL 小數除法
SQL中使用/除法會出現只取整數的結果,如:
18/4 -->結果為4
若要取到小數第1位,則改為:
select convert(decimal(5,1),round(18/4,1))-->結果為4.5

T-SQL迴圈的寫法


DECLARE @_i INT
DECLARE @_MAX INT
 SET @_i = 0
 SET @_MAX = 90 -- 要產生幾筆資料
 WHILE (@_i<@_MAX)
 BEGIN
 --要迴圈的語法
 INSERT INTO #Tmp VALUES('T')

 --加1
 Set @_i=@_i+1
 END

xp_fileexist stored procedure

參考引用
--
各有sql 2000 和 sql 2005 的執行比較



sql2000:
SET NOCOUNT ON
DECLARE @FileName varchar(255)
DECLARE @File_Exists int
SELECT @FileName='C:\boot.ini'
EXEC Master.dbo.xp_fileexist @FileName, @File_Exists OUT
IF @File_Exists = 1
PRINT 'File Found'
ELSE PRINT 'File Not Found'
GO

sql2005:
SET NOCOUNT ON
DECLARE @FileName varchar(255)
CREATE TABLE #File_Results (
File_Exists int,
File_is_a_Directory int,
Parent_Directory_Exists int
)
SELECT @FileName='C:\boot.ini'
INSERT INTO #File_Results
(File_Exists, file_is_a_directory, parent_directory_exists)
EXEC Master.dbo.xp_fileexist @filename
SELECT * FROM #File_Results
DROP TABLE #File_Results
GO

以 DataAdapter 更新 UDT 資料行 以 DataAdapter 更新 UDT 資料行

參考來源
--
重點在:
 Dim bld As New SqlCommandBuilder(da)
 bld.ConflictDetection = ConflictOptions.CompareRowVersion

2012年3月5日 星期一

dbf 匯出 excel


export to c:\mydbf.xls type xls
import to c:\mydbf.dbf type dbf

ECSHOP 最大的免費網路商店系統

官網:ECSHOP是一款開源免費的網路商店系統
--
 『免費 + 開源』ECSHOP是一款開源免費的網路商店系統。由專業的開發團隊升級維護,為您提供及時高效的技術支持,您還可以根據自己的商務特徵對ECSHOP進行定製,增加自己商店的特色功能。 『強大 + 簡便』ECSHOP除了注重功能上的強大以外更重要的特點就是操作上的方便快捷。我們設身處地為用戶著想的設計理念使我們的產品達到了極高的易用性。只需輕點鼠標+簡單錄入即可完成商店管理。 『效率 + 速度』ECSHOP在系統架構,數據庫,程序等方面的設計都由資深的專業人士完成,保證了系統的健壯和效率,高效合理的管理流程助您在瞬息萬變的商務活動中始終領先一步,掌握市場的主動權。

--
真是棒呀,值得推薦!!
不用再自己搞得累翻了,結果排版.美工都不行!!

updatecommand 已經影響必須是 1 記錄的 0

參考來源
---
g 了都是一推問題,我也中獎了
最終解決方式:
 在添加,修改,删除间添加:ds.AcceptChanges();

2012年3月4日 星期日

ms-sql update 序號

參考引用
--
底下的方法真是實用:
 方法1:
declare @i int
set @i=0
update tableName set 序号=@i,@i=@i+1


方法2:
update
 a
set
 序号=px
from
 (select *,px=row_number()over(order by getdate()) from tb)a

序號(ROW_NUMBER,RANK,OVER)

請參考來源1
請參考來源2 
--
 ※ ROW_NUMBER() :可以依照指定的欄位將所有記錄進行排序

然後再依照順利為每一筆記錄給定一個序號

但如果指定的欄位資料一樣時,會依照其他依據來決定排名,因此名次不會相同。

以下是借用原文章的SQL語法:

    SELECT 書籍編號, 書籍名稱, 價格, 出版公司,  
    ROW_NUMBER() OVER(ORDER BY 價格) AS 價格排名  
    FROM 書籍

※ RANK():遇到相同的數值會給相同的排名,其後的排名則會跳過

例如有三個第 2 名時, 就不會有第 3 及第 4 名, 它會從第 5 名開始

RANK() 的用法與 ROW_UNMBER() 是類似的。

語法如下:

    SELECT 書籍編號, 書籍名稱, 價格, 出版公司,  
    RANK() OVER(ORDER BY 價格) AS 價格排名  
    FROM 書籍

※ DENSE_RANK():如果排名不想被自動跳過的話可以使用這個函數。

語法如下:

    SELECT 書籍編號, 書籍名稱, 價格, 出版公司,  
    DENSE_RANK() OVER(ORDER BY 價格) AS 價格排名  
    FROM 書籍



 ■ 指定查詢範圍

排序函數除了可以將所有記錄進行排序, 還能夠指定查詢第 M 筆到第 N 筆的記錄。

語法如下:

    SELECT * FROM
    (
        SELECT RANK() OVER (ORDER BY 價格) AS 價格排名, * FROM
        (
            SELECT * FROM 書籍
        )AS DT1
    )AS DT2
    WHERE 價格排名 BETWEEN (第 M 筆) AND (第 N 筆)



===== ICE NoteBook ======


SELECT t2.*, b.title as sfm_title FROM  
(  
    SELECT rank() OVER (ORDER BY t1.id DESC) AS RankNumber, * FROM  
    (  
         select * from focus_detail where delete='F'
    ) AS t1  
)AS t2 inner join focus_master b on b.id=t2.sfm_id  
WHERE RankNumber between 11 and 20
 上面這個例子各位要注意一下inner join的位置,如果你是擺在最內層join的話,是沒問題的,

但如果你像我一樣是擺在最外層才join,最後排出來的順序會亂跳,

所以必須在最後加上order by 的語法將取得的資料排程你所需要的順序



SELECT t2.*, b.title as sfm_title FROM  
(  
    SELECT rank() OVER ( ORDER BY t1.id DESC ) AS RankNumber, * FROM  
    (  
         select * from focus_detail where delete='F'
    ) AS t1  
)AS t2 inner join focus_master b on b.id=t2.sfm_id  
WHERE RankNumber between 11 and 20  ORDER BY t1.id DESC

SELECT 自動加序號


SAMPLE 北風

select count(*) sn, a.CustomerID from Customers a , Customers b
where b.CustomerID <= a.CustomerID
group by a.CustomerID
order by a.customerid

Result:

sn          CustomerID
----------- ----------
1           ALFKI
2           ANATR
3           ANTON
4           AROUT
5           BERGS
6           BLAUS

2012年3月3日 星期六

如何取得每月的最後一天


'做法都是用隔月的第一天減一天

'VB

Private Sub Command1_Click()
    Dim d As Date
        d = "2006/05/03"
        MsgBox (DateAdd("M", 1, Format(d, "YYYY/MM") & "/01") - 1)
End Sub
'VB.NET

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim d As Date
        d = "2006/05/03"
        MsgBox(Date.Parse(d.AddMonths(1).ToString("yyyy/MM") & "/01").AddDays(-1))

End Sub

2012年3月1日 星期四

成績做排序

參考引用
--
DECLARE @Score TABLE([Name] NVARCHAR(30), [Score] INT);

INSERT INTO @Score VALUES ('John', 100);
INSERT INTO @Score VALUES ('Mary', 100);
INSERT INTO @Score VALUES ('Bob', 96);
INSERT INTO @Score VALUES ('Peter', 96);
INSERT INTO @Score VALUES ('Cindy', 95);

SELECT  
 Name AS '姓名',
 Score AS '成績',
 RANK() OVER (ORDER BY Score DESC) AS '名次' 
FROM @Score;

DataGridViewComboBoxColumn set default value

在 g 這標題問題時,真的找不到問題的解答
因宣告 DataGridViewComboBoxColumn  之後,要設定預設值;就不是combox這樣 index=0 即可
翻了好久,沒解答
只好利用在宣告 DataGridViewComboBoxColumn  時,先取第一筆資料來當預設值了

若有更好方式,還請指教;謝謝