『壹』 QS後綴名是什麼文件
食品質量安全市場准入標志即食品生產許可證標志,由「質量安全」英文(Quality Safety)縮寫「QS「表示。
中國QS查詢網
www.qszt.net
從這可以查到具體的信息~~O(∩_∩)O~
『貳』 求C#與三菱Q系列PLC 通訊實例或源碼
『叄』 C++源代碼錯誤
排序\查找\輸出
你這代碼好亂哦!
能不能注釋一下?
void qs_struct(items,left,right);
void quick_struct(items,count);
int BinarySeach(items,name,n);
void print_data(point);
聲明的時候不必要實參,
直接如: void qs_struct(int,int,int);
int n; 這個N是變數還是函數? 依大括弧看這里N應該是函數啊
{
int low,high,mid;
low=0;
high=n-1; 這里又變成了變數
while(low<=high)
{
mid=(low+high)/2;
if((strcmp(items[mid].name,name)==0))
return mid;
else if((strcmp(items[mid].name,name)<0))
low=mid+1;
else high=mid-1;
}
return -1;
}
『肆』 怎樣最簡的製作送給女朋友的網頁像這樣http://www.qqhot.com/look/1/love_qs/love.htm 最好給個網址
<table border="1" bordercolor="#000000" bgcolor="#6699ff" cellpadding="5" cellspacing="0">
<tr>
<td>
<script language=javascript>
document.write ("<marquee scrollamount='1' scrolldelay='30' direction= 'UP' width='200' id='helpor_net' height='150' onmouseover='helpor_net.stop()' onmouseout='helpor_net.start()' Author:redriver; For more,visit:www.helpor.net>")
document.write ("<h2><p align='center'><font color='#ffffff' face='黑體'>偶 然</font></h2>")
document.write ("<p align='right'><a href='#' target='_blank'><font color='#ffffff'>徐志摩</font></a> ")
document.write ("<p><font color='#ffffff'> ")
document.write ("<br>我是天空里的一片雲,")
document.write ("<br>偶爾投影在你的波心—— ")
document.write ("<br>你不必訝異, ")
document.write ("<br>更無須歡喜—— ")
document.write ("<br>在轉瞬間消滅了蹤影。")
document.write ("<br>")
document.write ("<br>你我相逢在黑暗的海上,")
document.write ("<br>你有你的,我有我的,方向;")
document.write ("<br>你記得也好, ")
document.write ("<br>最好你忘掉, ")
document.write ("<br>在這交會時互放的光亮! ")
document.write ("</font>")
document.write ("</marquee> ")
</script>
</td>
</tr>
</table>
將以上代碼用文本文檔復制過去,保存後將後綴名改為html,然後用瀏覽器查看一下.類似的效果,再到網上去搜索網頁特效就有了.
『伍』 求知,qs插件懸浮物關了,怎麼刷東西
插件只能運行在本地或者自己伺服器上面..不能運行在其它玩家那裡,插件這東西功能很多,比如說技能,增加hp啊自動回血啊,直升機,f18戰斗機,武器備用子彈,武器傷害 射速 換彈速度還有很多很多不再此一一列舉了
腳本這東西最常見的就是連跳腳本,按住某按鍵會自動跳躍加速之類的還有連射腳本,部分伺服器會禁止腳本。
註:腳本通常是cfg格式的用控制台開啟,插件是smx格式的,由sp格式源碼通過控制項平台編譯而來的。
『陸』 給出一組實驗來比較快速排序與冒泡演算法的時間性能 急求代碼模版~ 謝謝~~~
/*快速排序*/
#include<iostream>
using namespace std;
int a[10001];
void qs(int s,int e)
{
int x=a[s],l=s,r=e;//以第一個數為參照做比較
if(l>=r)
return;
while(l<r)
{
while(l<r&&a[r]>=x)
r--; //不小於分界值的留在右邊,遇到小於的停止
a[l]=a[r];
while(l<r&&a[l]<=x)
l++; //小於分界值的留在左邊,遇到不小於的停止
a[r]=a[l];
}
a[r]=x;
qs(s,r-1);
qs(r+1,e);//遞歸
}
int main()
{
int i,n;
cin>>n;
//輸入要排序的數組元素個數即 數組長度
for(i=0;i<n;i++)
cin>>a[i]; //輸入數組元素
qs(0,n-1); //執行排序函數
for(i=0;i<n;i++)//輸出排序後結果
cout<<a[i];
system("pause");
}
/*冒泡排序*/
#include <stdio.h>
#include <stdlib.h>
void bubble_sort(int array[], int size)
{
int temp, i, j;
for (i = 0; i < size; i++)
for (j = 0; j < size; j++)
if (array[i] < array[j])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
void main(void)
{
int values[30], i;
for (i = 0; i < 30; i++)
{
if (i % 5 == 0)
printf("\n");
values[i] = rand() % 100;
printf("%2d ",values[i]);
}
printf("\n\n");
bubble_sort(values, 30);
for (i = 0; i < 30; i++)
{
if (i % 5 == 0)
printf("\n");
printf("%2d ", values[i]);
}
getchar();
}
『柒』 qsa00000是什麼文件
媒體。
QSA 主文件類型的普及性為「媒體」,這意味著有時可以在常用的桌面或移動設備上找到這些文件。
文件後綴存在的意義:
1、方便區分文件類型,更加快速識別文件表示的含義;
2、規範文件結構,讓文件組成結構統一化、解析方式規范化;
3、可以把後綴作為索引,讓存儲系統檢索文件速度更快;
有了文件後綴我們可以很方便地對常用的文件進行分類:
1、辦公文件後綴:.doc、.docx、.xls、.xlsx、.csv、.ppt、.pptx、.pdf;
2、視頻格式:.mp4、.avi、.mov、.mpeg、3gp、.wmv、.flv、.mkv;
3、音頻格式:.mp3、.wav、.ape、.flac、.aac、.m4a;
4、壓縮文件格式:.7z、.rar、.taz、.zip、.iso;
5、應用程序軟體:.exe、.app、.apk、.dmg、.ipa、.deb;6、源碼文件格式:.cs、.java、.c、.cpp、.css、.js、.html、.jsp、.sql、.xml;
7、圖片格式:.git、.png、.jpg、.jpeg、.tiff、.svg。
『捌』 求一個c++小程序源代碼,要求200行以上,給100分,能用再加100
//=================================[說明]=======================================*/
//學生成績管理
//文件名:main.cpp
//------!!!!!!---------BOF-[程序代碼開始]-------------------
#include<iostream>
#include<string>
using namespace std;
//=============<開始定義結構體>===================================================
struct combox
{
int num;
int mark;
string name;
combox *next;
};
//=============<結束定義結構體>===================================================
//=============<開始定義Commonbox類>==============================================
//-----類體開始------------------------
class Commonbox
{
private:
combox *head;
void Swap(combox *,combox *); //交換兩個combox變數的數據域
void Print(combox *); //輸出一combox指定的記錄
combox *Find(int); //查找條例條件的記錄,並返回該記錄的指針
public:
Commonbox()
{
head=NULL;
}
int ListCount(); //統計當前鏈表的記錄總數,返回一個整數
void AddItem(int num, string name, int mark); //添加一條記錄到表尾
void RemoveItem(int); //刪除一條指定的記錄
void List(); //列出當前鏈表中的所有記錄
void Sort(); //對當前鏈表進行排序
void Search(int); //在當前鏈表查找指定記錄並輸出
float Average(); //計算平均成績
};
//-----類體結束------------------------
//-----類成員函數開始----------------------------------
int Commonbox::ListCount() //統計當前鏈表的記錄總數,返回一個整數
{
if (! head)return 0;
combox *p=head;
int n=0;
while (p)
{
n++;
p=p->next;
}
return n;
}
void Commonbox::AddItem(int num, string name, int mark) //添加一條記錄到表尾
{
if (! head)
{
head=new combox;
head->mark=mark;
head->num=num;
head->name=name;
head->next=NULL;
return;
}
combox *t=head;
while (t && t->num!=num)
t=t->next;
if (t)
{
cout<<"操作失敗:學號為"<<num<<"的記錄已經存在!"<<endl;
return;
}
combox *p=head;
while (p->next)p=p->next;
combox *p1=new combox;
p1->num=num;
p1->mark=mark;
p1->name=name;
p1->next=NULL;
p->next=p1;
return;
}
void Commonbox::RemoveItem(int num) //刪除一條指定的記錄
{
combox *t=Find(num);
if (! t)return;
combox *p=head;
//如果要刪除的記錄位於表頭
if (head==t)
{
head=head->next;
delete p;
cout <<"成功刪除學號為 "<<num<<" 的記錄!"<<endl<<endl;
return;
}
while (p->next!=t)p=p->next;
combox *p1=p->next;
p->next=p1->next;
delete p1;
cout <<"成功刪除學號為 "<<num<<" 的記錄!"<<endl<<endl;
return;
}
void Commonbox::Print(combox *p) //輸出一combox指定的記錄
{
cout<<p->num<<"\t\t";
cout<<p->name<<"\t\t";
cout<<p->mark<<endl;
return;
}
void Commonbox::List() //列出當前鏈表中的所有記錄
{
if (ListCount()==0)
{
cout <<"錯誤:當前的列表為空!"<<endl;
return;
}
combox *p=head;
cout<<"共有記錄:"<<ListCount()<<endl;
cout<<"學號\t\t姓名\t\t分數"<<endl;
while (p)
{
Print(p);
p=p->next;
}
cout <<endl;
return;
}
void Commonbox::Search(int num) //在當前鏈表查找指定記錄並輸出
{
cout <<"Searching...."<<endl;
combox *p=Find(num);
if (p)
{
cout<<"學號\t\t姓名\t\t分數"<<endl;
Print(p);
}
cout <<endl;
}
combox *Commonbox::Find(int num)
{
if (ListCount()==0)
{
cout <<"錯誤:當前的列表為空!"<<endl;
return NULL;
}
combox *p=head;
while (p)
{
if (p->num==num)break;
p=p->next;
}
if (! p)
{
cout <<"錯誤:找不到該記錄!\n";
return NULL;
}
return p;
}
void Commonbox::Swap(combox *p1, combox *p2) //交換兩個combox變數的數據域
{
combox *temp=new combox;
temp->num=p1->num;
temp->mark=p1->mark;
temp->name=p1->name;
p1->num=p2->num;
p1->mark=p2->mark;
p1->name=p2->name;
p2->num=temp->num;
p2->mark=temp->mark;
p2->name=temp->name;
}
void Commonbox::Sort() //對當前鏈表進行排序
{
cout <<"Sorting..."<<endl;
if (ListCount()<2) return;
combox *temp=NULL,*p=NULL,*p1=NULL,*p2=NULL,*k=NULL;
int n=ListCount(),i,j;
p=head;
for (i=1;i<n;i++)
{
k=p;
p1=p->next;
for (j=0;j<n-i;j++)
{
if (k->num > p1->num)
{
k=p1;
}
p1=p1->next;
}
if (p!=k)Swap(k,p);
p=p->next;
}
cout <<"Complete successfully!"<<endl<<endl;
return;
}
float Commonbox::Average() //計算平均成績
{
if (ListCount()==0)
{
cout <<"錯誤:當前的列表為空!"<<endl;
return -1;
}
int sum=0,n=0;
combox *p=head;
while (p)
{
sum += p->mark;
p=p->next;
n++;
}
return float(sum)/n;
}
//-----類成員函數結束----------------------------------
//=============<結束定義Commonbox類>==============================================
Commonbox student; //定義全局變數
int Menu()
{
cout <<"===========[主選單:]==========="<<endl;
int n=1,select=-1;
cout <<n++<<".輸入學生成績;"<<endl<<endl;
cout <<n++<<".按學號排序;"<<endl<<endl;
cout <<n++<<".按學號查找記錄;"<<endl<<endl;
cout <<n++<<".刪除由學號指定的記錄;"<<endl<<endl;
cout <<n++<<".列出所有記錄;"<<endl<<endl;
cout <<n++<<".計算平均成績;"<<endl<<endl;
cout <<"0.退出;"<<endl<<endl;
cout <<"[請選擇(輸入相應數字)]:";
cin >>select;
return select;
}
char Exit() //返回一個字元患,用於確認退出
{
char s;
cout<<"確定要退出程序嗎?[Y/N]:";
cin >>s;
return s;
}
void Input(int *num, string *name, int *mark) //輸入學生信息
{
cout <<"請輸入 學號 姓名 分數:";
cin >>*num;
if (*num==-1)return;
cin >>*name>>*mark;
return;
}
void AddNew() //增加記錄
{
int num=0,mark=0;
string name="";
cout<<endl<<"當輸入的學號為-1時表示結束輸入."<<endl;
Input(&num, &name, &mark);
while (num!=-1)
{
student.AddItem(num,name,mark);
Input(&num, &name, &mark);
}
return;
}
void DoFind() //按學號查找
{
int num;
cout<<endl<<"當輸入的學號為-1時表示結束輸入."<<endl;
do
{
cout <<"請輸入要查找的學生的學號: ";
cin>>num;
if (num==-1)continue;
student.Search(num);
}
while (num!=-1);
return;
}
void DoDelete() //刪除記錄
{
cout<<endl<<"當輸入的學號為-1時表示結束輸入."<<endl;
int num;
do
{
cout <<"請輸入要刪除的學生的學號:";
cin>>num;
if (num==-1)continue;
student.RemoveItem(num);
}
while (num!=-1);
return;
}
void ShowAverage() //輸出平均數
{
float avr=student.Average();
if (avr>0)
{
cout<<"共有記錄:\t"<<student.ListCount()<<endl<<endl;
cout<<"平均成績:\t"<<avr<<endl<<endl;
}
return;
}
//-------******<主函數開始>******-------
int main()
{
cout<<"Welcome!\n學生成績管理系統\nVer 1.01\nBy FondBoy\n\n";
int select;
char s;
while (1)
{
select=Menu();
switch (select)
{
case 0: //退出程序
s=Exit();
if (s=='y' || s=='Y')return 0;
break;
case 1: //輸入學生成績
AddNew();
break;
case 2: //按學號排序
student.Sort();
break;
case 3: //按學號查找記錄
DoFind();
break;
case 4: //刪除由學號指定的記錄
DoDelete();
break;
case 5: //列出所有記錄
student.List();
break;
case 6: //輸出平均成績
ShowAverage();
break;
default:
cout<<"無效輸入!"<<endl;
}
}
return 0;
}
//-------******<主函數結束>******-------
//------!!!!!!---------EOF-[程序代碼結束]-------------------
『玖』 c++中的qt調用
先貼上源代碼:
#include<QProcess>
void test6::notepad()
{
QProcess *pro = new QProcess;
pro->startDetached("C://Program Files (x86)//Notepad++//notepad++.exe", QStringList());
}
說明:
1 使用Qprocess的startDetached()方法,當前程序關閉時,調用的外部程序能夠照常運行。
2 第一個參數是外部exe路徑,當exe路徑中含有空格時,就需要用到第二個參數,如果外部應用程序只需要exe這一個就可以打開時,第二個參數寫成QStringList()就可以了。
3 當外部應用程序出了exe還需要其他的文件才能打開時那麼將其他文件路徑寫進QStringList()中。
給出源代碼:調用notepad++打開路勁為QString qs的txt文檔
void test6::notepad(QString qs)
{
QProcess *pro = new QProcess;
pro->startDetached("C://Program Files (x86)//Notepad++//notepad++.exe",QStringList(qs));
}
再給出一個我調用IrFanView查看圖片的源代碼:
void test6::IrffanView()
{
QProcess *pro = new QProcess;
if (!vqs_str.empty())
{
vqs_it = vqs_str.begin() + selecteditem;
pro->startDetached("D:\\IrfanView\\i_view32.exe", QStringList(*vqs_it));
}
else
{
pro->startDetached("D:\\IrfanView\\i_view32.exe", QStringList());
}
}
『拾』 Asp.net 時間到了。系統自動做出相關操作。
這是一個經常被提出的問題,並且它很容易把人們帶入爭論Linux還是Windows的歧途。這樣的爭論事實上反映出了對於相互競爭的Web開發技術要進行並行分析是多麼困難的一件事情,而這一難度同時因為開發人員對任何可比較操作系統的不同意見而大大增加。
所以與其繼續參與到這樣的爭論中,我們還不如來看看每一項技術對於特定Web開發以及運行環境所表現出的優勢。盡管ASP和PHP的相似程度大於其中任意一種與ASP.NET的相似程度,我們還是要討論ASP.NET。原因是開發人員常常將其與ASP相混淆,並且在微軟的努力下ASP.NET的確會在將來完全取代ASP。
基本理論——特點概述
PHP——超文本預處理器(Hypertext Pre-processor)
PHP是開放源代碼伺服器端的腳本語言,在語法上同C語言非常類似。盡管最初是被設計用於基於Linux的Apache Web 伺服器系統,現在的PHP已經被移植到了任何操作系統並兼容任何標准Web伺服器軟體。由此也可以得出PHP的三大主要優勢。首先它是跨平台的技術,因此PHP應用程序可以被方便的移植——當然這還要取決於諸如廠商特定資料庫等需要集成的額外組件。這樣的可移植性還帶來了另一方面的優勢,即絕大部分的Web主機提供商都會支持PHP,因此根據需要更改主機將會非常方便。
第二點,由於PHP同C編程語言有很多相似之處,對於熟悉相關語法的開發人員來說,PHP則非常容易上手——這種語法同樣在Java、JavaScript以及Perl中得到應用。第三,由於是開放源代碼產品,PHP將繼續快速發展,更為重要的是相關漏洞補丁將免費的定期植入到核心庫中。
此外,在一些特定的編程需求下,PHP對於開發人員顯示出了更為誘人的吸引力。首先,PHP有內建庫支持對於圖片及PDF文檔的直接創建和相關操作。這意味著當一個應用程序調用包含有anti-aliased類型文本的動態創建菜單圖像,或者是需要導出Acrobat格式頁面時,PHP都將是解決此類問題的理想技術。盡管這些功能在理論上也可以通過其他與PHP相競爭的技術獲得,但往往其他技術需要安裝第三方自定義組件才能實現。
另一點使得PHP成為編寫伺服器腳本最佳選擇的是在處理連接mySOL或者Postgres資料庫一類的問題時PHP的良好表現。盡管對於mySOL或者Postgres資料庫的訪問可以通過ASP技術藉助ODBC連接來實現,但這常常需要系統管理員進行額外的配置。幸運的是,這點限制在ASP.NET中得到了改正,當需要建立類似於使用MS SQL Server的直接資料庫連接時可以通過mySQL提供數據。
ASP——動態服務頁面(Active Server Pages)
微軟將ASP引入Windows NT Server 4並將其作為IIS Web伺服器下的動態Web應用程序的默認使用平台。由於它使用VBScript(Visual Basic語言的一個分支),ASP立即被熟悉Microsoft IDE——Visual Studio編程的開發人員所追捧。隨著腳本語言的不斷發展,研究人員對ASP並沒有引入太多功能使之加入到技術競爭的行列。因此,在PHP中可以看到的諸如圖像操作等功能沒有集成到ASP中。但開發人員仍然可以通過DLL文件的形式編寫(或者安裝)第三方COM對象來完成類似的工作。在伺服器自身允許的情況下,通過這種方式可以編寫代碼來完成任何動作。當然,造成的缺陷是這將導致為了配置這些服務開發人員不得不與桌面系統進行交互——對於Web開發人員來說這項功能並不是必須的。
ASP的優勢是在企業環境中微軟伺服器幾乎無處不在。此外,MS SQL Server同樣具有廣泛的市場,並且能很好的支持ASP(這並不會讓人感到驚奇)。盡管事實上通過ODBC可以兼容任何數據來源,但SQL Server以及文件DSN訪問(file DSN access)可以在代碼一級得到實現。
ASP.NET
是選擇ASP還是PHP的爭論正在隨著.NET的崛起而越來越顯得多餘。的確,過去長達數年的爭論將隨著是選擇Java還是.NET技術(或是兩者)答案的揭曉而終結。ASP以及ASP.NET的唯一聯系是二者都使用VBScript。而單獨就.NET而言,它可以使用VBScript以及其他大約20種語言。
對於ASP以及PHP來說,將ASP.NET看作是另外一種語言的原因是它運行在完全不同的構架之上。前者是翻譯腳本語言,而.NET則是經過編譯的framework。這就意味著首先Web頁面的運行速度將會有極大提高。同時,源代碼更加安全且更為健壯。此外,ASP.NET給Web編程帶來了新的理念——即「code-behind頁面」的思想。按照code-behind思想,每一個HTML頁面都是由自身經過編譯的程序化指令進行驅動。因此,HTML——或稱之為表現層——很大程度上脫離了應用程序的商業邏輯。盡管這樣的分離也可以通過PHP和ASP來實現,但這並非同ASP.NET一樣屬於自身技術的主要部分。
ASP.NET的另一好處是它完整的集成了對XML以及Web服務的各種支持。對.NET而言可以使用非常廣泛的安全以及密碼系統庫,這對於金融機構和企業數據應用程序尤為有用。就缺陷而言,即使是具備豐富經驗的開發人員也會發現使用.NET可能把自己搞糊塗。不考慮開發者對於所使用的編程語言的熟悉程度,對於Web開發人員來說,在程序範例方面難度的大幅提升可能會成為他們融入ASP.NET的主要障礙。對ASP.NET應用程序來說主機同樣是個問題,ASP.NET並未同ASP或者PHP一樣獲得了主機提供商的廣泛支持,無法在同一級別上展開競爭。
實踐——語言比較
變數聲明
在VBScript中(ASP和ASP.NET都使用VBScript),在使用變數之前並不一定要對其進行聲明,盡管技術文檔通常建議這么做。使用Option Explicit聲明,開發人員可以通過程序強制進行變數聲明。在PHP中,變數可以被聲明,盡管沒有辦法強制開發人員做到這點。的確,在使用之前變數都自動進行聲明。PHP變數的優點在於變數可以被設置成為其他變數的引用(references),而在VBScript中變數只能通過值來定義。
<%
' VBScript Example
Option Explicit
myVar = 1
myOtherVar = myVar
myVar = 2
' myResult will be 3
myResult = myVar + myOtherVar
%>
<?
// PHP Example
$myVar = 1;
'Use the ampersand to make a reference
$myOtherVar = &$myVar;
$myVar = 2;
// $myResult will be 4
$myResult = $myVar + $myOtherVar;
?>
變數收集
在PHP以及ASP中使用表單以及query string變數的方法非常相似。有很多辦法可以訪問表單以及query string變數的集合,例如通過name或者將其作為數組。在ASP.NET中情況則有很多不同,尤其是對於表單域。不同於盲目的尋找提交過的表單變數,code-behind可以對HTML頁面中的每一個表單域了如指掌,並可以按照任何已知事件的執行為條件觸發對這些表單域的值進行檢查。其中一個事件是「postback」,當表單被用戶提交時此事件被觸發。其他的事件可以是客戶端的程序,並且可以通過JavaScript來觸發。在ASP.NET中,二者沒有性質上的區別。
<%
' ASP Example
myFormVal = request.form("myInputField")
myQSval = request.querystring("myQSitem")
myVal = request.item("myFormOrQSitem")
%>
<?
// PHP 4.1+ Example
$myFormVal = $_POST['myInputField'];
$myQSval = $_REQUEST['myQSitem'];
// PHP 3+ Example
$myFormVal = $HTTP_POST_VARS['myInputField'];
// If register_globals = on
$myVal = $myFormOrQSitem;
?>
<!-- ASP.NET example -->
<html>
<script language="VB" runat=server>
Sub SubmitBtn_Click(Sender As Object, E As EventArgs)
Message.Text = "Hello " & Name.Text
End Sub
</script>
<body>
<form action="action.aspx" method="post" runat="server">
Name: <asp:textbox id="Name" runat="server"/>
<asp:button text="OK" OnClick="SubmitBtn_Click"
runat="server"/>
<asp:label id="Message" runat="server"/>
</form>
</body>
</html>
字元串連接(String Concatenation)
PHP似乎對此問題給予了足夠的重視,它允許將變數插入到字元串中而無需考慮通常的串連(Concatenation)問題。ASP.NET則把整個過程弄得比較麻煩,需要藉助其StringBuilder類,但由此ASP.NET的運行速度也會快很多。
<?
// PHP Example
$link = mysql_connect("host", "user", "password")or die("mysql_error());
mysql_select_db("database") or die("Could not select database");
$query = "SELECT * FROM Table";
$result = mysql_query($query) or die(mysql_error());
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
foreach ($line as $col_value) {
//do something
}
}
?>
連接資料庫
對於資料庫的連接問題,每種技術都表現出了各自突出的規范性。首先,每種情況都要建立到資料庫的連接。對於PHP,在建立之後選擇資料庫(對於ASP以及ASP.NET則將在連接階段完成)。隨後將建立一個詢問,並將其傳送給資料庫,由此可能產生也可能不會產生一條返回記錄。
由於在本質上ASP.NET更為以對象為導向,並且支持復雜的錯誤處理(error handling),因此無論是相對於PHP還是ASP,在完成簡單任務方面ASP.NET可能會需要編寫更多的代碼。但在優勢方面,ASP.NET完成顯示數據功能所需要的代碼則大大少於PHP以及ASP——尤其如果使用內建的datagrid控制來自動創建HTML輸出。
<%
'ASP Example
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Driver=;Server=MyServerName;" & _
"Database=myDatabaseName;Uid=;Pwd="
const strSQL = "SELECT * FROM Table" Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.OpenstrSQL, objConn
Do While Not objRS.EOF
'do something
objRS.MoveNext
Loop
%>
' ASP.NET Example
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<script language="VB" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
Dim MyConn As SqlConnection = New SqlConnection("server=(local). . . ")
Dim MyComm As SqlCommand = New SqlCommand("select * from Table", MyConn)
MyConn.Open()
Dim dr As SqlDataReader = MyComm.ExecuteReader()
MyDataGrid.DataSource = dr
MyDataGrid.DataBind()
MyConn.Close()
End Sub
</script>
<body>
<ASP:DataGrid id="MyDataGrid" runat="server"
Width="600"
BackColor="#FFFFFF"
BorderColor="#000000"
ShowFooter="false"
CellPadding=2
CellSpacing="0"
Font-Name="Verdana"
Font-Size="8pt"
HeaderStyle-BackColor="#EEEEEE"
EnableViewState="false"
/>
</body>
</html>
結論
選擇ASP、PHP還是ASP.NET將最終取決於應用程序的需要,以及運行程序的系統環境。開發人員對於相似編程語言或範例的熟悉程度同樣可以作為選擇的因素。記住沒有完美的方法和個人實際情況可以表明哪種技術是最佳選擇。比如,使用ASP.NET為一個Windows伺服器創建一個單頁面的表單郵件應用程序似乎有些大材小用,但對於ASP來說這是極佳的應用環境。如果一個站點需要同Linux Apache伺服器上的mySQL資料庫連接,那麼使用ASP或者ASP.NET則會顯得力不從心。如果能夠提前詳細考慮用戶的個人要求,那麼開發人員在這些相互競爭的技術中進行選擇的過程則已成功了一半。