国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

解析ASP.NET中C 和J#的混合應用_.Net教程

2024-07-10 12:51:01
字體:
來源:轉載
供稿:網(wǎng)友

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

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

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

相同的功能,我用三種語言來實現(xiàn),首先,給出.NET的“標準語言”——C#版本作為基本參照。

以下是C#版本:

main_cs.dll文件源碼:

以下為引用的內容:
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類庫,命名net_dll,項目中引用System.Data、System.Web、System.XML,生成net_dll.dll文件,以下是主文件全部源碼(其它那些頭文件、資源文件什么亂七八糟的統(tǒng)統(tǒng)不用理會,當它們不存在):

以下為引用的內容:
#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)建類庫,命名main_jsl,項目中引用System.Data、System.Web、System.XML,源碼如下:

以下為引用的內容:
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文件放置在站點根目錄的Bin文件夾下面即可。

以上三個文件的功能完全是一樣的。

通過以上三種代碼的觀察,我們可以發(fā)現(xiàn),C#的代碼相當簡潔(其實能夠寫得最簡潔的是Jscript.Net,下篇文章再說),J#其次,C 就比較難看了。

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

使用這兩種語言創(chuàng)建ASP.NET,對于習慣了C 和JAVA的朋友來說,可能會比較有用。

我相信每種語言都有它的長處,大家互相取長補短,構造一個良好的整體,曾經(jīng)看到過不少C#的初學者,似乎都對VB.NET有偏見,以“從來不用VB”為榮耀,還有一些朋友,對C .Net和J#的了解比較少,便誤會為這兩種語言沒有用途,實際上這些認識都是片面的。

我舉個例子:

以下為引用的內容:
/* 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();

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

在.NET的世界里,沒有哪個語言最好、哪個語言最爛的說法,五個語言各自有長處短處,大家生成的都是IL中間代碼,也就是說,它們天生就可以互相融合,這才是.NET的精髓之所在。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 丹江口市| 信宜市| 曲阜市| 浮山县| 遂宁市| 鄢陵县| 茌平县| 罗城| 墨玉县| 惠来县| 比如县| 汶上县| 获嘉县| 阿瓦提县| 保靖县| 阳山县| 千阳县| 家居| 台湾省| 肥城市| 博白县| 潮州市| 通化市| 广灵县| 藁城市| 奉新县| 融水| 新余市| 库尔勒市| 蓝田县| 综艺| 苏尼特左旗| 通渭县| 沧州市| 东源县| 泸州市| 莱芜市| 兴义市| 寿光市| 崇礼县| 西昌市|