[ASP]透過 Recordset 來新增或更新資料

在ASP時代,SQL常常都是用字串去串接,所以會有很多的 SQL Injection 問題!
解法可以透過 ADODB.Command 再搭配它的 Parameters 方式。
但有時Table的欄位可能粉多用SQL會蠻長的,參數去對應有可能會對錯!
這時,您有另一個選擇,就是使用 Recordset 來新增或是更新資料

在ASP時代,SQL常常都是用字串去串接,所以會有很多的 SQL Injection 問題!

解法可以透過 ADODB.Command 再搭配它的 Parameters 方式。

但有時Table的欄位可能粉多用SQL會蠻長的,參數去對應有可能會對錯!

這時,我們有另一個選擇,就是使用 Recordset 來新增或是更新資料,如下,

1.先建立測試Table (假設DB Name為 TestDB)


CREATE TABLE T1
(
id INT IDENTITY(1,1) PRIMARY KEY,
c1 VARCHAR(64), 
c2 VARCHAR(64)
);
GO

--初始化,給一些資料
INSERT INTO T1(c1, c2) VALUES('c1-1', 'c2-1');
INSERT INTO T1(c1, c2) VALUES('c1-2', 'c2-2');

SELECT * FROM T1;

 

2.新增的ASP Code如下,


<% 
'依Request的值來新增
Dim c1, c2
c1 = Request.QueryString("c1")
c2 = Request.QueryString("c2")
if c1 <> "" and c2 <> "" then
	'有資料,進行新增
	'Way1:有SQL Injection 的問題 請不要這樣用哦 ~~~
	Dim connTest
	Set connTest = Server.CreateObject("ADODB.Connection") 
	connTest.Open "Provider='sqloledb';Server=(local);Database=TestDB;User Id=[使用者帳號];Password=[密碼];" 
	Dim strT1Insert 
	strT1Insert = "INSERT INTO T1(c1, c2) VALUES('" & c1 & "', '" & c2 & "');"
	connTest.Execute(strT1Insert) 
	
	'Way2:透過 Recordset 來新增資料
	Dim rsT1
	Set rsT1 = Server.CreateObject("ADODB.Recordset")
	
	Dim strT1Query
	strT1Query = "SELECT * From T1 Where 1=0"
	rsT1.Open strT1Query,connTest,3,3
	rsT1.AddNew
	rsT1("c1") = c1
	rsT1("c2") = c2
	rsT1.Update
	rsT1.Close
	connTest.Close
	Response.Write "資料新增完成!"
else
	Response.Write "沒有提供參數 c1 & c2"
end if
'http://www.w3schools.com/asp/ado_ref_recordset.asp
%>

 

3.更新的ASP Code如下,


<% 
'依Request的值來新增
Dim id, c1, c2
id = Request.QueryString("id")
c1 = Request.QueryString("c1")
c2 = Request.QueryString("c2")
if id<> "" and c1 <> "" and c2 <> "" then
	'有資料,進行 更新
	 
	Dim connTest
	Set connTest = Server.CreateObject("ADODB.Connection") 
	connTest.Open "Provider='sqloledb';Server=(local);Database=TestDB;User Id=[使用者帳號];Password=[密碼];" 
	' Open Connection Conn
	Set cmdUpdate = CreateObject("ADODB.Command")
	cmdUpdate.Activeconnection= connTest
	cmdUpdate.CommandText="SELECT * From T1 Where id=?"
	Set prmId = cmdUpdate.CreateParameter("id", 3, 1, 0, id)
        cmdUpdate.Parameters.Append prmId
	'透過 Recordset 來 更新 資料
	Dim rsT1
	Set rsT1 = Server.CreateObject("ADODB.Recordset")
	rsT1.Open cmdUpdate,,3,3
	if Not rsT1.Eof then
		rsT1("c1") = c1
		rsT1("c2") = c2
		rsT1.Update
		rsT1.Close
		Response.Write "資料更新完成!"
	else
		Response.Write "找不到資料! id:" & Server.HtmlEncode(id)
	end if
	
	connTest.Close
else
	Response.Write "沒有提供參數 id & c1 & c2"
end if
'http://www.w3schools.com/asp/ado_ref_recordset.asp
%>

 

備註:

為了測試方便,使用QueryString,請大家再依需求調整哦!

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^