目前分類:JS、.net及SQL (42)

瀏覽方式: 標題列表 簡短摘要

在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應該會掛上鎖頭,結果竟然沒有....

image

查看一下資訊,說是不安全,查一下網路才知道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,原因是

image

 

 

 


文章標籤

夜市 小霸王 發表在 痞客邦 留言(0) 人氣()

花了一點時間,把原本express資料庫備份後,還原至SQL,不知道原來還有這麼多的設定

1.從express,工作\備份,指定bak檔案,完成備份

2.從SQL,建立好空的資料庫名稱

3.點選工作\還原\資料庫

4.選步驟1完成的bak備份檔

5.進入左側檔案選項,勾選「將所有檔案重新放置到資料夾」
image

6.進入選項功能,

  • 勾選複寫現有資料庫
  • 取消勾選結尾紀錄備份(否則可能出現:無法執行 BACKUP LOG,因為當前沒有資料庫備份)
  • 伺服器連接勾選關閉目的地資料庫的現有連接,會進入單一使用者模式(否則可能會出現共用無法存取而導致失敗)

image


文章標籤

夜市 小霸王 發表在 痞客邦 留言(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加密。

  1. 申請網站dns名稱
  2. 申請網站ssl服務
  3. 安裝openssl將ssl憑證crt改為pfx格式
  4. 設定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連線與測試
零、資料準備
1.準備至少4台VM主機,並安裝Ubuntu 18.04,建議使用VBox
2.準備4~5組IP(本例為5組)
-Manager Node x 1:192.168.1.100
-SQL Node x 2:192.168.1.105192.168.1.106
-Data Node x 2:192.168.1.111192.168.1.112
3.可以先移除Ubuntu 的firewall 方法:進入終端機模式後,輸入
$sudo apt-get remove ufw
之所以安裝在Ubuntu,其實是因為首先我嘗試安裝在Windows Server上,困難重重,一天後放棄,網路上的教學偏重安裝於Linux,我才選了Ubuntu,可以在這裡下載,我下載18.04版本 https://www.ubuntu-tw.org/modules/tinyd0/
而安裝教學可以參考網站,寫的非常詳細 https://blog.xuite.net/yh96301/blog/341994889-%E5%AE%89%E8%A3%9DUbuntu+18.04
以下開始安裝三個節點,我是參考這篇,但有些要更新 https://www.digitalocean.com/community/tutorials/how-to-create-a-multi-node-mysql-cluster-on-ubuntu-18-04

夜市 小霸王 發表在 痞客邦 留言(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是設定能要到一整列,而不會被截斷。

20479423_1892260344122783_6301456260767799992_n

4.接下來把panel設定為Visible="False",只有在主grid row被選取時顯示子grid,僅須在grid的select事件中設定以下語法

20294565_1892265997455551_7810063094836065402_n


文章標籤

夜市 小霸王 發表在 痞客邦 留言(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就是指下面這東西

image


原始碼開始:----------------------

<%@ 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")

如果忘記的話,可開啟元件服務,查看一下元件即可
image_thumb[25]

2.物件使用:由於物件已建立(本例物件名為ezldap),因此透過「ezldap.函數名」即可使用物件的方法

IsstaffCheck=ezldap.StaffCheck(trim("youjun"),trim("12345"))
response.write "Isstaff=" & IsstaffCheck

本例中,物件方法為StaffCheck(參數),而本方法必為當初在VB.net中所宣告的Public Function。
image_thumb[71]

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命列提示字元

image

3.以系統管理員身份執行以下兩行註冊程式
註冊時:
  REGSVCS 路徑與檔案名稱.dll
  GACUTIL /i 路徑與檔案名稱.dll
反註冊:
  GACUTIL /u 路徑與檔案名稱.dll
  REGSVCS /u 路徑與檔案名稱.dll
4.然後你便可以到元件服務中確認看看元件是否正確被建立
開啟系統管理工具\元件服務
image

檢查元件是否正確建立,本例的專案名稱為ezldap1,元件名為ezldap,完整名稱為ezldap1.ezldap
而這也將成為ASP裡面宣告的名稱
image

夜市 小霸王 發表在 痞客邦 留言(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類別庫,並輸入專案名稱
image

2.加入參考:System.EnterpriseServices
image

3.在物件宣告前,加入兩個import
Imports System.EnterpriseServices
Imports System.Runtime.InteropServices
image

4.物件宣告時,直接指定Guid,格式如下,數值可亂數指定,物件名(本例為「ezldap」)將成為後續在ASP宣告物件的名稱
<Guid("245222C2-751F-4856-BFB0-93841510D720"), EventTrackingEnabled(True)> Public Class ezldap
image

5.在物件宣告完畢之後,加入一行COM物件繼承描述
Inherits ServicedComponent
image

夜市 小霸王 發表在 痞客邦 留言(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) 人氣()

«12 3