星期一, 9月 28, 2009

查詢資料庫裡全部資料表名稱與或是某資料表的資料表型別


參考文章:

http://database.ittoolbox.com/documents/finding-table-names-in-sql-18556



發生問題:

想查詢資料庫裡的全部資料表名稱,或是某資料表的型別.
可能原因:

解法方法:


--查詢所有資料表名稱
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U'



--某資料表的型別
SELECT name, type_name(xtype),length
FROM syscolumns
WHERE id = object_id('yourtable')
ORDER BY colid


//隱藏部分的文章




Use the following for user tables
--name為資料表名稱
SELECT name
FROM dbo.sysobjects
--U類型為使用者資料表
WHERE xtype = 'U'


--some other types are:
--'V' - views(檢視表)
--'S' - system tables(系統資料表)

星期日, 7月 12, 2009

DataList裡FindControl


參考文章:
請問ItemDataBound是什麼意思
你有用 FindControl 時找不到 Control (控制項) 的經驗嗎
[ASP.NET]Page.FindControl
遞迴方式的 FindControl (進階版)
ASP.NET問題解決,書中第4-18


發生問題:


並未將物件參考設定為物件的執行個體
描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

例外詳細資訊: System.NullReferenceException: 並未將物件參考設定為物件的執行個體

原始程式錯誤:

可能原因:

原來寫法如下:
//以下為隱藏部分的文章

protected void ChgLvl(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
Label temp = Page.FindControl("user_levelLabel") as Label;
switch (temp.Text)
{
case "1":
temp.Text = "關懷員";
break;
case "2":
temp.Text = "資料輸入人員";
break;
case "3":
temp.Text = "1級主管";
break;
case "4":
temp.Text = "2級主管";
break;
case "5":
temp.Text = "管理員";
break;
}
}
}

解法方法:


修改為以下寫法

protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
{
//
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
//原來寫法為
//Label temp = Page.FindControl("user_levelLabel") as Label;
//改為來取得控制項
Label lbl = e.Item.FindControl("user_levelLabel") as Label;

switch (lbl.Text)
{
case "1":
lbl.Text = "關懷員";
break;
case "2":
lbl.Text = "資料輸入人員";
break;
case "3":
lbl.Text = "1級主管";
break;
case "4":
lbl.Text = "2級主管";
break;
case "5":
lbl.Text = "管理員";
break;
}

}
}


GridView匯出至Excel(GridView Export To Excel)


參考文章:
export to excel from dataview
在CodeFile中取得控制項將輸出Clinet端的HTML內容
Solving GridView Export Paging Problems
解決GridView使用RenderControl取得HTML出現的問題
KB-About Event Validation of ASP.NET 2.0




方法一:


protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=FileName1.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite =
new HtmlTextWriter(stringWrite);
GridView g = new GridView();
g.DataSource = SqlDataSource1;
g.DataBind();
g.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

}


方法二:

public override void VerifyRenderingInServerForm(Control control)
{

// Confirms that an HtmlForm control is rendered for
//the specified ASP.NET server control at run time.
//不加會有型別 'GridView' 的控制項 'GridView1' 必須置於有 runat=server 的表單標記之中的錯誤發生。
}

protected void ExporToExcel(object sender, EventArgs e)
{
Response.Clear();

Response.AddHeader("content-disposition",
"attachment;filename=sdf.xls");

Response.Charset = "";

// If you want the option to open the Excel file without saving than

// comment out the line below

// Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.ContentType = "application/vnd.xls";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter htmlWrite =
new HtmlTextWriter(stringWrite);

// turn off paging & sorting
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataBind();

GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

// turn the paging on again
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
GridView1.DataBind();

}

如果GridView的分頁如排序無事前關閉再匯出,會發生
RegisterForEventValidation 只能在 Render(); 期間呼叫
的錯誤發生,解決方法有2種

1、請在html加上EnableEventValidation="false"修改如下
<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="1003.aspx.cs" Inherits="_1003_1003" %>(儘量別用此方法,原因點我)

2、

// turn off paging & sorting
//匯出前先將排序與分頁關閉
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataBind();

GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

// turn the paging on again
//匯出後再將排序與分頁開啟
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
GridView1.DataBind();

星期四, 7月 09, 2009

同一個 IIS 處理序中不能執行兩個不同版本的 ASP.NET

不知為什麼發生下列問題。可能是移檔案的時候不小心又開到windows的應用程式了吧。


同一個 IIS 處理序中不能執行兩個不同版本的 ASP.NET。請使用 IIS 系統管理工具重新設定伺服器使用不同的處理序來執行應用程式。


開啟IIS至該站台按右鍵選擇內容>ASP.NET>將版本改成網站所使用的.NET版本
即可。
如果還是有問題試看看先設成別的版本確定後再改回網站使用的版本

星期三, 7月 08, 2009

Crystal Report 在 Web 應用程式無法登入到 SQL Server

使用VS2008里的Crystal Report連SQL-Server時,可能會發生以下問題


在 '/' 更應用程式伺服器錯誤
-----------------------------------------------------------
離線失敗。.

說明: 在執行的目前 Web 要求期間發生未處理的例外狀況發生。 請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。.

例外狀況詳細資料: CrystalDecisions.CrystalReports.Engine.LogOnException: 登入失敗

或是需要使用者打入登入資訊。發生原因如下(引述http://support.microsoft.com/kb/319264/zh-tw)

基於安全理由, SQL Server 密碼在 Run Time 不會保存在 Crystal Report。

這時就可以在執行階段變更資料庫位置的功能。來解決此問題。
在顯示的程式碼裡加入以下程式碼。



//隱藏部分的文章

//記得要引入這兩個命名空間
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;

protected void Page_Load(object sender, EventArgs e)
{
//
ConnectionInfo connectionInfo = new ConnectionInfo();
SetDBLogonForReport(connectionInfo);
//主機位置
connectionInfo.ServerName = "XXX.XXX.XXX.XXX";
//資料庫名稱
connectionInfo.DatabaseName = "Adventure Works";
//登入帳號
connectionInfo.UserID = "XX";
//登入密碼
connectionInfo.Password = "XXXXX";
}
private void SetDBLogonForReport(ConnectionInfo connectionInfo)
{
//這裡的CrystalReportView1是看你物件ID
TableLogOnInfos tableLogOnInfos = CrystalReportViewer1.LogOnInfo;

foreach (TableLogOnInfo tableLogOnInfo in tableLogOnInfos)
{
tableLogOnInfo.ConnectionInfo = connectionInfo;
}
}


參考文章:
http://support.microsoft.com/kb/319264/zh-tw
http://msdn.microsoft.com/zh-tw/library/ms227536.aspx

多重步驟OLE DB 操作發生錯誤。請檢查每一個可用的OLE DB 狀態值

資料庫欄位為:
1.序號:int自動編號
2.名稱:nvarchar
3.類別:nvarchar


資料庫設計時,序號為自動編號,當使用DetailsView的新增時。
在aspx裡的原始碼會自動產生如下的InsterCommand與InsertParameters:


InsertCommand="INSERT INTO [支出品明細] ([序號],[名稱],[類別]) VALUES (?,?,?)"






只要把資料庫自動編號的欄位去除掉就不會有問題了。
修改後如下:

InsertCommand="INSERT INTO [支出品明細] ( [名稱], [類別]) VALUES (?, ?)"




IDENTITY_INSERT 設為 OFF 時

問題:在使用DetailsView新增時發生
IDENTITY_INSERT 設為 OFF 時



原來.NET自動產生的InsertCommand為:

InsertCommand="INSERT INTO [支出品明細] ( [序號], [名稱], [類別]) VALUES ( ?, ?, ?)"



因為序號在資料庫設計時為自動編號,所以要將InsertCommand改為

InsertCommand="INSERT INTO [支出品明細] ( [名稱], [類別]) VALUES (?, ?)"

問題就解決了



星期一, 7月 06, 2009

C# 匯出 Excel

一些參考文章



A Very Easy to Use Excel XML Export Library
http://www.codeproject.com/KB/office/excelxmllibrary.aspx
How to transfer data to an Excel workbook by using Visual C# 2005 or Visual C# .NET
http://support.microsoft.com/kb/306023/en-us
如何將資料傳送至 Excel 活頁簿藉由使用 Visual C# 2005 或 Visual C# . NET
http://support.microsoft.com/kb/306023/zh-tw
Considerations for server-side Automation of Office
http://support.microsoft.com/kb/257757/en-us
Office 伺服器端自動化的考量因素
http://support.microsoft.com/kb/257757/zh-tw
How to automate Microsoft Excel from Visual Basic .NET
http://support.microsoft.com/kb/301982/en-us
如何從 Visual Basic . NET Microsoft Excel 自動化
http://support.microsoft.com/kb/301982/zh-tw
http://support.microsoft.com/kb/301982/zh-tw
ASP.NET 2.0 匯出資料到Excel的簡單作法
http://blog.miniasp.com/post/2008/02/12/Export-data-to-Excel-with-ease-using-ASPNET.aspx


上述轉自http://blog.miniasp.com/

目前的安全設定並不允許您從這個地方下載檔案

當使用2003要下載檔案發生以下錯誤訊息:
目前的安全設定並不允許您從這個地方下載檔案
可以嘗試下列方法解決,


至瀏覽器裡的工具>網際網路選項>安全性>信任的網站>將此網站加到該區域
將下載的網址打入按下新增。
問題應該就解決了。


星期四, 4月 16, 2009

.Net事件觸發的順序

轉自:http://blog.xuite.net/cct0201/derek/16930927

//隱藏部分的文章

Application: BeginRequest
Application: PreAuthenticateRequest
Application: AuthenticateRequest
Application: PostAuthenticateRequest
Application: PreAuthorizeRequest
Application: AuthorizeRequest
Application: PostAuthorizeRequest
Application: PreResolveRequestCache
Application: ResolveRequestCache
Application: PostResolveRequestCache
Application: PreMapRequestHandler
Page: Construct
Application: PostMapRequestHandler
Application: PreAcquireRequestState
Application: AcquireRequestState
Application: PostAcquireRequestState
Application: PreRequestHandlerExecute
Page: AddParsedSubObject
Page: CreateControlCollection
Page: AddedControl
Page: AddParsedSubObject
Page: AddedControl
Page: ResolveAdapter
Page: DeterminePostBackMode
Page: PreInit
Control: ResolveAdapter
Control: Init
Control: TrackViewState
Page: Init
Page: TrackViewState
Page: InitComplete
Page: LoadPageStateFromPersistenceMedium
Control: LoadViewState
Page: EnsureChildControls
Page: CreateChildControls
Page: PreLoad
Page: Load
Control: DataBind
Control: Load
Page: EnsureChildControls
Page: LoadComplete
Page: EnsureChildControls
Page: PreRender
Control: EnsureChildControls
Control: PreRender
Page: PreRenderComplete
Page: SaveViewState
Control: SaveViewState
Page: SaveViewState
Control: SaveViewState
Page: SavePageStateToPersistenceMedium
Page: SaveStateComplete
Page: CreateHtmlTextWriter
Page: RenderControl
Page: Render
Page: RenderChildren
Control: RenderControl
Page: VerifyRenderingInServerForm
Page: CreateHtmlTextWriter
Control: Unload
Control: Dispose
Page: Unload
Page: Dispose
Application: PostRequestHandlerExecute
Application: PreReleaseRequestState
Application: ReleaseRequestState
Application: PostReleaseRequestState
Application: PreUpdateRequestCache
Application: UpdateRequestCache
Application: PostUpdateRequestCache
Application: EndRequest
Application: PreSendRequestHeaders
Application: PreSendRequestContent


星期一, 2月 23, 2009

vba偵測目前所選擇的工作表名稱


'目前使用中的工作表的名稱
Msgbox ActiveSheet.name

插入新的工作表

Sub 插入新的工作表()
 Worksheets.Add
End Sub


//隱藏部分的文章
'-----------------------------------

  
Sub 插入新的工作表2()
 Worksheets.Add After:=Worksheets(1), Count:=2
 'After:=Worksheets(1)指定插入位置
 'Count:=2      指定插入數量
End Sub



星期日, 11月 16, 2008

知易行難

總是知道該怎麼做才是最正確。
但是太懶囉-_-
總是明日復明日啊。
//隱藏部分的文章
應該找個自己有興趣來專精一下。
不然…
可能會很慘…

星期五, 10月 24, 2008

資料夾開啟ftp失敗

工具>網際網路>進階>還原成預設值
搞定!
//隱藏部分的文章

星期二, 8月 26, 2008

How to use Top in Oracle

今天要幫同事在Oracle裡面,
Select Top n * From [TABLE_NAME]
怎麼用都不行原來是…


Oracle 沒有這個 Top 這個關鍵字。
那要如何達成呢?

答案是利用rownum這東東!!

rownum代表著顯示出來的列數。
例如:
資料表欄位有:姓名, 性別,加入日期


執行:select * from 加入日期 asc

結果:

姓名, 性別,加入日期
Tom,男,2008-08-11
John,男,2008-08-13
Mary,女,2008-08-20
Joyce,女,2008-08-21
Joy,女,2008-08-30


則Tom,男,2008-08-11這筆資料的rownum就是1,
而Mary,女,2008-08-30的rownum就是3。
所以如果要使用類似Top 3(前3筆資料)的功能,
就是改寫成 rownum < 4的數字 ,
但是rownum是根據你所下的條件select資料而定的,
並不是真的Tom,男,2008-08-11有個欄位rownum存放1 。
再看下面另一例。

執行:select * from 加入日期 desc

結果:

Joy,女,2008-08-30
Joyce,女,2008-08-21
Mary,女,2008-08-20
John,男,2008-08-13
Tom,男,2008-08-11


這時Tom,男,2008-08-11這筆資料的rownum就是5,
而 Joy,女,2008-08-30的rownum就是1 ,
這樣懂了嗎?
所以要達成與Top 3的功能就要寫成 :


Select*From
(
--依想要出現資料的大小順序先排好
Select*From 加入日期 Desc
) rownum < 4

但是要注意似乎無法用rownum = 4 (等於某列)來顯示單筆資料




參考下列文章
http://blog.blueshop.com.tw/phoenixhann/archive/2007/12/14/53667.aspx
http://www.xxlinux.com/linux/article/development/database/20070530/8617.html

星期日, 4月 27, 2008

具有潛在危險 Request.Form 的值已從用戶端

前言:
在ASP.NET如果在POSTBACK時,在各欄位裡的值函有HTML的TAG
應該可常看到
具有潛在危險 Request.Form 的值已從用戶端
而使程式當掉,當真的需要處理這些時該怎麼辦呢?



藍色小鋪或是GOOGLE相關資料都有資料可供參考

1、單一頁面只要在該頁設計裡面的HTML上方加上

<%@ Page Language="VB" validaterequest="false" %>


2、要讓整個專案都可使用,請至web.cofig加上

<system.web >
<pages >

< validaterequest="false" >
</pages >
</system.web >



結語:
讓使用者可以用html的tag,其實是件很危險的事情。
可避免就免,如果真的要使用也有替代的方式。
1、真的需要html的換行br或是p的功能
  a、在輸入頁時可以使用[br][p]等自訂字串來替代。
  b、在顯示頁將[br][p]等自訂字串取代為html的tag

2、只是為了顯示為目的。<<br>>
  a、在輸入頁使用server.HtmlEncode
  b、在顯示頁用即可看到<br>

星期四, 4月 10, 2008

iorgane F1+ V.S. iphone

最近在大陸工作的學長的msn看到一款大陸手機像極了iphone

捉了幾張圖片對照看看
第一張是iorgane F1+



第二張是正牌的iphone




iorgane 中國橘子的網站


還有品牌起源

 20年前有一個富有理想的青年來到大洋彼岸,在一個富有激情的時代接觸了一個現在被人熟知的品牌,這個形狀在青年心中一直存在著,5年前這個富有理想的青年來到深圳,通過富有激情努力和執著,開創的一翻事業,在幾個月前,在一次偶然的機會中,他接觸到了一款手機,天啊,20年的形狀馬上出現,自己的理想終於可以如願了,在接下來的時間裡,通過無數的實驗和論證,一顆通信及數碼娛樂的新星誕生了,那就是「iorgane」,一個英文單詞拼錯的中國橘子「iorgane」...

  iorgane中國橘子手機F1是一個革命性的產品,她的出現標誌著手機進入了一個新的時代—手語時代,產品完美的人性設計,不斷增加的應用功能,將為消費者提供強大的服務和無限的想像。

  iorgane中國橘子手機的品牌目標是將產品和「型、能、色、影」四個字有機結合在一起,它們分表代表了中國橘子手機在手機市場未來幾年發展趨勢的理解。


網站下面還有「國貨當自強」的字樣(但是感覺就像是抄別人的產品)
北京奧運成功之類的 ~好笑字樣:p


我跟學長討論相似度有九成以上。
價格大概是台幣5千多吧~現在就等學長買了再貼好不好用囉~
我想應該是不會一用就爆炸吧:p


星期二, 4月 01, 2008

匆匆的陽明山半日遊(已更正)




本來星期六一早就要去陽明山看海芋,但是星期5接到老師說星期六學校有活動。
就跑去學校小玩了一下。


活動結束後,天氣突然放睛…
不去似乎很對不起自己就衝上去啦~
誰知道山上人超多的=口=,多到沒興致去賞花,
就改到冷水坑去照相。
晚上去林士夜市 xd 只是好累啊!我果然老了~"~


星期日, 3月 30, 2008

貴婦的夢想



eileen 曾經說她沒有當過貴婦,


但至少也要一次10萬元的大消費。
滿足她的貴婦夢~~
但是後來她好像忘記了,呵呵。
努力賺錢來滿足她吧\_/所以我要加油!

星期一, 3月 24, 2008

從型別 'DBNull' 轉換為型別 'String' 是無效的。

從型別 'DBNull' 轉換為型別 'String' 是無效的。


如果從資料庫讀資料出來要放在
Label 或 Textbox 等控制項應該會常碰到這問題。
就是當資料庫有欄位是Null時,無法轉為String就會出現上述的錯誤訊息。
這時該怎麼辦呢?


例如:Er_Code這欄位裡面是Null則在放入Text就會出現錯誤。

Me.Code.Text = DV(i)("Er_Code")

這時你可以這樣做。利用IsDBNull這函式來判斷

If IsDBNull(DV(i)("Er_Code")) Then
Me.Code.Text = ""
Else
Me.Code.Text = DV(i)("Er_Code")
End If

但是如果很多個地方都需要不可能每個地方都寫一次這樣的判斷吧。
這時就需要個函式啦,讓它Null就傳回「""」空字串。


Function CheckDdNull(ByVal data As Object) As String
If IsDBNull(data) Then
Return ""
Else
Return data
End If
End Function

有注意到紅色字體嗎?需注意千萬別把傳入值寫成
Function CheckDdNull(ByVal data As String) As String
之前Berni我就因為這個盲點一直試不出bug在那,相信大家都沒我那麼
笨應該懂為什麼吧。

因為當資料庫的值是Null傳過來不等於String那錯誤就會發生了。
那怎麼辦呢?難道寫 DBNull 那如果資料庫有值不是也會錯嗎?
這裡有個方便的方法可以寫成 Object 這樣不管傳來什麼也不會錯了

Analytics