日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

解析ASP.NET中C 和J#的混合應(yīng)用_.Net教程

編輯Tag賺U幣
教程Tag:暫無(wú)Tag,歡迎添加,賺取U幣!

推薦:解析.NET中的動(dòng)態(tài)編譯技術(shù)
代碼的動(dòng)態(tài)編譯并執(zhí)行是一個(gè).NET平臺(tái)提供給我們的很強(qiáng)大的工具用以靈活擴(kuò)展(當(dāng)然是面對(duì)內(nèi)部開(kāi)發(fā)人員)復(fù)雜而無(wú)法估算的邏輯,并通過(guò)一些額外的代碼來(lái)擴(kuò)展我們已有 的應(yīng)用程序。這在很大程度上給我們提供了另外一種擴(kuò)展的方式(當(dāng)然這并不能算是嚴(yán)格意義上的

不想搞得太復(fù)雜,我僅僅演示實(shí)現(xiàn) DataReader和DataSet,起個(gè)拋磚引玉的作用,也顧不得代碼結(jié)構(gòu)是否優(yōu)美、性能是否良好,能夠達(dá)到本文的目的即可。

為了方便大家親自動(dòng)手實(shí)踐,數(shù)據(jù)庫(kù)使用的是ACCESS,文章末尾有下載鏈接。實(shí)際項(xiàng)目中要使用SqlServer和ORACLE的話,把幾個(gè)OleDb函數(shù)換個(gè)名字即可,怎么換就不用我多說(shuō)了。

相同的功能,我用三種語(yǔ)言來(lái)實(shí)現(xiàn),首先,給出.NET的“標(biāo)準(zhǔn)語(yǔ)言”——C#版本作為基本參照。

以下是C#版本:

main_cs.dll文件源碼:

以下為引用的內(nèi)容:
using System;
using System.Data;
using System.Data.OleDb;
using System.Text;
public class main_cs:System.Web.UI.Page
{
OleDbDataReader dr;
OleDbCommand cmd;
DataSet ds;
OleDbDataAdapter adp;
OleDbConnection conn;
StringBuilder connStr;
public void Page_Load()
{
connStr = new StringBuilder("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
connStr.Append(Server.MapPath("image.mdb"));
conn = new OleDbConnection(connStr.ToString());
cmd = new OleDbCommand("SELECT title FROM image_data",conn);
conn.Open();
dr = cmd.ExecuteReader();
while(dr.Read())
{
Response.Write(dr["title"]);
}
dr.Close();
conn.Close();
ds = new DataSet();
adp = new OleDbDataAdapter("SELECT title FROM image_data",conn);
adp.Fill(ds);
Response.Write(ds.Tables[0].Rows[0]["title"]);
}
}

以下是C 版本:

在VisualStudio2003中創(chuàng)建C .Net類庫(kù),命名net_dll,項(xiàng)目中引用System.Data、System.Web、System.XML,生成net_dll.dll文件,以下是主文件全部源碼(其它那些頭文件、資源文件什么亂七八糟的統(tǒng)統(tǒng)不用理會(huì),當(dāng)它們不存在):

以下為引用的內(nèi)容:
#include "stdafx.h"
#include "net_dll.h"
#using
#using
#using
#using
using namespace System;;
using namespace System::Xml;
using namespace System::Web;
using namespace System::Text;
using namespace System::Data;
using namespace System::Data::OleDb;
public __gc class main : public System::Web::UI::Page
{
private:
OleDbDataReader __gc* dr;
OleDbCommand __gc* cmd;
DataSet __gc* ds;
OleDbDataAdapter __gc* adp;
OleDbConnection __gc* conn;
StringBuilder __gc* connStr;
public:
void Page_Load()
{
connStr = new StringBuilder("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
connStr->Append(HttpContext::Current->Server->MapPath("image.mdb"));
conn = new OleDbConnection(connStr->ToString());
cmd = new OleDbCommand("SELECT title FROM image_data",conn);
conn->Open();
dr = cmd->ExecuteReader();
while(dr->Read())
{
Response->Write(dr->get_Item("title"));
}
dr->Close();
conn->Close();
ds = new DataSet();
adp = new OleDbDataAdapter("SELECT title FROM image_data",conn);
adp->Fill(ds);
Response->Write(ds->Tables->get_Item(0)->Rows->get_Item(0)->get_Item("title"));
}
};

以下是J#版本:

道理同C ,使用J#創(chuàng)建類庫(kù),命名main_jsl,項(xiàng)目中引用System.Data、System.Web、System.XML,源碼如下:

以下為引用的內(nèi)容:
import System.Data.*;
import System.Data.OleDb.*;
import System.Web.*;
import System.Text.*;
public class main_jsl extends System.Web.UI.Page
{
OleDbDataReader dr;
OleDbCommand cmd;
DataSet ds;
OleDbDataAdapter adp;
OleDbConnection conn;
StringBuilder connStr;
public void Page_Load()
{
connStr = new StringBuilder("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=");
connStr.Append(get_Server().MapPath("image.mdb"));
conn = new OleDbConnection(connStr.ToString());
cmd = new OleDbCommand("SELECT title FROM image_data",conn);
conn.Open();
dr = cmd.ExecuteReader();
while(dr.Read())
{
get_Response().Write(dr.get_Item("title"));
}
dr.Close();
conn.Close();
ds = new DataSet();
adp = new OleDbDataAdapter("SELECT title FROM image_data",conn);
adp.Fill(ds);
get_Response().Write(ds.get_Tables().get_Item(0).get_Rows().get_Item(0).get_Item("title"));
}
}

完畢,DLL文件放置在站點(diǎn)根目錄的Bin文件夾下面即可。

以上三個(gè)文件的功能完全是一樣的。

通過(guò)以上三種代碼的觀察,我們可以發(fā)現(xiàn),C#的代碼相當(dāng)簡(jiǎn)潔(其實(shí)能夠?qū)懙米詈?jiǎn)潔的是Jscript.Net,下篇文章再說(shuō)),J#其次,C 就比較難看了。

在DataTable和DataReader的操作上,可以看到J#和C 大量使用了get_Item()函數(shù),我估計(jì)J#和C 都是經(jīng)過(guò)Object變換的,可能會(huì)對(duì)性能造成少許的影響。

使用這兩種語(yǔ)言創(chuàng)建ASP.NET,對(duì)于習(xí)慣了C 和JAVA的朋友來(lái)說(shuō),可能會(huì)比較有用。

我相信每種語(yǔ)言都有它的長(zhǎng)處,大家互相取長(zhǎng)補(bǔ)短,構(gòu)造一個(gè)良好的整體,曾經(jīng)看到過(guò)不少C#的初學(xué)者,似乎都對(duì)VB.NET有偏見(jiàn),以“從來(lái)不用VB”為榮耀,還有一些朋友,對(duì)C .Net和J#的了解比較少,便誤會(huì)為這兩種語(yǔ)言沒(méi)有用途,實(shí)際上這些認(rèn)識(shí)都是片面的。

我舉個(gè)例子:

以下為引用的內(nèi)容:
/* Jscript | Jscript.Net */
var conn = Server.CreateObject("ADODB.Connection");
conn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" Server.MapPath("image.mdb"));
var rs = conn.Execute("SELECT * FROM image_data");
while(!rs.EOF)
{
Response.Write(rs("title").value);
rs.MoveNext();
}
rs.Close();
conn.Close();

不用認(rèn)為這只是ASP,這同樣也是地地道道的ASP.NET。雖然在我們.NET開(kāi)發(fā)者的眼中,RecordSet的名聲可能沒(méi)有DataReader要好,但是這不在本文的討論范圍,這里只說(shuō):倘若硬是要用C#實(shí)現(xiàn)以上相同功能的話,結(jié)果只能是 執(zhí)行慢、代碼長(zhǎng)、結(jié)構(gòu)復(fù)雜。

在.NET的世界里,沒(méi)有哪個(gè)語(yǔ)言最好、哪個(gè)語(yǔ)言最爛的說(shuō)法,五個(gè)語(yǔ)言各自有長(zhǎng)處短處,大家生成的都是IL中間代碼,也就是說(shuō),它們天生就可以互相融合,這才是.NET的精髓之所在。

分享:注意.NET中容易混淆的幾組重要概念
許多朋友在學(xué)習(xí)和開(kāi)發(fā).NET程序的過(guò)程中經(jīng)常發(fā)現(xiàn)一些誤用.NET概念的情況。本文將對(duì)AJAX、LINQ、Lambda等相關(guān)的概念進(jìn)行梳理,希望在明確這些概念之后,大家能夠把注意力集中在對(duì)于具體問(wèn)題的分析解決上,而不要讓溝通成為瓶頸。 在這篇文章中,希望澄清三組概

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2009-06-25
相關(guān).Net教程