第五篇ASP.NET完全入門WebService_第1頁
第五篇ASP.NET完全入門WebService_第2頁
第五篇ASP.NET完全入門WebService_第3頁
第五篇ASP.NET完全入門WebService_第4頁
第五篇ASP.NET完全入門WebService_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第五章 web service 第一章 web service簡介現(xiàn)在 internet 正在不斷地發(fā)展著,在互聯(lián)網(wǎng)應(yīng)用剛開始的時候,我們?yōu)g覽的網(wǎng)頁只是靜態(tài)的,不可交互的。 而現(xiàn)在隨著技術(shù)的日益發(fā)展,將提供給網(wǎng)頁瀏覽者一個可編程的web 站點。這些站點將在組織、應(yīng)用、服務(wù)、驅(qū)動上更加緊密的結(jié)合在一起,這些站點將通過一些應(yīng)用軟件直接連接到另一個web 站點,這些可編程的web 站點相比傳統(tǒng)的web 站點來說,將變得更加能重復(fù)使用,也更加智能化!.net 平臺給我們提供了一種運行環(huán)境,即公用語言運行環(huán)境(clr, common language runtime) 。對 clr 來說,它提供了一種內(nèi)

2、置機制來創(chuàng)建一個可編程的站點,、對于 web 程序開發(fā)者和vb 程序員來說,這將是一致、熟悉的。這種模型是可以重復(fù)使用,也可以再擴展。它包含了開放的internet 標(biāo)準( http, xml, soap, sdl ) 。以便它能被網(wǎng)頁瀏覽者訪問。asp.net 使用 .asmx 文件來對web services 的支持。 .asmx 文件和 .aspx 文件一樣都屬于文本文件。它包含在.aspx 文件之中,成為asp.net 應(yīng)用程序的一部分。下面我們將舉一個簡單的例子來介紹.asmx 文件,我們還是從“hello,world”這個經(jīng)典的例子說起,代碼如下: imports system.w

3、eb.services public class helloworld :inherits webservice public function sayhelloworld( ) as string return(hello world) end function end class 說明:1編碼最開始必須進行webservice 聲明,從而定義這個文件為一個web service。 而且,在同一行中設(shè)置好編程語言的類型。2然后,引入名字空間system.web.services。注意,這個名字空間屬于最基本的元素,必須要包含它。3接著,聲明service 中的功能模塊,也就是類模塊,這里的類

4、名叫helloworld 。這個類來源于基類webservice,而且應(yīng)該是public 類型。4最后,定義service 的可訪問方法。在表示方法的符號前面,要設(shè)置好自定義屬性。對應(yīng)于 c#語言,屬性值就是webmethod ;對應(yīng)于vb,就是。如果沒有設(shè)置這個屬性,那么這個方法就不能從service 中訪問。一個局部應(yīng)用可以使用任何的public 類型的類,但是只有具備 webmethod 的類才可以通過soap 被遠程地訪問。當(dāng)對 service 的請求發(fā)生時,.asmx 文件將自動地被asp.net 運行環(huán)境所編譯。隨后的請求就可以由緩沖的預(yù)編譯類型對象執(zhí)行。為了測試編寫好的代碼,我們

5、需用一個支持asp.net 的 web 服務(wù)器。假設(shè)這個web服務(wù)器的名稱叫做server1,其上有一個虛擬目錄test。請跟隨下面步驟開始測試:1將代碼保存為helloworld.asmx 2放到 web 服務(wù)器 foo 的虛擬目錄bar 下3打開 internet explorer5 ,在地址欄輸入http:/server1/test/helloworld.asmx 這時,我們將看到關(guān)于這個web service 的公用方法也就是那些標(biāo)記為webmethod屬性的字符,并得知調(diào)用這些方法可以使用的協(xié)議,比如soap 或者 http get 。在 internet explorer 的地址欄

6、中輸入http:/foo/bar/helloworld.asmx?sdl后,將產(chǎn)生基于服務(wù)描述語言(service description language :sdl)語法的具備相同信息的xml 文件。這個 sdl 文件非常重要,客戶端就是使用它來訪問service。我們來看一下程序運行的效果:從客戶端進行訪問:除了允許開發(fā)者使用的創(chuàng)建web services 的技術(shù)以外, microsoft 的.net 框架給客戶端提供了一套訪問并使用web services 的精致且高深的工具和代碼。由于 web services是基于如簡單對象訪問協(xié)議soap(simple object access

7、protocol )和 http 這樣的開放協(xié)議標(biāo)準的,從而,我們就可以使用這種客戶端技術(shù)使用非asp.net 的 web services。當(dāng)然,這也需用高水平地合成asp.net web services 和這種客戶端技術(shù)。sdk 中有一個工具叫做webserviceutil.exe ,我們可以使用它來下載一個web services的 sdl 描述語言,并創(chuàng)建表達這個service 的代理類。比如,當(dāng)我們輸入以下命令,就可以創(chuàng)建一個叫做helloworld.cs 的代理類:webserviceutil /c:proxy /pa:http:/somed 這個類看起來與前面創(chuàng)建的類非常相似。

8、它包含一個方法sayhelloworld ,該方法返回一個字符串。 將這個代理類編譯到一個應(yīng)用程序中,然后調(diào)用這個代理類的方法,結(jié)果就是:通過 http,這個代理類包裝soap 請求,然后接收soap 編碼響應(yīng),最后匯集成為一個字符串。從客戶端來看, 代碼是很簡單的, 返回的結(jié)果也很簡單,就是一個字符串hello world 。同樣為了對照方便,我們列出了使用vb 、c#以及 jscript 三種語言編寫的代碼:c# helloworld myhelloworld = new helloworld(); string sreturn = myhelloworld.sayhelloworld()

9、; vb dim myhelloworld as new helloworld() dim sreturn as string = myhelloworld.sayhelloworld() jscriptvar myhelloworld:helloworld = new helloworld(); var sreturn:string = myhelloworld.sayhelloworld(); 通過上面的例程,你可能對web services 有了初步的印象。下面,我們將介紹web services中涉及到的各種數(shù)據(jù)類型,也就是 web services方法的輸入 /輸出參數(shù)類型。 因為

10、web services的執(zhí)行是建立在xml 架構(gòu)之上的, 所以它能夠支持豐富的數(shù)據(jù)類型。下表列出了使用soap協(xié)議時 web services 支持的數(shù)據(jù)類型:類型描述基礎(chǔ)類型也即標(biāo)準基礎(chǔ)類型,包括:string、int32 、byte、boolean、int16 、int64、single、double、decimal 、 datetime( 類 似xml中 的timeinstant)、datetime(類似 xml 中的 date)、datetime( 類 似xml中 的time) 以 及xmlqualifiedname( 類似 xml 中的 qname)。枚舉類型枚舉類型。 例如:.

11、public enum color red=1, blue=2 基礎(chǔ),枚舉數(shù)組上面提到的類型數(shù)組。例如:string 和 int 類和結(jié)構(gòu)帶有公用域或?qū)傩缘念惡徒Y(jié)構(gòu),公用域和屬性是串行結(jié)構(gòu)的類和結(jié)構(gòu)體數(shù)組上述類型的數(shù)組dataset ado.net dataset 類型。 datasets能在類和結(jié)構(gòu)體作為字段來使用。dataset數(shù)組上述類型的數(shù)組xmlnode xmlnode 是 xml文檔片斷的內(nèi)存表示,就好像一個輕量級的xml 文檔對象模型。 比如說, 就可以存儲在一個xmlnode 類型變量中。我們可以將xmlnodes 作為參數(shù)傳遞,以soap兼 容 方 式 附 加 到 傳 遞 給

12、web services 的 xml 文檔上。返回值也是同樣原理。 xmlnode 也可看成是類或結(jié)構(gòu)中的字段。xmlnode 數(shù)組上述類型的數(shù)組當(dāng)通過 soap 或者 http get/post 調(diào)用 web services 時,返回值可以是上述提到的任何一種數(shù)據(jù)類型。參數(shù)的數(shù)據(jù)類型使用 soap 協(xié)議時, 通過值 以及 通過引用 這兩種輸入 /輸出參數(shù)形式都可被支持。如果是 通過引用 的參數(shù)類型, 就會產(chǎn)生兩種方式的數(shù)據(jù)發(fā)送效果:到服務(wù)器的以及返回到客戶端的。但是,當(dāng)通過http get/post 傳遞輸入?yún)?shù)給web services時,就只支持有限的數(shù)據(jù)類型了,而且還必須是通過值 形

13、式的參數(shù)。這些類型如下:類型描述基礎(chǔ)類型(有限的 ) 支持大多數(shù)標(biāo)準基礎(chǔ)類型,包括:int32、string、int16、int64、boolean、 single、double、decimal 、datetime、timespan、uint16、uint32 、uint64 和currency。從客戶端來看,所有這些類型都轉(zhuǎn)變?yōu)閟tring。枚舉類型比如:public enum color red=1, blue=2 。基礎(chǔ)類型數(shù)組,枚舉類型數(shù)組上述類型的數(shù)組,比如string 和 int 現(xiàn)在我們將舉一個例子,來說明上面我們介紹的數(shù)據(jù)類型:這個例子利用webserviceutil.exe

14、建立的 soap 代理來使用上面列出的數(shù)據(jù)類型。注意:因為在 .asmx文件中定義了多于一個的公用類,所以,我們必須要指定哪一個作為webservice類,這可以通過設(shè)置webservice 標(biāo)識的 class 屬性來實現(xiàn),代碼如下: 源文件 webservicedatatype.asmx的內(nèi)容如下: imports system imports system.web.services public enum mode eon = 1 eoff = 2 end enum public class order public orderid as integer public price as d

15、ouble end class public class datatypes sayhello 方法顯示從service 中返回的一個字符串信息。public function sayhello() as string return hello world! end function sayhelloname 方法返回一個字符串,并接受一個字符串參數(shù)。public function sayhelloname(name as string) as string return hello & name end function getintarray 方法顯示了如何返回一個整數(shù)數(shù)組。pub

16、lic function getintarray() as integer() dim i as integer dim a(5) as integer for i = 0 to 4 a(i) = i*10 next return a end function getmode 方法返回一個枚舉數(shù)值。public function getmode() as mode return mode.eoff end function getorder 方法返回一個類。public function getorder() as order dim myorder as new order myorder.

17、price=34.5 myorder.orderid = 323232 return myorder end function getorders 方法返回定單對象數(shù)組。public function getorders() as order() dim myorder(2) as order myorder(0) = new order() myorder(0).price=34.5 myorder(0).orderid = 323232 myorder(1) = new order() myorder(1).price=99.4 myorder(1).orderid = 645645 re

18、turn myorder end function end class 程序運行的效果如下:當(dāng)我們單擊invoke 的時候,將顯示:對于使用客戶端應(yīng)用程序而言,使用webserviceutil 代理生成工具配置這些數(shù)據(jù)類型是透明的。請看關(guān)于web service 的一個客戶端例程:客戶端訪問的文件:clint.aspx,內(nèi)容如下: div font: 8pt verdana; background-color:cccccc; border-color:black; border-width:1; border-style:solid; padding:10,10,10,10; public s

19、ub page_load(sender as object, e as eventargs) dim d as datatypes = new datatypes() message1.innerhtml = d.sayhello() message1.innerhtml = message1.innerhtml & d.sayhelloname(bob) message3.innerhtml = message3.innerhtml & d.getmode() dim myintarray as integer() = d.getintarray() dim mystring

20、 as string = contents of the array: for i = 0 to myintarray.length - 1 mystring = mystring & myintarray(i) & next message2.innerhtml = message2.innerhtml & mystring dim myorder as order = d.getorder() message4.innerhtml = message4.innerhtml & orderid: & myorder.orderid message4.i

21、nnerhtml = message4.innerhtml & price: & myorder.price dim myorders as order() = d.getorders() message5.innerhtml = message5.innerhtml & orderid: & myorders(0).orderid message5.innerhtml = message5.innerhtml & price: & myorders(0).price end sub using datatypes with web servic

22、es methods that return a primitive (string): methods that return an array of primitives (integers): method that returns an enum: method that returns a class/struct: method that returns an array of classes/structs: 在客戶端程序中,我們使用來引入datatypesservice 這個我們自定義的名字空間。然后在程序中只是調(diào)用了datatypesservice中的方法?,F(xiàn)在我們來看如何生

23、成名字空間:1 datatype.vb 中的內(nèi)容:imports system.xml.serialization imports system.web.services.protocols imports system.web.services namespace datatypesservice public class datatype inherits system.web.services.protocols.soapclientprotocol public sub new() mybase.new me.url=http:/localhost/quickstart/aspplus

24、/samples/services/datatypes/vb/datatypes.asmx end sub public function sayhello() as string dim results() as object = me.invoke(sayhello, new object(0) ) return ctype(results(0),string) end function public function beginsayhello(byval callback as system.asynccallback, byval asyncstate as object) as s

25、ystem.iasyncresult return me.begininvoke(sayhello, new object(0) , callback, asyncstate) end function public function endsayhello(byval asyncresult as system.iasyncresult) as string dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),string) end function public function sayhe

26、lloname(byval name as string) as string dim results() as object = me.invoke(sayhelloname, new object() name) return ctype(results(0),string) end function public function beginsayhelloname(byval name as string, byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult

27、 return me.begininvoke(sayhelloname, new object() name, callback, asyncstate) end function public function endsayhelloname(byval asyncresult as system.iasyncresult) as string dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),string) end function public function getintarray(

28、) as integer() dim results() as object = me.invoke(getintarray, new object(0) ) return ctype(results(0),integer() end function public function begingetintarray(byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(getintarray, new object(0)

29、, callback, asyncstate) end function public function endgetintarray(byval asyncresult as system.iasyncresult) as integer() dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),integer() end function public function getmode() as mode dim results() as object = me.invoke(getmode,

30、 new object(0) ) return ctype(results(0),mode) end function public function begingetmode(byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(getmode, new object(0) , callback, asyncstate) end function public function endgetmode(byval async

31、result as system.iasyncresult) as mode dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),mode) end function public function getorder() as order dim results() as object = me.invoke(getorder, new object(0) ) return ctype(results(0),order) end function public function beginget

32、order(byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(getorder, new object(0) , callback, asyncstate) end function public function endgetorder(byval asyncresult as system.iasyncresult) as order dim results() as object = me.endinvoke(as

33、yncresult) return ctype(results(0),order) end function public function getorders() as order() dim results() as object = me.invoke(getorders, new object(0) ) return ctype(results(0),order() end function public function begingetorders(byval callback as system.asynccallback, byval asyncstate as object)

34、 as system.iasyncresult return me.begininvoke(getorders, new object(0) , callback, asyncstate) end function public function endgetorders(byval asyncresult as system.iasyncresult) as order() dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),order() end function end class pub

35、lic enum mode eon eoff end enum public class order public orderid as integer public price as double end class end namespace 在這個 vb 文件中,我們定義了一個名字空間datatypesservice。請看 vb 文件的其中一段代碼段:public function sayhello() as string dim results() as object = me.invoke(sayhello, new object(0) ) return ctype(results(

36、0),string) end function public function beginsayhello(byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(sayhello, new object(0) , callback, asyncstate) end function public function endsayhello(byval asyncresult as system.iasyncresult) as

37、 string dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),string) end function 上面的代碼,是觸發(fā)invoke 的單擊事件。然后,調(diào)用我們在datatype.asmx 中定義的方法。要生成上面的名字空間,我們使用webserviceutil.exe 來編譯。webserviceutil -c:proxy /pa:datatypes.sdl /l:vb /n:datatypesservice 5.1.1 小結(jié)web service 提供了在不同體系機構(gòu)下構(gòu)建的網(wǎng)站之間

38、相互提供應(yīng)用接口服務(wù)、數(shù)據(jù)的一種方案。 它采用通用的soap、http 以及 xml ,就可以把原本互不相干的站點服務(wù)形成一整套分布的、 自動化和智能化的網(wǎng)絡(luò)應(yīng)用,大大減輕了程序員的開發(fā)工作量,充分地利用了已經(jīng)擁有的網(wǎng)絡(luò)資源和開發(fā)資源。在中, web service 文件后綴名采用.asmx,開始應(yīng)使用 申明,接著引用system.web.services 命名空間,然后定義一個公用類繼承自webservice 基類,最后實現(xiàn)自己的類,其中向網(wǎng)絡(luò)開放的功能,應(yīng)在其方法前面加上 webmethod 屬性。第二章 一個簡單的 web service案例在這個例子中,我們將定義一個mathservi

39、ce 類,來對兩個數(shù)字分別進行加,減,乘,除。當(dāng)然這個類需要從基類web service 中繼承。請先看該程序的源代碼:源文件: webservicemath.asmx imports system imports system.web.services public class mathservice : inherits webservice public function add(a as integer, b as integer) as integer return a + b end function public function subtract(a as integer, b

40、 as integer) as integer return a - b end function public function multiply(a as integer, b as integer) as integer return a * b end function public function divide(a as integer, b as integer) as integer if b = 0 return -1 end if return cint(a / b) end function end class 對于該程序, 我們首先要用來標(biāo)識。然后定義對應(yīng)的方法。程序很

41、簡單,我們來看一下運行效果,假使我們使用“加”。如圖:我們要計算5+1 的值:通過上面的計算,結(jié)果就顯示出來了。一個代理類(proxy class)被創(chuàng)建出來的,我們就可以很容易的創(chuàng)建對象。當(dāng)然,類中的方法就能夠被對象調(diào)用。創(chuàng)建代理類, 我們可以使用webserviceutil.exe 來創(chuàng)建一個代理類。我們還是舉“加” , “減” , “乘”, “除”的例子。我們先創(chuàng)建一個文件用于客戶端的用戶瀏覽: dim op1 as integer = 0 dim op2 as integer = 0 public sub submit_click(sender as object, e as even

42、targs) try op1 = int32.parse(operand1.text) op2 = int32.parse(operand2.text) catch exp as exception ignored end try dim service as mathservice = new mathservice() select (ctype(sender,control).id) case add : result.text = result = & service.add(op1, op2).tostring() case subtract : result.text =

43、result = & service.subtract(op1, op2).tostring() case multiply : result.text = result = & service.multiply(op1, op2).tostring() case divide : result.text = result = & service.divide(op1, op2).tostring() end select end sub using a simple math service operand 1: operand 2: 我們還需要一個sdl 文件,當(dāng)然

44、這個文件不用手工輸入,我們在瀏覽一個.asmx 的時候,在后綴名后直接加上?sdl 可以自動生成sdl 文件。然后我們在一個.vb 文件里,將定義一個名字空間,.vb 文件的內(nèi)容:imports system.xml.serialization imports system.web.services.protocols imports system.web.services namespace mathservicespace public class mathservice inherits system.web.services.protocols.soapclientprotocol p

45、ublic sub new() mybase.new me.url = http:/localhost/quickstart/aspplus/samples/services/mathservice/vb/mathservice.a& _ smx end sub public function add(byval a as integer, byval b as integer) as integer dim results() as object = me.invoke(add, new object() a, b) return ctype(results(0),integer)

46、end function public function beginadd(byval a as integer, byval b as integer, byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(add, new object() a, b, callback, asyncstate) end function public function endadd(byval asyncresult as system

47、.iasyncresult) as integer dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),integer) end function public function subtract(byval a as integer, byval b as integer) as integer dim results() as object = me.invoke(subtract, new object() a, b) return ctype(results(0),integer) en

48、d function public function beginsubtract(byval a as integer, byval b as integer, byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(subtract, new object() a, b, callback, asyncstate) end function public function endsubtract(byval asyncres

49、ult as system.iasyncresult) as integer dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),integer) end function public function multiply(byval a as integer, byval b as integer) as integer dim results() as object = me.invoke(multiply, new object() a, b) return ctype(results(0

50、),integer) end function public function beginmultiply(byval a as integer, byval b as integer, byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(multiply, new object() a, b, callback, asyncstate) end function public function endmultiply(b

51、yval asyncresult as system.iasyncresult) as integer dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),integer) end function public function divide(byval a as integer, byval b as integer) as integer dim results() as object = me.invoke(divide, new object() a, b) return ctype(

52、results(0),integer) end function public function begindivide(byval a as integer, byval b as integer, byval callback as system.asynccallback, byval asyncstate as object) as system.iasyncresult return me.begininvoke(divide, new object() a, b, callback, asyncstate) end function public function enddivid

53、e(byval asyncresult as system.iasyncresult) as integer dim results() as object = me.endinvoke(asyncresult) return ctype(results(0),integer) end function end class end namespace 有了這四個文件,我們可以編輯一個批處理文件,執(zhí)行如下的語句:webserviceutil -c:proxy /pa:mathservice.sdl /l:vb /n:mathservicespace 這樣,我們就可以在客戶端執(zhí)行了。5.2.1 小

54、結(jié)在這一章中,我們以提供計算加、減、乘、除的網(wǎng)絡(luò)應(yīng)用為例,詳細的介紹了如何建立起一個完整的web service 服務(wù)的步驟和注意事項,雖然這個例子和實際使用的應(yīng)用環(huán)境有較大的差異,但基本方法應(yīng)該是一致的。第三章數(shù)據(jù)交換我們的這個例子說明了dataset-一個基于xml 技術(shù)的強大的數(shù)據(jù)分離技術(shù),能夠用web service 方法返回。 dataset 能夠在一個智能化的結(jié)構(gòu)中存儲復(fù)雜的信息和關(guān)系,這是web service 的一個非常有用的方法。通過 datasets 的顯示,你能夠限制通過連接你的數(shù)據(jù)庫服務(wù)器的測試。gettitleauthors方法連接一個數(shù)據(jù)庫并且運行兩個sql 語句,

55、第一個返回顏色的列表,另外一個返回字體大小的列表。方法把兩個結(jié)果用一個dataset來存儲,并返回一個dataset 。puttitleauthors說明一個 web service 方法把 dataset 當(dāng)作一個參數(shù)并返回一個整數(shù),這個整數(shù)就是在dataset 中的“ table“表的行數(shù)。雖然這個方法執(zhí)行起來有點簡單,但是這個方法也能夠與數(shù)據(jù)庫服務(wù)器把過剩的數(shù)據(jù)聰明的合并在一起。我們來看看這個例子,首先: 這句話應(yīng)該包括。我們還要引入這個名字空間:imports system.web.services 第一我們兩個方法,getcolor() :public function getcol

56、or() as dataset dim myconnection as sqlconnection = new sqlconnection(server=localhost;uid=sa;pwd=;database=howff) dim mycommand1 as sqldatasetcommand = new sqldatasetcommand(select * from color, myconnection) dim mycommand2 as sqldatasetcommand = new sqldatasetcommand(select * from size, myconnecti

57、on) 數(shù)據(jù)的填充dim ds as new dataset mycommand1.filldataset(ds, color) mycommand2.filldataset(ds, size) return ds end function putcolor() 方法:public function putcolor(ds as dataset) as integer 返回行數(shù)return ds.tables(0).rows.count end function 文件保存為webservice.asmx ,放在虛擬目錄下,具體代碼如下:源文件: webservicewebservice.asm

58、x imports system imports system.data imports system.data.sql 引入 system.web.services名字空間imports system.web.services public class dataservice public function getcolor() as dataset 創(chuàng)建數(shù)據(jù)庫連接和命令集dim myconnection as sqlconnection = new sqlconnection(server=localhost;uid=sa;pwd=;database=howff) dim mycommand1 as sqldatasetcommand = new sqldatasetcommand(select * from color, myconnection) dim mycommand2 as sqldatasetcommand = new sqld

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論