عند كتابة برامج ASP، يتم استخدام VBScript بشكل عام، ولكن هذا ليس هو الخيار الوحيد الذي يمكن استخدامه أيضًا. ولكن عند استخدام JScript كلغة ASP، هناك بعض المضايقات البسيطة مقارنة باستخدام VBScript، مثل أسلوب GetRows في RecordSet.
عند تشغيل قاعدة بيانات في ASP، يتم استخدام كائن RecordSet بشكل عام. إذا ركزت على كفاءة البرنامج، فيمكنك استخدام طريقة GetRows لكائن RecordSet لتحويل كائن مجموعة السجلات إلى مصفوفة يعد استخدام كائن RecordSet أسرع بكثير، ويمكنه تحرير كائن RecordSet في أسرع وقت ممكن بعد إخراج الصفيف، وبالتالي تقليل استخدام الموارد، وهذه أيضًا طريقة لتحسين أداء ASP.
في VBScript، ما يتم الحصول عليه باستخدام الأسلوب RecordSet.GetRows هو صفيف ثنائي الأبعاد، ويمكن الحصول على البيانات الموجودة بداخله عن طريق اجتياز الصفيف.
لنفترض أن هناك قاعدة بيانات تحتوي على جدول اسمه mytable وثلاثة حقول تسمى id، الأول، والثاني.
انسخ رمز الكود كما يلي:
'codebyxujiwei
"http://www.xujiwei.cn/
'تعريف المتغيرات
Dimconn، rs، data، recN، i
'الاتصال بقاعدة البيانات
Setconn=Server.CreateObject(ADODB.Connection)
conn.OpenProvider=Microsoft.Jet.OLEDB.4.0;DataSource=&_
Server.MapPath(data.mdb)
"احصل على مجموعة السجلات."
Setrs=conn.Execute(SELECTid,first, SecondFROMmytable)
"احصل على مجموعة البيانات."
البيانات=rs.GetRows()
'أغلق مجموعة السجلات وحرر الكائن
رس.إغلاق ()
سيترز = لا شيء
'احصل على عدد السجلات
ريكن=UBound(بيانات,2)
"بيانات إخراج الحلقة."
فوري=0TorecN
'لاحظ أن اشتراكات المصفوفة تبدأ من 0
'عرض البيانات في قاعدة البيانات
الاستجابة.الكتابة(المعرف:&data(0,i)&,أولاً:&data(1,i)&_
,ثانيًا:&data(2,i)&<br/>)
التالي
"أغلق اتصال قاعدة البيانات وحرر الكائن."
كون.إغلاق()
سيتكون=لا شيء
%>
ولكن عند استخدام JScript، ستكون هناك مشكلة، وهي أن JScript لا يحتوي على مصفوفة ثنائية الأبعاد. إذا كنت تريد استخدام البيانات التي تم الحصول عليها بواسطة GetRows، فيجب عليك تحويل المصفوفة ثنائية الأبعاد في VBScript إلى مصفوفة JScript. يمكن التعرف على العناصر، أي أنها عبارة عن مصفوفة ذات بعد واحد من المصفوفات.
في JScript، يحتوي المصفوفة التي تم الحصول عليها باستخدام طريقة GetRows على طريقة toArray، والتي يمكن تحويلها إلى مصفوفة يمكن استخدامها في JScript. ومع ذلك، فإن هذه المصفوفة أحادية البعد، مما يعني أننا إذا أردنا استخدامها كما هو الحال في VBScript ، ما زلنا بحاجة إلى القيام بذلك بأنفسنا لإجراء التحويل.
بعد استشارة MSDN والبحث في المقالات ذات الصلة على الإنترنت، كتبت دالة تحويل مصفوفة لاستخدام طريقة GetRows في JScript.
انسخ رمز الكود كما يلي:
<scriptlanguage=JScriptrunat=server>
//codebyxujiwei
//http://www.xujiwei.cn/
// تحديد المتغيرات
varconn,rs,vdata,data,recN,i;
// الاتصال بقاعدة البيانات
conn=Server.CreateObject(ADODB.Connection);
conn.Open(Provider=Microsoft.Jet.OLEDB.4.0;DataSource=+
Server.MapPath(data.mdb));
// احصل على مجموعة السجلات
rs=conn.Execute(SELECTid,first, SecondFROMtest);
// احصل على مصفوفة البيانات وقم بتحويلها إلى نوع مصفوفة متوفر في JScript
vdata=rs.GetRows().toArray();
// احصل على عدد الحقول في جدول البيانات
i=rs.Fields.Count;
// أغلق مجموعة السجلات وحرر الكائن
rs.Close();
rs=null;
// تحويل المصفوفة
data=transArray(vdata,i);
// احصل على عدد السجلات
recN=data. length;
// حلقة بيانات الإخراج
ل(i=0;i<recN;i++){
// لاحظ أن اشتراكات المصفوفة تبدأ من 0
// عرض البيانات في قاعدة البيانات
Response.Write(ID:+data[i][0]+,First:+data[i][1]+
,Second:+data[i][2]+<br/>);
}
// أغلق اتصال قاعدة البيانات وحرر الكائن
conn.Close();
conn=null;
// وظيفة تحويل المصفوفة
//byxujiwei
// المعلمات: arr- الكائن الذي تم الحصول عليه بواسطة طريقة GetRows والمصفوفة التي تم الحصول عليها بواسطة طريقة toArray
//fieldslen-عدد الحقول في جدول البيانات
functiontransArray(arr,fieldslen){
varlen=arr.length/fieldslen,data=[],sp;
ل(فاري=0;أنا<لين;i++){
data[i]=newArray();
sp=i*fieldslen;
ل(varj=0;j<fieldslen;j++)
data[i][j]=arr[sp+j];
}
returndata;
}
</script>
بالنسبة لبعض البيانات التي لا يتم تحديثها بشكل متكرر ولكن يتم استخدامها بشكل متكرر، يمكنك استخدام كائن التطبيق لتخزينها مؤقتًا بعد الحصول على مصفوفة البيانات بنجاح، وبالتالي تقليل عدد الاستعلامات إلى قاعدة البيانات وتحسين أداء ASP إلى حد معين.