كيفية: استدعاء SQL Server الإجراءات المخزنة في ASP.NET باستخدام Visual C#.NET

للحصول على إصدار Microsoft Visual Basic.NET من هذه المقالة، راجع 306574 .

للحصول على إصدار Microsoft Visual J#.NET من هذه المقالة، راجع 320622 .

في هذه المهمة

ملخص

توضح هذه المقالة كيفية استخدام ADO.NET و ASP.NET في Visual C#.NET لإنشاء واستدعاء Microsoft SQL Server المخزنة إجراء مع معلمة إدخال ومعلمة إخراج.

نموذج التعليمات البرمجية في هذه المقالة أولاً بفحص ما إذا كان الإجراء المخزن التي ستقوم بإنشائها موجودة في قاعدة بيانات Pubs الذي تم تضمينه مع تثبيت Microsoft SQL Server قياسي. في حالة عدم وجود إجراء مخزن، التعليمات البرمجية بإنشاء إجراء مخزن الذي يأخذ معلمة واحدة للبحث في الجدول كتاب استناداً إلى اسم العائلة وتقوم بإرجاع صفوف مطابقة وعدد الصفوف التي تم إرجاعها في معلمة إخراج.

كما يوضح هذا المقال كيفية إنشاء "نموذج ويب" التي توفر واجهة مستخدم بسيطة. نموذج ويب يحتوي على العناصر التالية:

  • مربع نص الذي يقوم المستخدم بكتابة شرط البحث.
  • عنصر تحكم DataGrid التي تعرض نتائج البحث.
  • عنصر تحكم التسمية عرض عدد السجلات التي يتم إرجاعها.
  • عنصر تحكم زر تستدعي الإجراء المخزن عند النقر فوق الزر.

متطلبات

توضح القائمة التالية الأجهزة الموصى بها برامج البنية الأساسية للشبكة وحزم الخدمات المطلوبة:

  • Microsoft SQL Server الإصدار 7.0 أو أعلى
  • Microsoft Visual Studio.NET
  • Microsoft Visual C#.NET
  • أذونات لإنشاء إجراء مخزن في قاعدة البيانات
تفترض هذه المقالة أنك معتاد على المواضيع التالية:

  • ASP.NET
  • الإجراءات المخزنة SQL الخادم

إنشاء مشروع ASP.NET وإضافة عناصر التحكم

في هذا المقطع، إنشاء مشروع ASP.NET وبناء واجهة مستخدم أساسية. لاحظ أن التعليمات البرمجية ل Microsoft Visual C#.NET تستخدم هذه الخطوات. لإنشاء المشروع، اتبع الخطوات التالية:

  1. انقر فوق ابدأ، أشر إلى البرامج، أشر إلى Microsoft Visual Studio.NETوثم انقر فوق Microsoft Visual Studio.NET.
  2. في Visual Studio.NET بدء تشغيل الصفحة، انقر فوق مشروع جديد.
  3. في مربع الحوار مشروع جديد ، انقر فوق مشاريع Visual C# ضمن أنواع المشاريع، ومن ثم انقر فوق تطبيق ويب ASP.NET ضمن قوالب.
  4. في المربع الاسم ، اكتب اسماً لتطبيق الويب الخاص بك، ومن ثم انقر فوق موافق.
  5. إضافة عناصر تحكم الخادم التالية إلى "نموذج ويب" وتعيين الخصائص كما هي مذكورة في الجدول:
    عنصر التحكممعرف الخاصيةخاصية النص
    التسميةlblLastNameاكتب اسم الكاتب الأخير:
    مربع نصتكستلاستنامي%
    زرbtnGetAuthorsالحصول على الكتاب
    التسميةلبلرووكونت(عدد الصفوف)

  6. اسحب عنصر تحكم ملقم DataGrid من مربع الأدوات إلى "نموذج ويب"، ثم قم بتعيين خاصية الاسم إلى GrdAuthors.
  7. زر الماوس الأيمن فوق الشبكة، ومن ثم انقر فوق "تنسيق تلقائي".
  8. انقر فوق 1 من الفئة الفنية للنظام ومن ثم انقر فوق موافق.

جيتاوثورسبيلاستنامي إنشاء إجراء مخزن

استخدام التعليمات البرمجية SQL للعمليات التالية لإنشاء إجراء مخزن جيتاوثورسبيلاستنامي:

Use PubsGo
Create Procedure GetAuthorsByLastName (@au_lname varchar(40), @RowCount int output)
as

select * from authors where au_lname like @au_lname;

/* @@ROWCOUNT returns the number of rows that are affected by the last statement. */
select @RowCount=@@ROWCOUNT

تتضمن هذه التعليمات البرمجية معلمتين: @au_lname و @RowCount. أن المعلمة @au_lname هي معلمة إدخال يحصل على سلسلة البحث إلى إجراء بحث "مثل" في جدول Authors . أن المعلمة @RowCount هي معلمة إخراج يستخدم المتغير @@ROWCOUNT للحصول على الصفوف المتأثرة.

إنشاء وتشغيل الإجراء المخزن

للوصول إلى قواعد بيانات SQL Server، يجب عليك استيراد مساحة الاسم System.Data.SqlClient ، التي توفر كائنات جديدة مثل SqlDataReader والكائنات SqlDataAdapter . يمكنك استخدام SqlDataReader لقراءة دفق الصفوف فقط من قاعدة بيانات SQL Server. DataAdapter يمثل مجموعة من الأوامر بيانات واتصال قاعدة بيانات التي يمكنك استخدامها لتعبئة الكائن DataSet وتحديث قاعدة بيانات SQL Server.

كما يقدم ADO.NET الكائن DataSet هو تمثيل مقيم في الذاكرة من البيانات التي توفر نموذج برمجة ثابتاً، العلائقية بغض النظر عن مصدر البيانات. تستخدم التعليمة البرمجية في هذا القسم كل من هذه الكائنات.

  1. انقر نقراً مزدوجاً فوق نموذج ويب.
  2. أضف التعليمات البرمجية التالية (توجيهات using ) إلى المقطع تعريف نموذج ويب الذي يظهر في الجزء العلوي من إطار التعليمات البرمجية:
    using System.Data;using System.Data.SqlClient;

  3. للتأكد من وجود الإجراء المخزن وإنشاء إجراء مخزن جديد، استخدم كائن SqlCommand مع كائن SqlDataReader . يمكنك استخدام SqlCommand لتشغيل أوامر SQL أية قاعدة بيانات. قم باستدعاء أسلوب ExecuteReader SqlCommand العودة SqlDataReader، الذي يحتوي على صفوف مطابقة للاستعلام الخاص بك.

    أضف التعليمات البرمجية التالية في حدث Page_Load "نموذج ويب":
    private void Page_Load(object sender, System.EventArgs e){
    // Only run this code the first time the page is loaded.
    // The code inside the IF statement is skipped when you resubmit the page.
    if (!IsPostBack)
    {
    //Create a connection to the SQL Server; modify the connection string for your environment
    //SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes");
    SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");

    // Create a Command object, and then set the connection.
    // The following SQL statements check whether a GetAuthorsByLastName
    // stored procedure already exists.
    SqlCommand MyCommand = new SqlCommand("select * from sysobjects where id = object_id(N'GetAuthorsByLastName')" +
    " and OBJECTPROPERTY(id, N'IsProcedure') = 1", MyConnection);

    // Set the command type that you will run.
    MyCommand.CommandType = CommandType.Text;

    // Open the connection.
    MyCommand.Connection.Open();

    // Run the SQL statement, and then get the returned rows to the DataReader.
    SqlDataReader MyDataReader = MyCommand.ExecuteReader();

    // If any rows are returned, the stored procedure that you are trying
    // to create already exists. Therefore, try to create the stored procedure
    // only if it does not exist.
    if(!MyDataReader.Read())
    {
    MyCommand.CommandText = "create procedure GetAuthorsByLastName" +
    " (@au_lname varchar(40), select * from authors where" +
    " au_lname like @au_lname; select @RowCount=@@ROWCOUNT";
    MyDataReader.Close();
    MyCommand.ExecuteNonQuery();
    }
    else
    {
    MyDataReader.Close();
    }

    MyCommand.Dispose(); //Dispose of the Command object.
    MyConnection.Close(); //Close the connection.
    }

    // Add the event handler to the Button_Click event.
    this.btnGetAuthors.Click += new System.EventHandler(this.btnGetAuthors_Click);
    }

  4. استدعاء إجراء مخزن في الحدث انقر فوق الزر btnGetAuthors ومن ثم استخدام كائن SqlDataAdapter لتشغيل الإجراء المخزن الخاص بك. يجب إنشاء معلمات الإجراء المخزن وإلحاقها بمجموعة المعلمات للكائن SqlDataAdapter .

    أضف التعليمات البرمجية التالية بعد حدث Page_Load :
    private void btnGetAuthors_Click(object sender, System.EventArgs e){
    //Create a connection to the SQL Server; modify the connection string for your environment.
    //SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;Trusted_Connection=yes");
    SqlConnection MyConnection = new SqlConnection("server=(local);database=pubs;UID=myUser;PWD=myPassword;");

    //Create a DataAdapter, and then provide the name of the stored procedure.
    SqlDataAdapter MyDataAdapter = new SqlDataAdapter("GetAuthorsByLastName", MyConnection);

    //Set the command type as StoredProcedure.
    MyDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;

    //Create and add a parameter to Parameters collection for the stored procedure.
    MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@au_lname", SqlDbType.VarChar, 40));

    //Assign the search value to the parameter.
    MyDataAdapter.SelectCommand.Parameters["@au_lname"].Value = (txtLastName.Text).Trim();

    //Create and add an output parameter to the Parameters collection.
    MyDataAdapter.SelectCommand.Parameters.Add(new SqlParameter("@RowCount", SqlDbType.Int, 4));

    //Set the direction for the parameter. This parameter returns the Rows that are returned.
    MyDataAdapter.SelectCommand.Parameters["@RowCount"].Direction = ParameterDirection.Output;

    //Create a new DataSet to hold the records.
    DataSet DS = new DataSet();

    //Fill the DataSet with the rows that are returned.
    MyDataAdapter.Fill(DS, "AuthorsByLastName");

    //Get the number of rows returned, and assign it to the Label control.
    //lblRowCount.Text = DS.Tables(0).Rows.Count().ToString() & " Rows Found!"
    lblRowCount.Text = MyDataAdapter.SelectCommand.Parameters[1].Value + " Rows Found!";

    //Set the data source for the DataGrid as the DataSet that holds the rows.
    GrdAuthors.DataSource = DS.Tables["AuthorsByLastName"].DefaultView;

    //NOTE: If you do not call this method, the DataGrid is not displayed!
    GrdAuthors.DataBind();

    MyDataAdapter.Dispose(); //Dispose the DataAdapter.
    MyConnection.Close(); //Close the connection.
    }

  5. في "مستكشف الحلول"، انقر نقراً مزدوجاً فوق صفحة.aspx ومن ثم انقر فوق تعيين "صفحة البداية".
  6. حفظ المشروع ومن ثم انقر فوق تشغيل في Visual Studio.NET. لاحظ أنه يتم ترجمة المشروع وتشغيل الصفحة الافتراضية.
  7. اكتب اسم الكاتب الأخير في مربع النص ومن ثم انقر فوق الحصول على الكاتب. لاحظ أنه يتم استدعاء الإجراء المخزن وأن تجميع الصفوف التي تم إرجاعها DataGrid.

    يمكنك توفير نوع ملقم SQL سلاسل البحث مثل G %، التي تقوم بإرجاع كافة المؤلفين بأسماء العائلة التي تبدأ بالحرف "ج".

استكشاف الأخطاء وإصلاحها

  • إذا تعذر الاتصال بقاعدة البيانات، تأكد من أن سلسلة _ الاتصال بشكل صحيح يشير إلى خادم يقوم بتشغيل SQL Server.
  • إذا كان يمكنك الاتصال بقاعدة بيانات، ولكن إذا واجهت مشاكل عند محاولة إنشاء إجراء مخزن، تأكد من أن لديك الأذونات الصحيحة لإنشاء الإجراءات المخزنة في قاعدة البيانات الذي يتم الاتصال به.
خصائص

رقم الموضوع: 320916 - آخر مراجعة: 15‏/01‏/2017 - المراجعة: 1

تعليقات