一、先來熟悉一下將要使用的對象方法:
用來獲取上一個頁面傳 遞過來的數據一般是使用Request對象。同樣的,我們也可以使用Request對象 來獲取上傳上來的文件數據,使用的方法是Request.BinaryRead()。
要從資料庫中讀出來圖片的數據顯示到網頁上面要用到的方法是:Request.BinaryWrite()。
二、在得到了圖片的數據,要保存到資料庫中的時候,不可以直接使用Insert語句對資料庫進行操作,而是要使用ADO的AppendChunk方法。
同樣的,讀出資料庫中的圖片數據,要使用GetChunk方法。
各個方法的具體語法如下:
*Request.BinaryRead語法:
variant=Request.BinaryRead(count)
參數
variant
返回值保存著從客戶端讀取到數據。
count
指明要從客戶端讀取的數據量大小,這個值小於或者等於使用方法
Request.TotalBytes得到的數據量。
*Request.BinaryWrite語法:
Request.BinaryWritedata
參數
data
要寫入到客戶端瀏覽器中的數據包。
*Request.TotalBytes語法:
variant=Request.TotalBytes
參數
variant
返回從客戶端讀取到數據量的位元組數。
*AppendChunk語法
將數據追加到大型文本、二進制數據Field或Parameter對象。
object.AppendChunkData
參數
objectField或Parameter對象
Data變體型,包含追加到對象中的數據。
說明
使用Field或Parameter對象的AppendChunk方法可將長二進制或字元數
據填寫到對象中。在系統內存有限的情況下,可以使用AppendChunk方法對長
整型值進行部分而非全部的操作。
*GetChunk語法
返回大型文本或二進制數據Field對象的全部或部分內容。
variable=field.GetChunk(Size)
返回值
返回變體型。
參數
Size長整型表達式,等於所要檢索的位元組或字元數。
說明
使用Field對象的GetChunk方法檢索其部分或全部長二進制或字元數據。
在系統內存有限的情況下,可使用GetChunk方法處理部分而非全部的長整型
值。
GetChunk調用返回的數據將賦給「變數」。如果Size大於剩餘的數據,則
GetChunk僅返回剩餘的數據而無需用空白填充「變數」。如果欄位為空,則
GetChunk方法返回Null。
每個後續的GetChunk調用將檢索從前一次GetChunk調用停止處開始的數
據。但是,如果從一個欄位檢索數據然後在當前記錄中設置或讀取另一個欄位
的值,ADO將認為已從第一個欄位中檢索出數據。如果在第一個欄位上再次調
用GetChunk方法,ADO將把調用解釋為新的GetChunk操作並從記錄的起始
處開始讀取。如果其他Recordset對象不是首個Recordset對象的副本,則
訪問其中的欄位不會破壞GetChunk操作。
如果Field對象的Attributes屬性中的adFldLong位設置為True,則可
以對該欄位使用GetChunk方法。
如果在Field對象上使用Getchunk方法時沒有當前記錄,將產生錯誤3021
(無當前記錄)。
三、設計資料庫,作為測試的資料庫結構如下(Access97):
欄位名稱類型描述
id自動編號主鍵值
imgOLE對象用來保存圖片數據
對於在MSSQLServer7中,對應的結構如下:
欄位名稱類型描述
idint(Identity)主鍵值
imgimage用來保存圖片數據
四、正式編寫純ASP代碼上傳部分了,首先,有一個提供給用戶的上傳界面,可以讓用戶選擇要上傳的圖片。代碼如下(upload.htm):
<html>
<body>
<center>
<formname="mainForm"enctype="multipart/form-data"
action="process.asp"method=post>
<inputtype=filename=mefile><br>
<inputtype=submitname=okvalue="OK">
</form>
</center>
</body>
</html>
注意代碼中黑色斜體的部分,一定要在Form中有這個屬性,否則,將無
法得到上傳上來的數據。
五、接下來,要在process.asp中對從瀏覽器中獲取的數據進行必要的處理,因為在process.asp中獲取到的數據不僅僅包含了想要的上傳上來的圖片的數據,也包含了其他的無用的信息,需要剔除冗餘數據,並將處理過的圖片數據保存到資料庫中,這里以Access97為例。具體代碼如下(process.asp):
<%
response.buffer=true
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13)&chrB(10)
divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mydata=midb(formdata,datastart,dataend)setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&
server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.Opensetrec=server.createobject("ADODB.recordset")
rec.Open"SELECT*FROM[images]whereidisnull",connGraph,1,3
rec.addnew
rec("img").appendchunkmydata
rec.update
rec.close
setrec=nothing
setconnGraph=nothing
%>
六、這樣就把上傳來的圖片保存到了名為images.mdb的資料庫中了,剩下的工作就是要將資料庫中的圖片數據顯示到網頁上面了。
一般在HTML中,顯示圖片都是使用<IMG>標簽,也就是<IMGSRC="圖片路徑">,但是圖片是保存到了資料庫中,「圖片路徑」是什麼呢?呵呵,其實這個SRC屬性除了指定路徑外,也可以這樣使用哦:
<IMGSRC="showimg.asp?id=xxx">
所以,要做的就是在showimg.asp中從資料庫中讀出來符合條件的數據,並返回到SRC屬性中就可以了,具體代碼如下(showimg.asp):
<%
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&
server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
strsql="selectimgfromimageswhereid="&trim(request("id"))
rec.openstrsql,connGraph,1,1
Response.ContentType="image/*"
Response.BinaryWriterec("img").getChunk(7500000)
rec.close
setrec=nothing
setconnGraph=nothing
%>
七、注意在輸出到瀏覽器之前一定要指Response.ContentType="image/*",以便正常顯示圖片。最後要注意的地方是,我的process.asp中作的處理沒有考慮到第一頁(upload.htm)中還有其他數據,比如<INPUTtype=tesxtname=userid>等等,如果有這些項目,process.asp就要注意處理掉不必要的數據。
㈡ sql2005怎麼向視圖中傳參
要想做一個 帶參數的視圖的話,
可以用 表值函數來處理.
下面是個 沒有參數的 表值函數的例子:
1> CREATE FUNCTION getHelloWorld()
2> RETURNS TABLE
3> AS
4> RETURN
5> SELECT 'Hello' AS A, 'World' AS B;
6> GO
1> SELECT * FROM getHelloWorld();
2> go
A B
----- -----
Hello World
(1 行受影響)
變成有參數的, 就是在參數那裡增加一個參數
下面的 SQL 語句中,增加一個 WHERE 欄位=@參數 的語句。
檢索的時候,就是
SELECT * FROM 表值函數(參數)
㈢ 怎麼在sql資料庫中的表裡邊添加圖片
1、打開開始菜單欄,在菜單欄上找到我們已經安裝的SQL server 2008,單擊打開它。
㈣ Sql Server中怎麼用text批量上傳圖片
你是用SqlServer什麼版本,2000?2005?2005中已經沒有這個程序了。但可直接對blob 數據類型進行操作:CREATE TABLE #BlobData(BlobData varbinary(max))
--insert blob into temp table
SET @SqlStatement =
N'
INSERT INTO #BlobData
SELECT BlobData.*
FROM OPENROWSET
(BULK ''' + @FileName + ''',
SINGLE_BLOB) BlobData'
EXEC sp_executesql @SqlStatement
--update
UPDATE dbo.MyTable
SET MyBlob = (SELECT BlobData FROM #BlobData)
WHERE MyTable.MyPK = @MyPK
DROP TABLE #BlobData
GO 如果你還是用2000,也就是text方式,參考一下代碼: 1 C:\Program Files\Microsoft SQL Server\MSSQL\Binn>text
2 TEXTCOPY Version 1.0
3 DB-Library version 8.00.194
4 Type the SQL Server to connect to: 220.**.**.*
5 Type your login: sa
6 Type your password: sa
7 Type the database: Proct
8 Type the table: Image
9 Type the text or image column: data
10 Type the where clause: where id=16
11 Type the file: c:\abc.gif
12 Type the direction ('I' for in, 'O' for out):I
13 Data copied into SQL Server image column from file 'c:\abc.gif'.
㈤ 在sql2005中如何直接插入圖片
如果你要把圖片存到資料庫里,那麼資料庫的類型就必須是
blob,
然後在程序中把圖片讀成流的形式放在byte[]中,最後才能insert
into.
就相當於復制圖片的過程.
如果你是在資料庫端操作,那麼必須用到專門上傳圖片到資料庫的工具.
以前學oracle時好像有這種工具.SQL太久沒碰了,不知道有沒有這種工具
㈥ 請問怎樣使用SQL2000往資料庫的一個列中加入jpg圖片能講得詳細些么新手求幫助!
1建立image欄位
2用程序讀取圖片文件,超過4k就循環處理
3存放在blob類型變數中
4用sql語句insert其他信息,然後再由updateblob專門上傳圖像欄位
updateblob aa set a2 = :b1 where a1= '1 ';
㈦ 給sql語句進行傳值的不同方法(傳值 :傳值)各寫一個java案列.
刪除不好做,因為你是一個文件內容的刪除。
可以用字元串數組來保存每一行的值,刪除了之後,再重新保存進去。
可以這樣做:比如說你的文件路徑:c:/a.txt
1.File file = new File("c:/a.txt");
2.BufferedReader reader = new BufferedReader(file);
3.byte[] strValue = new byte[(int)file.length()];
4.String str = reader.read(strValue);//按文件大小一次讀入
5.String rows = str.split("\r\n");//按換行符拆分,即數組的每一條,對應文件每一行的內容。
6.如果要刪除按條件刪除某一行,只需要判斷字元串數組是否存在這一行了,如果存在,替換為「」即可。
7.Writer writer = new FileWriter(file);
8.
for(int i=0;i<rows.length;i++){
writer.write(rows[i]);
}
只是分析了一下,具體步驟還是你來完成了。。
RandomAccessFile raf = new RandomAccess("wenjian.txt");
char ch[] = new char[3];
char to[] = ;
boolean get = false;
while(get){
raf.readChars(ch);
if(ch[0]=='d' && ch[1]=='d' && ch[2]=='s'){
get = true;
}
}
raf.seek(raf.getFilePointer() -6 );
raf.writeChars(to);
這個代碼就是把wenjian.txt中出現的第一個dds修改成ssx。
另外,站長團上有產品團購,便宜有保證
㈧ 怎樣把單個復選框里的圖片傳到SQL資料庫里
你別把圖片傳到伺服器去,只要傳圖片文件名或者代表該圖片的數字就可以了,
在你的資料庫里,每個圖像都有個icon的id來代表該圖片。 客戶端一上來,你就把該id,或者該文件名傳給客戶端,在客戶端那邊己經存了該圖片文件了。這樣客戶端收到圖片名稱或者id就能查找出具體圖片就可以顯示出來了。 上傳時也只要傳名字或id就可以了。
按你說的要是有上萬個用戶同時在線,每個用戶都不停傳圖片,那你的伺服器早就被拖死了,一張圖片的數據量比一個數字或一串字元文件名大多了。
你看QQ聊天的時候,一下傳那麼多QQ頭像,全國上億人用QQ頭像QQ表情聊天,那騰訊得買多少伺服器才跑得動啊
服務端早就預存了幾十種或幾百種表情頭像,客戶端也同時存了,雙方約定好了每一個圖像的文件名或者id值。客戶端第一次注冊的時候,或者更改的時候,只需要傳雙方約定好的id過去,伺服器端就知道了你要干什麼事了。