在SQL Server Agent中新建一個作業,並在步驟處加入一個步驟,輸入以下的內容,並進入排程設定要啟動的時間
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GOEXEC sp_configure 'xp_cmdshell',1
GO
RECONFIGURE
GO
USE master
GO
EXEC XP_CMDSHELL 'net use z: \\192.65.xx.xx\aws password /user:"username"'
DECLARE @MyFileName varchar(50)
SET @MyFileName='z:\filename_' + (convert(nvarchar(20),dateadd(DAY,-1,GetDate()),112)) + '.bak'
alter DATABASE [databasename] set SINGLE_USER with rollback immediate
restore DATABASE [databasename] from DISK=@MyFileName
alter DATABASE [databasename] SET MULTI_USER;
解說1:
USE master
GO
本句能讓Server Agent不至於斷線,原因不清楚
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
平常我輸出json都直接用stringbuilder自己從資料庫一行一行組起來,然後response write輸出,一般沒什麼問題,不過這次輸出資料量稍大,一萬筆資料26個欄位,一行一行來組字串花很了大概5分鐘之久,搜尋一下發現原來sql內本來就有直接用for json auto來組成json。例如
select * from table for json auto
這樣就會組出JSON資料格式,相同在有一萬筆的狀況下,全部組完的速度不需要一秒
但是後來發現它只能固定組出幾筆欄位,後面就不見了,計算一下發現固定是2033個字元,之後就會被截斷。
google這類問題後發現原來這是因為用資料庫欄位去接時的問題,SQLString要改用以下的語法,使用最大的資料長度即可。
SELECT CONVERT(NVARCHAR(MAX),select * from table for json auto)
另外發現一個問題是當產生JSON時,會把null的欄位直接省略,如果null也要能顯示,則要再加上, INCLUDE_NULL_VALUES,所以上面這句就可以變成這樣
SELECT CONVERT(NVARCHAR(MAX),select * from table for json auto, INCLUDE_NULL_VALUES)
參考資料: https://blog.darkthread.net/blog/for-xml-result-truncated/
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
資料庫使用參數查詢時,會遇到使用者不需要該查詢欄位時:例如我們提供姓名、學號、科系三個欄位可查詢,但使用者可能只輸入了學號,其他欄位為null,這時如未加處理,會查出0筆紀錄
處理方式:
資料讀取時:name=IIf(IsNothing(Request.QueryString("name")), "null", Request.QueryString("name")),這樣當使用者沒輸入該欄位時,就會得到name="null"
SQLstring:where (@name='null' or name=@name),此時就可以正確得到需要的結果。
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
依照前篇:在IIS中使用免費dns並申請免費ssl ,完成以後理論上chrome應該會掛上鎖頭,結果竟然沒有....
查看一下資訊,說是不安全,查一下網路才知道server2008的iis版本使用的是TLS1.0,但是現在chrome規定要用TLS1.2才行
要怎麼變更呢?
首先把server的所有update都安裝一次,然後下載這個reg檔案,登錄一下,完成後,重開機就好了。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001
要檢查自己的網站到底是什麼問題沒有上鎖,可以來這裡
https://entrust.ssllabs.com/
我的網站給了F:Fail,原因是
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
花了一點時間,把原本express資料庫備份後,還原至SQL,不知道原來還有這麼多的設定
1.從express,工作\備份,指定bak檔案,完成備份
2.從SQL,建立好空的資料庫名稱
3.點選工作\還原\資料庫
4.選步驟1完成的bak備份檔
5.進入左側檔案選項,勾選「將所有檔案重新放置到資料夾」
6.進入選項功能,
勾選複寫現有資料庫
取消勾選結尾紀錄備份(否則可能出現:無法執行 BACKUP LOG,因為當前沒有資料庫備份)
伺服器連接勾選關閉目的地資料庫的現有連接,會進入單一使用者模式(否則可能會出現共用無法存取而導致失敗)
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
先大致寫一下
1.安裝好MSSQL
2.安裝MySQL ODBC Driver,因為版本問題安裝8.0.19會出現錯誤,目前建議安裝8.0.18: https://downloads.mysql.com/archives/c-odbc/
3.安裝MSSQL轉換工具: https://www.microsoft.com/en-us/download/details.aspx?id=54257
4.開啟後,先連線到MySQL
5.再連線到MSSQL
6.選擇要轉換的資料庫
7.Convert Schema
8.在MSSQL資料庫上按同步Synchronize with Database,將資料結構複製到MSSQL
9.點選右上角的Migrate Data
10.完成
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
最近在寫一個程式,要再網頁播放音效,而且是分成很多段,這段播完換那段,寫成android跟PC一直正常,放到ios才發現不可以,不只是ios的safari,連ios中的chrome也不能,查了才發現原來ios禁止非使用者主動的播放音效,一定要透過互動,例如點螢幕、按按鈕之類,目的是保護使用者,避免被嵌入的音效檔吃掉流量。ios真的很會替使用者想很多。
好吧那就點了播放音效吧,結果發現只能點一個播一樣,我這個APP要重複不斷一直播很多不同的音效,查一下網路,可以把音效物件宣告廣域,然後這個物件就可以重複使用,不須在經過使用者互動。
宣告廣域變數
soundEffect = document.createElement('audio');
點選按鈕或圖片時
soundEffect.setAttribute('src', '');//指定位置為空
soundEffect.play();//播放音效,但不需要真的聲音,因為位置為空
真的要播音效時
soundEffect.setAttribute('src', 'countdown05.mp3');//指定真正的影片位置
soundEffect.play();//播放音效
由於soundEffect宣告為廣域,因此可以重複利用。
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
最近在寫網頁,發現設定一個img標籤,用onclick竟然無效,還以為是一定要用button,結果竟然只是img如果有設定id,那id不可與onclick的function相同。
就這麼簡單。
例如
<img id="clickimg " src="" onclick="clickimg ()"/>
改成
<img id="clickimg " src="" onclick="imgclick ()"/>
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
寫app最快的方法當然是用webview包裝,不過最近android升級為API 28以後,已經不允許明碼傳輸,如果你的webview還用無加密http協定就會出現:
「Cleartext HTTP traffic to xxx not permitted 」
報錯訊息,兩個方法可以解決,一是宣告app允許無加密傳輸,或者就是把自己的網站改為https協定。在這裡四個步驟,很快就能升級網站為ssl加密。
申請網站dns名稱
申請網站ssl服務
安裝openssl將ssl憑證crt改為pfx格式
設定iis的ssl通信協定
1.申請網站dns名稱
這裡我們利用交通大學提供的免費dns服務:https://nctu.me/
申請方式非常簡單,還中文界面,因此我就不說明太多。
2.申請ssl服務、3.安裝openssl將ssl憑證crt改為pfx格式、4.設定iis的ssl通信協定
這部份完全參考這篇文章:
http://tech.smallya.net/2016/07/07/%E4%BD%BF%E7%94%A8-ssl-for-free-%E7%94%A2%E7%94%9F-lets-encrypt-ssl-%E6%86%91%E8%AD%89%E4%B8%8A%E5%82%B3%E7%B5%A6-iis-%E7%AB%99%E5%8F%B0%E4%BD%BF%E7%94%A8/
在上述free ssl申請網址輸入自己步驟1完成的網址後,下載檔案放置到iis中的.wellknow資料夾中(關於「.wellknow」資料夾要如何在windows中建立,可以參考:https://blog.miniasp.com/post/2017/01/01/Create-gitignore-editorconfig-from-Windows-Explorer )
隊很懶....網路資源很多,現在的知識可以透過其他人的知識累積,踏在前人的肩膀上,就看你願不願意跨出那一步。
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
為了即將到來的大數據資料 ,來實做一下 Mysql Cluster 資料叢集,放在研究清單裡面已經快兩年了,終於有空檔來研究。
Cluster的優點是使用冗餘系統,達成高度可用,當節點故障會有其他伺服器保持服務。可惜的是沒有做自動覆載平衡,前端必須指定一台SQL來存取資料,不過可以用連線候選清單的方式處理就是了(這個IP連不上時,換下一個IP)
整個系統分成三種節點
一、Manager Node:管理整體服務節點,管理整體架構資源服務
二、SQL Node:資料庫服務節點,實際的資料庫服務
三、Data Node:資料儲存體節點,儲存資料用
另外還包括
四、Client端Workbench連線與測試
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
一般圖書館在推廣借書時,滿需要用到書的基本資料,不過目前常見的圖書系統並沒有書籍封面的資料,我們都知道純文字資訊是比不上圖像來的快速,最近做一個案子時,對方提供上千本書籍,並烙下一句,書的封面就由您想辦法處理
不過其實我在2010年在圖書館當組長時,就用ASP土法煉鋼寫了一個XML DOM物件的書籍封面搜尋器,現在有更好的工具當然更簡單了,只有兩句程式碼就可以把ISBN換成圖檔
我想應該滿多人需要這類的API,現在就開放給大家免費使用,使用方法如下,使用get,將網址輸入即可 http://www.fice.kyu.edu.tw/faceapp/isbn2books.aspx?isbn=9789865947125,9789571372358,9789863124313,isbn4.....(喂,一次最多10筆好嗎?不要一次來幾百筆啦,我也怕流量太高被books封鎖) 如果isbn查不到的話,就會回覆空字串
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
對接使用 asmx Webservice xml檔案,將xml傳給webservice,對方會將資料填入xml後回傳,.net真的很貼心,xml部份透過 WSDL 工具來處理,以下步驟
1.加入/加入服務參考
2.跳出服務參考後,點選進階,再點選加入服務參考
3.輸入url,等候讀取之後,下方輸入自訂web參考之名稱,完成後點選加入參考
4.查看建立完成的webservice物件
5.查看WSDL檔案結構(XML),以利後續引用
6.程式中使用webservice,要先Imports webreference,然後宣告一個物件為webservice物件,接下來請自行參考該物件所提供的內容自行填入。下途中的c_h1,c_ap1等等,皆為checks wsdl檔案所描述的XML檔案結構,屆時直接傳入即可。
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
Line是台灣最流行的聊天軟體,因此如果IoT的一些裝置能透過LINE傳送就很棒了,簡單的來說,例如說當倉庫的溫度濕度或濕度超過某一溫度時,就傳訊到管理員手機LINE中進行提醒來查看,或者,家中窗戶被打開時,就拍照並傳訊到使用者LINE中。
LINE的自動化傳訊工具目前來說分成兩種,BOT跟Notify
本文只說明Notify的用法,LINE Notify 製作過程分成四個部份
一、申請LINE Notify服務 :利用自己的LINE申請一個Notify服務帳號,過程中需要確認對象為何,只能自己或自己所在的群組,無法針對其他個人用戶,需將對方拉入群組中
二、取得 Authorize Code:在步驟一完成後,需要取得權杖Authorize Code,即可傳遞訊息到群組內
三、POSTMAN簡易測試傳遞訊息 :完成步驟二之後,可以透過POSTMAN快速測試服務是否正常。
四、ASP自動化訊息 :透過IIS網站,以ASP.net透過POST來傳遞訊息,也可透過IFTTT來取代(請參考:使用 LINE Notify 接收網站更新通知 ),這樣就可以省去寫ASP跟IIS的部份
(若不想建立伺服器,也可透過Arduino直接傳送,須用到
WiFiClientSecure 函式,相關資料請參考:)
本文所需工具:POSTMAN (簡易POST工具)、VS.net、IIS、自己固定IP的網址
一、申請LINE Notify服務
1.申請Line 服務:https://notify-bot.line.me/zh_TW/,拉到最下面的登錄服務
2.輸入自己的帳號密碼登入LINE服務
3.取得發行權杖
4.輸入相關資訊後,點選發行
5.獲得發行權杖,記得要把它先複製存到其他地方,這組文字等等就會用到。
6.這時你的LINE會收到一個訊息,表示權杖已經申請完畢
7.將Line Notify加入該群組
三、POSTMAN簡易測試傳遞訊息
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
google表單很好用,界面很完整,不只能存入google的試算表文件,能存入自己的mysql就可以用來其他的用途,很棒吧。
請在表單中,選擇指令碼編輯器,便可以開啟google app script。
在script中重要的指令如下
function myFunction() {
// 建立jdbc連線
var conn = Jdbc.getConnection("jdbc:mysql://host ip:port/databasename", "username", "password");
var stmt = conn.createStatement();
//綁定工作表
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var ss = SpreadsheetApp.getActive();
//設定資料範圍
var data = sheet.getDataRange().getValues();
//存入mysql
var row_del = new Array();
for (var i = 0; i < data.length; i++)
{
var sql = "INSERT INTO test (test, num) VALUES ('" + data[i][1] + "'," + data[i][2] + ")";
var count = stmt.executeUpdate(sql,1);
夜市 小霸王 發表在 痞客邦 留言 (6) 人氣( )
Gridview 是很好用的網頁UI control,外型類似excel的表格式呈現物件。 使用Gridview通常會搭配Formview或子Gridview做詳細資料呈現,微軟原始物件並沒有提供Detail Gridview的顯示方式,參考很多網路文件,是透過code behind在Gridview的rowdatabound過程中產生新的detail Gridview嵌入在,不過被我試出來一種可以在設計階段就嵌入的detail gridview。
方式簡介
1.插入主grid設定好sqldatasource,並將該grid所有欄位轉成TemplateField。
2.編輯樣板,選擇主grid最後一欄,在原始資料下插入panel,在panel插入子detail grid,設定好這個grid需要的sqldatasource。此時其實已經具有主子grid的功能,只是每一列都會顯示,並且樣子很奇怪
重點在這:
3.編輯html原始檔,在panel裡加入td,tr標籤,要出自己的欄位 第一個tr,要了新的列,然後td /td主要是要後退一欄,能與主grid有所區別,下一行的td則是放置子grid,而colspan=999是設定能要到一整列,而不會被截斷。
4.接下來把panel設定為Visible="False",只有在主grid row被選取時顯示子grid,僅須在grid的select事件中設定以下語法
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
本篇是講述透過網頁(ASP.net)來開啟或關閉Windows Service,原本想用COM來處理,但是覺得太麻煩,網路上找一下果然有類似的文章,就決定來試試。
開發環境
1.開發:VS.net 2010
2.平台:Server 2003 R2+ IIS+ ASP.net 2.0
3.參考:System.ServiceProcess
4.引用網頁:怎样在ASP.NET中调用一个Windows Services?
原本以為將程式寫好就OK,沒想到一直出現Access is denied,弄了半小時改了一堆權限,我連把ASPNET帳戶加入管理者Administrators還是沒辦法取得授權。
後來繼續google一下發現一堆人有相同問題,但是我查到一篇說ASP.net可以在Web.config事先指定使用者,所以在試著在Web.config的<system.web>下加入這行指令,而computername、username、pass請修改為自己的名稱,結果就可以正常執行了。
<identity impersonate="true" userName="computer_name\user_name" password="pass"/>
Windows Service就是指下面這東西
原始碼開始:----------------------
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>
<%@ Import Namespace="System.ServiceProcess" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
<html xmlns="http://www.w3.org/1999/xhtml" >
夜市 小霸王 發表在 痞客邦 留言 (1) 人氣( )
完成SERVER端COM物件建立之後,在ASP中便可以引用,並使用他的方法(函數)
1.建立物件:宣告名稱為「COM名稱.物件名稱」
Dim ezldap
set ezldap = createobject("ezldap1.ezldap")
如果忘記的話,可開啟元件服務,查看一下元件即可
2.物件使用:由於物件已建立(本例物件名為ezldap),因此透過「ezldap.函數名」即可使用物件的方法
IsstaffCheck=ezldap.StaffCheck(trim("youjun"),trim("12345"))
response.write "Isstaff=" & IsstaffCheck
本例中,物件方法為StaffCheck(參數),而本方法必為當初在VB.net中所宣告的Public Function。
ASP元件宣告與使用相當簡單,希望對所有正在開始寫COM(DLL)的人有所幫助
關於ASP.net部份,我太老了,來不及學ASP.net,有興趣可參考
真正高手的網站:topcat 姍舞之間的極度凝聚 ,http://www.dotblogs.com.tw/topcat/category/1056.aspx
請參閱
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
繼前部份(VB.net的類別庫專案建立 )將COM建立(是一個DLL檔)之後,在SERVER端必須把元件服務安裝好,原先在MTS是非常好玩的方法,不過在新版IIS 8裡面卻完全不同,這部份參考網頁:http://www.dotblogs.com.tw/topcat/archive/2008/03/05/1187.aspx ,也寫得相當詳細。
步驟如下
1.安裝.net SDK以取得SDK命令工具,其中A.如有新版可不用安裝,B則必須要安裝,但B可有450M大
2.安裝完畢之後,將在程式集內找到SDK命列提示字元
3.以系統管理員身份執行以下兩行註冊程式
註冊時: REGSVCS 路徑與檔案名稱.dll
GACUTIL /i 路徑與檔案名稱.dll
反註冊: GACUTIL /u 路徑與檔案名稱.dll
REGSVCS /u 路徑與檔案名稱.dll
4.然後你便可以到元件服務中確認看看元件是否正確被建立
開啟系統管理工具\元件服務
檢查元件是否正確建立,本例的專案名稱為ezldap1,元件名為ezldap,完整名稱為ezldap1.ezldap 而這也將成為ASP裡面宣告的名稱
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
最近執行一個專案,他給了一個VB.net的範例檔,卻要我們在網頁裡面執行,所以我想到我碩士班時用過的微軟的MTS,而MTS就是現在的COM,用COM的好處如下
1.COM屬於中介層,可實現三層式架構中間的企業規則
2.將程式封裝物件化,使用者或維護者不可碰觸,當然也隱藏了資料庫的實際位置
3.有些比較難處理的程式,可使用VB或VC去處理,將結果放回網頁去呈現
缺點就是COM是沒有介面的,他只能輸入參數並輸出參數。
建立過程主要參考網址:http://www.dotblogs.com.tw/topcat/category/1056.aspx ,內容非常詳細,建議研讀
以下說明建立方式
1.開啟VB.net,建立VB類別庫,並輸入專案名稱
2.加入參考:System.EnterpriseServices
3.在物件宣告前,加入兩個import
Imports System.EnterpriseServices
Imports System.Runtime.InteropServices
4.物件宣告時,直接指定Guid,格式如下,數值可亂數指定,物件名(本例為「ezldap」)將成為後續在ASP宣告物件的名稱
<Guid("245222C2-751F-4856-BFB0-93841510D720"), EventTrackingEnabled(True)> Public Class ezldap
5.在物件宣告完畢之後,加入一行COM物件繼承描述
Inherits ServicedComponent
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )
以下的ASP語法可透過ISBN找到博客來的書籍圖片及簡介
<%
'建立物件
Set xml2 = Server.CreateObject ("Microsoft.XMLHTTP")
Set outXML = Server.CreateObject("Microsoft.XMLDOM") 'Microsoft.XMLDOM物件
isbn="put your isbn"
'產生博客來網址
outurl="http://search.books.com.tw/exep/prod_search.php?cat=all&key=" & isbn
xml2.open "GET", outurl, false
xml2.send
'取博客來內容並轉碼
outXML=bytes2BSTR(xml2.responsebody)
IF xml2.status=200 Then '頁面連線正常
'找書籍內容位置
cpos=Instr(1,outXML,"checkbox")
If cpos<>0 then '在博客來中找到ISBN的書
'照圖片超連結
ppos=Instr(cpos,outXML,"rc=")
ppoe=Instr(ppos,outXML,"/>")
picpo=mid(outXML,ppos,ppoe-(ppos))
'去除圖片大小資訊
夜市 小霸王 發表在 痞客邦 留言 (0) 人氣( )