搜尋此網誌

2013年4月7日 星期日

ASP錯誤處理

錯誤的類型有三種主要的錯誤類型: 
編譯錯誤:
運行錯誤
邏輯錯誤

錯誤簡歷下一步的(這裡提醒一下初學者,在ASP中只有在錯誤恢復下一步語句沒有錯誤簡歷轉到語句)如果你不使用了on error resume
下面就是一個錯誤代碼:

Microsoft OLE DB提供ODBC驅動程序錯誤80004005[微軟] [ODBC驅動程序管理器]數據源名稱未發現和未指定默認驅動程序/ test.asp,第60行

當我們在程序最上面使用了on error resume處理錯誤
<%'設置緩衝區為真將Response.Buffer =真“開始錯誤處理在錯誤恢復下一步%><%'錯誤處理如果Err.Number中<> 0'清除頁面Response.Clear'顯示錯誤信息給用戶%><HTML><HEAD><TITLE> </ TITLE></ HEAD><BODY BGCOLOR="#C0C0C0">的防禦對部隊的錯誤發生在執行這個ASP頁面<BR>的請報告以下信息支持台<P><B>頁面錯誤對象</ B> <BR>錯誤:<%= Err.Number的%> - 錯誤信息:<%= Err.Description%,> <BR>出錯文件:<%= Err.Source%> <BR>出錯行:<%= Err.Line%> <BR></ FONT></ BODY></ HTML><%結束,如果%>你們上面看到了,我首先設置了on error resume下一步,這樣出現錯誤就不會影響程序的執行。錯誤處理和數據庫錯誤恢復下一步為避免這種情況,我們就先得做些手腳,正確處理的方法如下:,如果Err.Number中= 0和objConnection.Errors.Count = 0然後
“這裡才能執行語句的,因為沒有錯誤設置rstResults = dbData.Execute(txtSql)如果結束
更多高級的處理辦法
<%如果Err.Number中<> 0Response.Clear選擇案例Err.Number中案例8'指定錯誤的號碼'在這裡處理自定義錯誤其他案例“一般錯誤如果隨後則IsObject(objConnection)如果objConnection.Errors.Count> 0%><B>數據庫連接對象</ B><%對於intLoop = 0至objConnection.Errors.Count - 1%>
錯誤:<%= objConnection.Errors(intLoop)。數目%> <BR>說明:<%= objConnection.Errors(intLoop)。描述%> <BR>來源:<%= objConnection.Errors(intLoop)來源%> <BR>SQLSTATE:<%= objConnection.Errors(intLoop)。SQLSTATE%> <BR>NativeError中:<%= NativeError中objConnection.Errors(intLoop)。“
<%下如果結束如果結束如果Err.Number中<> 0%><B>頁面錯誤對象</ B> <BR>錯誤編號<%= Err.Number的%> - 錯誤描述<%= Err.Description%> - 源<%= Err.Source%> - LINENUMBER <%。= Err.Line%> <P><%如果結束最終選擇如果結束%>

案例語句,它能讓我們來處理特定的錯誤。重定向和錯誤處理

,如果Err.Number中= 0和objConnection.Errors.Count = 0然後

Response.Clear的Response.Redirect?<網址>?
如果結束


把代碼變得更整齊
在你程序的最上方加入(當然在語言聲明之後)在錯誤恢復下一步語句。在你執行SQL以前進行錯誤檢查。使用重定向以前也要進行錯誤處理。讓你處理錯誤的包含文件在代碼的最上面

2013年3月31日 星期日

TSQL顯示資料表, 欄位名稱, 型別, 長度 語法

這語法很好用,可以順利撈出資料庫中的所有資料表名稱,各資料表中的欄位名稱,型別,與長度。
另外補充:
要找出資料庫中的所有資料表==>查sys.objects
要找出某資料表中的所有欄位與欄位型別id, 長度==>查sys.columns
要找出欄位型別名稱==>查sys.types

--===============================================================
自從訂閱了點部落之後,對資訊系統的自我認知,已經遠超越「Mammut」與「Marmot」 的大小差異,並且日漸渺小當中,每日只能從眾多高手牙慧中,盼望能多吸取一些知識。這幾年來由於工作的不穩定,我得常接手別人開發的專案,每一個專案跟程 式設計師一樣,有著不同的個性,有的有高度的模組化,有的ASP互相亂 include 一堆,有的把4-5個專案放到同一個目的網站中,有的遺留了許多無用的程式碼......。程式碼這麼的多元化,當然資料庫就更千奇百怪了,相同的 是......都沒有DD、都沒有有用的文件。

所以我便常常需要一個一個去看資料表的欄位名稱,也得用 Query 的結果猜測,這個欄位的「意義」還有他可能會跟「哪些資料表」是有關連的。
今天看到「尋找某欄位存在那幾些資料表」文章,發現這個功能不就是我之前很想要的功能嗎?一次把相關連的欄位名稱都找出來,真棒~這個功能我需要。
可是我還想知道其他的一些資訊,所以動手改了一下 T-SQL,在看整個程式前,先來看三個資料庫物件
SELECT * FROM sysobjects where type='U' -- 查詢所有使用者資料表


SELECT * FROMsyscolumns whereid=117575457 -- 依某資料表ID查所有欄位


SELECT * FROM systypes  -- 查欄位屬性xtype的意思


當然你要查詢上述的資料庫物件,要先切換到你想查的資料庫囉(USE DataBase_Name;)!
底下以 「NorthWind」資料庫查詢為對象
請注意,當中的「store」的值是決定要不要把 Query 結果給儲存起來,當 store=1 則不儲存,其他值會寫到同一個DB裡,建立名為「__T_all___」的資料表,每次會刪除重新建立。

useNorthwind ;    -- 更換成你要查詢的資料庫
DECLARE@tablename NVARCHAR(50)DECLARE @cloumnname NVARCHAR(50)DECLARE @store TINYINT
SET
@tablename=''   --
輸入要查詢的資料表,留下空的表示查全部
SET@cloumnname=''  -- 輸入要查詢的欄位名稱,留下空的表示查全部
SET@store =2      -- 設定store != 1 會將結果暫存在 [__T_all___]  資料表,
  
                    --請注意是否跟既有資料表同名
IF@store =1       -- store=1 只會顯示、傳回結果~不會儲存
BEGIN
SELECT
so.name 'Table',sc.name 'Column',st.name 'Type', sc.length 'Length' FROM sysobjects so
INNER JOIN syscolumns sc ON so.id =sc.id
INNER JOIN systypes st ON st.xtype=sc.xtype
WHERE (so.type='U'AND st.name <> 'sysname') AND so.name LIKE '%'+@tablename+'%' AND  sc.name LIKE '%'+@cloumnname+'%'ORDER BY1
END
ELSE
   --
不成立則存在[__T_all___]  資料表
BEGIN
IF
  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[__T_all___]') AND TYPE in (N'U'))DROP TABLE[__T_all___]
SELECT so.name 'Table',sc.name 'Column',st.name 'Type', sc.length 'Length' INTO__T_all___ FROM sysobjectsso
INNER JOIN syscolumns sc ON so.id =sc.id
INNER JOIN systypes st ON st.xtype=sc.xtype
WHERE (so.type='U'AND st.name <> 'sysname') AND so.name LIKE '%'+@tablename+'%' AND  sc.name LIKE '%'+@cloumnname+'%'ORDER BY1
END


多了欄位屬性與欄位大小,我想在做比對的時候,會準確更容易找到真正對應的欄位名稱。
另一個例子:搜尋 emp 相關欄位
SET@cloumnname='emp'


~ End

2013年3月27日 星期三

Windows遠端桌面複製貼上功能失效,重新啟用方法

1.開啟工作管理員
2.強制停止rdpclip.exe
3.開始->執行
4.輸入rdpclip.exe
5.測試看看
6.完成複製貼上功能重新啟用

2013年3月26日 星期二

利用暫存資料表逐筆完成工作

DECLARE @cts As DECIMAL
DECLARE @rcount As DECIMAL
SET @cts = 1

SELECT DISTINCT IDENTITY(INT,1,1) AS sno, *
INTO #temp1
FROM TABLE1

SELECT @rcount = Count(*) FROM #temp1

WHILE (@cts <= @rcount) Begin
    SELECT @Times = Count(*) FROM #temp1 Where sno = @cts
    SET @cts = @cts + 1
END

DROP TABLE #temp1

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

DECLARE @TEMP TABLE
    (
      ID int IDENTITY PRIMARY KEY,
      seqno nvarchar(50),
      number nvarchar(50),
     )

Declare @cts As Decimal
    Declare @rcount As Decimal
    Set @cts = 1

    insert into @TEMP
    Select  seqno, number
    From cntmgm.dbo.CNTCMSD_TAB

    Select @rcount = Count(*) From @TEMP

    While (@cts <= @rcount) Begin
        Select @ResultVar = number + '|' + plandate + '|' + projectno
        From @TEMP
        Where ID = @cts       
        Set @cts = @cts + 1
    End

2013年3月14日 星期四

產生GUID的方法

Select CONVERT(varchar(255), NEWID()) As PKEY

把分享的資料夾隱藏起來

適用範圍:Windows 98/Me/2000

在區域網路內分享資料夾讓別人讀取,是常有的事情,設密碼就可以限制不是任何人都可以讀取你的資料。用以下的方法,可以讓人在網路芳鄰中,無法看不到你分享的資料夾喔。

STEP1:打開「檔案總管」,在要分享的文件或資料夾上按一下右鍵,從選單中點選【內容】。

STEP2:在「內容」對話盒中,切換至〔資源分享〕活頁標籤,並點選「資源分享」,在「資源分享名稱」欄框中的文件或資料夾名稱後,加上一個 $ 的符號,再按下〔確定〕,再進入網路芳鄰看看,分享出來的文件或資料夾真的消失不見了。

密技補充包:
看不到,分享出來就沒有意義了!沒關係,你還是能讓你的好友們找到檔案。進入網路芳鄰後,在網址欄裡輸入「\\電腦名稱\資料夾名稱$」就找到啦。

2013年3月2日 星期六

[SQL]並未為 RPC 設定伺服器 'SQL-LINK-SERVER' (Msg 7411)

今天同事問說他Run Link Server的STORE PROCEDURE,出現了以下的錯誤!
Msg 7411, Level 16, State 1, Line 1
並未為 RPC 設定伺服器 'SQL-LINK-SERVER'

用中文去查,居然找不到,用Msg 7411就查到了,要把LINK-SERVER的屬性「RPT Out」設成「True」就搞定了!
image
另外,如果DB的定序與LINK SERVER的定序不同,LINK-SERVER的屬性「Use Remote Collation」要設成「False」哦!