צעדים ראשונים בעבודה עם מסדי נתונים בעזרת ASP.NET

‏ • 11 באוקטובר, 2003



הגישה למסדי נתונים השתנתנה רבות מ-ASP קלאסית. יש לנו את ADO.NET, שהיא משפחה חדשה של אובייקטים המאפשרים עבודה עם מסדי נתונים. אובייקטים אלו אינם אובייקטים COM (חסל סדר CreateObject), אלא אובייקטים המובנים בתוך הפריימוורק.

במאמר הבא, ההסברים והדוגמאות מתייחסים לאקסס.
הדוגמאות ייכתבו ב-#C.

לפני תחילת העבודה, עלינו לייבא את ה-Namespace-ים שעוסקים בגישה למסדי נתונים. לשם כך עלינו לרשום את זה בראש הדף:




1
2  

<%@Import Namespace=System.Data%>
<%@Import Namespace=System.Data.OleDb%>


שתי השורות האלו בעצם אומרות – אני עומד לבצע גישה למסדי נתונים, תוך שימוש באובייקטים של ADO.NET.

כדי להתחבר למסד הנתונים, אנחנו משתמשים (ופה הדימיון ל-ADO) באובייקט חיבור, הלא הוא ה-Connection.
כמו ב-ADO הקלאסי, אנחנו משתמשים במחרוזת חיבור (Connection String) כדי לציין לאיזה מסד נתונים אנחנו רוצים להתחבר.

נשים את הקוד הבא ב-Page_Load (נניח ש-myDB.mdb הוא מסד הנתונים שברצוננו לגשת אליו):




1
2
3
4
5
6
7
8  

void Page_Load(object Sender, EventArgs e){
    string const conStr = "Microsoft.Jet.OLEDB.4.0; Data Source="+Server.Mappath("myDb.mdb");
    OleDbConnection conn = new OleDbConnection(conStr);
    Conn.Open(); //Open a connection

    Conn.Close(); //Dont forget to close it!
}


בתחילה הגדרנו מחרוזת חיבור קבועה (const). מחרוזת החיבור בADO.NET זהה לחלוטין לזו של ADO.

כמו שניתן לראות, הקונסטרקטור של אובייקט ה-OleDbConnection מקבל את מחרזות החיבור בתור פרמטר. ניתן להגדיר אותה מחוץ לקונסטרקטור עי המאפיין ConnectionString.

לאחר מכן, פתחנו את ה-Connection עי השיטה Open.

עכשיו מגיע הקטע ששונה מ-ASP קלאסית. מה שעכשיו היינו עושים בASP קלאסית זה לפתוח Recordset. בASP.NET, אפשר לומר, בגדול, שה-Recordset התפצל לשני אובייקטים – DataReader ו-Command. (על DataSet ו-DataAdapter אסביר במאמר אחר)

אובייקט הCommand הוא אובייקט שאחראי על כל האספקטים של ה-Recordset שנוגעים לשאילתות SQL (כולל העברת פרמטרים, וכו´), ואילו ה-DataReader הוא בעצם כמו רקורדסט לקריאה קדימה בלבד.

להלן דוגמאת קוד:




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21  

void Page_Load(object Sender, EventArgs e){
      string const conStr = "Microsoft.Jet.OLEDB.4.0; Data Source="+Server.Mappath("myDb.mdb");
      OleDbConnection conn = new OleDbConnection(conStr); // Declare a new connection object
      Conn.Open(); //Open a connection

     // Declare a new Command Object, using an SQL statement
     // as a parameter of the constructor.
      OleDbCommand cmd = new OleDbCommand("SELECT * FROM myTable");

      //Declare a new OleDbDataReader object.
      OleDbDataReader dr;

      //Fill the DataReader using the Command Object´s
     //ExecuteReader method
     dr = cmd.ExecuteReader();

     Conn.Close(); //Dont forget to close it!
}


כפי שניתן לראות מהדוגמה, התבצעו השלבים הבאים:

  • פתיחת אובייקט מסוג Connection, וקישור למסד נתונים.
  • הכרזה על אובייקט מסוג Command, תוך כדי ציון פקודת הSQL בה הוא ישתמש. ניתן לוותר על העברת הפרמטר הנל ל-Constructor, אולם יש לציין את פקודת ה-SQL דרך המאפיין CommandText.
  • הכרזה על אובייקט DataReader.
  • מילוי ה-DataReader עי המתודה ExecuteReader().

כעת כשברשותנו אובייקט DataReader פתוח ועובד, אפשר לקרוא ממנו את הנתונים. המקבילה של MoveNext באובייקט ה-DataReader היא Read(). מתודה זו מחזירה false במידה והגענו לשורה האחרונה של ה-DataReader. שאיבת הנתונים מן ה-DataReader תיעשה עי המתודות GetString, GetInt32, אשר מקבלות מספר (Zero-based) שמציין מאיזה שדה לשלוף את הנתונים. הבחירה באיזו מתודה להתשמש תיעשה לפי סוג הנתונים של אותו שדה. לרשימת המתודות המלאה, יש לעיין בדוקומנטציה של ה-SDK.




1
2
3
4
5
6
7
8  

//Assume declaration of DataReader, Command, etc.
dr = cmd.ExecuteReader();

while (dr.Read()){
     Response.Write(dr.GetInt32(0)); //Field 0 contains numeric values
     Response.Write(dr.GetString(1)); //Field 1 contains string values
}


כמו שניתן לראות, הסמן של ה-DataReader נמצא בהתחלה לפני השורה הראשונה, כך שיש צורך לקרוא ל-Read() לפני הקריאה מה-DataReader.
כמו כן, ניתן לקשר (Bind) את ה-DataReader ל-DataGrid.

זהו זה להפעם,

מקווה שנהנתם…

תגיות: , , ,

תגובות בפייסבוק