2007年12月28日 星期五

如何呼叫 Customer_Remove Stored Procedure,並且讀取傳回值和輸出參數 vCount

SqlParameter[] paramList = new SqlParameter[]{
new SqlParameter ("@vcApplicationConstName", "abc"),
new SqlParameter ("@iApplicationID", SqlDbType.VarChar,50),
new SqlParameter ("@Return", SqlDbType.Int)
};
((SqlParameter)paramList[1]).Direction = ParameterDirection.Output;
((SqlParameter)paramList[2]).Direction = ParameterDirection.ReturnValue ;

int a= SQLHelper.ExecuteNonQuery(conn, CommandType.StoredProcedure, "sp_BSQ_GetApplicationID", paramList);
Response.Write(a);
Response.Write("
iApplicationID=");
Response.Write(((SqlParameter)paramList[1]).Value);
Response.Write("
Returnvalue=");

Response.Write(((SqlParameter)paramList[2]).Value);




參考網址:http://www.mugua.net/vbgl/com/205004.htm

2007年12月27日 星期四

同筆數之特定欄位字串合併

SQL 資料表Select查詢後,如何進行同筆數之特定欄位字串合併?
例如:
id memo
1 m1
1 m2
2 m3
2 m4
3 m5
3 m6
合併後變成:
id memo
1 m1m2
2 m3m4
3 m5m6
解答:---------------------------

DECLARE @table TABLE (id nvarchar(4), memo nvarchar(4))
INSERT INTO @table (id, memo)VALUES ('1', 'm1');
INSERT INTO @table (id, memo)VALUES ('1', 'm2');
INSERT INTO @table (id, memo)VALUES ('2', 'm3');
INSERT INTO @table (id, memo)VALUES ('2', 'm4');
INSERT INTO @table (id, memo)VALUES ('3', 'm5');
INSERT INTO @table (id, memo)VALUES ('3', 'm6');

SELECT T1.id,
(
SELECT memo + ''
FROM @table T2
WHERE T2.id = T1.id
ORDER BY memo
FOR XML PATH('')
) AS memo
FROM @table T1
GROUP BY id
-----------------------------

2007年12月18日 星期二

asp Store Procedures用法

SET SpCMD=Server.CreateObject("ADODB.COMMAND")
SpCMD.CommandType=4
SpCMD.ActiveConnection=Conn
SpCMD.CommandText="SP"

IsPass=SpCMD.CreateParameter("pa",adchar,2)
SpCMD.Parameters.Append IsPass

SpCMD.EXECUTE
RESPONSE.WRITE IsPass.VALUE

這樣你在接收值的時候,
在SpCMD.EXECUTE 之後
可以使用
RESPONSE.WRITE SpCMD(0)
或者
RESPONSE.WRITE SpCMD("p")
來列印出來傳回的值!
________________________________________________________________________

Dim user_name, user_mail, user_phone, DbConn_ConnectionString
Dim strSQL, objConnection, paramString

user_name=Request.Form("user_name")
user_mail=Request.Form("user_mail")
user_phone=Request.Form("user_phone")

DbConn_ConnectionString = "Provider=SQLOLEDB; Data Source=Jackie; Initial Catalog=pubs; User ID=sa; Password="
set objConnection = Server.CreateObject("ADODB.Connection")
objConnection.open DbConn_ConnectionString
'這是我在如何動態傳回表單內容那篇文章中呼叫預儲程序所使用的方法
'將commamndtype 屬性設定為 adCmdStoredProc 表示 commandtext 為預儲程
'序 ,相關說明請參考如何動態傳回表單
strSQL = "sp_insert_members"
Cmd.CommandText = strSQL
Cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("user_name", adChar, adParamInput,11,user_name)
cmd.Parameters.Append cmd.CreateParameter("user_mail", adVarChar, adParamInput,40,user_mail)
cmd.Parameters.Append cmd.CreateParameter("user_phone", adVarChar, adParamInput,20,user_phone)
Cmd.Execute

'這裡所用的方法僅僅需要用到連結物件 Connection 的 Execute 方法來完成,在語法
'上較為簡單,同樣也是將從表單所接受到的參數傳送給預儲程序中所定義的參數(請注意
'參數是為字串型態還是數字型態,不同的型態有不同的定義方法)。
paramString = paramString & "'" & user_name & "', '" & user_mail & "', '" & user_phone
On Error Resume Next
objConnection.execute("exec sp_insert_members " & paramString)
objConnection.close
SET objConnection = nothing

參考網址

http://www.pc-net.com.tw/aspro/article/asp0421.asp?articleid=47
________________________________________________________________________

asp呼叫stored procedure並且傳回特定參數值的語法 | 2007/5/10 下午 03:21:00
1)簡易的寫法如下,但此寫法只能取回預存程序的第一次執行SQL指令的結果集合,我的經驗是,如果預存程序中含有一次以上的SQL指令執行,則會取不到正確或特定的結果集合,如果要可以操控取得特定值,則必須放棄簡易寫法,而採用第2種較複雜但正式的寫法:
Dim str, id,cmd
id = 123
str = "GetAccById @Id=" & id
Set rs = connuploadbk.execute(str)
response.write rs(0)
2)比較正式的寫法
'假設已建好一個名叫GetAccById的預存程序,其需要2個參數,1個是數值的@Id,另1個是字串的@Account,長度為40,同時@Account將會回傳一個值
'並假設已有一個conn資料庫連線開啟,可正確使用GetAccById預存程序
Dim cmd, acc, lngRecs,id
id = 123
Set cmd = CreateObject("ADODB.Command")
With cmd
.ActiveConnection = conn
.CommandText = "GetAccById"
.CommandType = &H0004

.Parameters.Append .CreateParameter ("@Id", 3, &H0001, ,id)
.Parameters.Append .CreateParameter ("@Account", 200, &H0002, 40)

.Execute lngRecs,,&H00000080
acc = .Parameters("@Account")
End With
response.write acc

2007年12月13日 星期四

在IIS6下出現W3WP.EXE佔用CPU100%的問題

在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。

解决内存占用过多,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500M),就自动回收内存。

解决CPU占用过多:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。

根据w3wp取得是那个一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script Host”来执行,就可以得到PID与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题

2007年12月2日 星期日

多Table的資料Merge

dt1.Merge(dt2, False, MissingSchemaAction.AddWithKey)
dt1.Merge(dt3, False, MissingSchemaAction.AddWithKey)

判斷 CheckBox 是否被選取

function doOutput()
{
var obj=document.getElementsByName("checkbox");
var len = obj.length;
var checked = false;

for (i = 0; i < len; i++)
{
if (obj[i].checked == true)
{
checked = true;
break;
}
}
alert(checked);
};