الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

توحيد الconnection

مغلق
بدأه ashrafweb في 30 سبتمبر 2005 · 11 رد · 1,540 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كنا في ال ASP العادية نعمل ملف اتصال واحد ونعمللو Include من باقي الصفحات..

ممكن اذا في حدا بيعرف كيف نقلد الطريقة هادي في ال ASP.NET من ناحية الفكرة والناتج ومش مهم الأسلوب اذا النتيجة وحدة

واذا طلبي مش واضح احكولي أوضح كمان

شكرا..

::::التوقيع::::

موقع ممتاز

وان شاء الله يفيد الجميع

وشكرا

؟؟لماذا لا يصل الايميل المرسل من صفحتي الي الهوتميل؟؟

مستوي الجدية في المواضيع المطروحة

لا اله الا الله محمد رسول الله

#3

أعتقادي يا اخي انا شفت موضوع مختص بهذه الامر حيث أنه قام بتوحيد الاتصال وذلك عبر وضع رابط الاتصال في ملف CONFIG فحاول البحث عن هذه الامر في مكتبة MSDN وانا إن شاء الله سوف ابحث لك عن هذه الامر وسف امدك فيه باقرب فرصة .

#4

إذا كنت تستخدم فيجول ستوديو دوت نت سوف تجد في متصفح المشروع أو الـ Solution explorer ملف إسمه Web.Config إفتحة و أضف الـ connection strign الخاص بك بين هذه التاج (لا حظ أنك لن تجدها و لكنك ستقوم بإضافتها بنفسك) و ضع في إعتبارك أن ملف الـWeb.Config حتى و إن كنت تستخدم فيبي فهو case sensetive لذا appSettings غير AppSettings فإنتبه

<appSettings>
  <add key="NWind" value="server=localhost; database=northwind; user id= sa; password=password;"></add>
  </appSettings>

لا أظنك بحاجة لشرح الـconnection strign

بالنسبة للـ

key="NWind"

فهو الإسم الذي سوف تنادي على قيمة الـconnection strign به

و بالنسبة للـvalue الأمر واضح

حسنا الآن كيف سوف ننادي على الـconnection strign من داخل أي صفحة aspx

من الأفضل إذا كمنت سوف تستخدم الـconnection strign أكثر من مرة في نفس الصفحة أن تعرفه بـ private حتى لا يحدث مشاكل في موضوع الـ scop

Private strConn As String = ConfigurationSettings.AppSettings("NWind")
    Private objConn As New SqlConnection(strConn)

هذا هو السطر المسؤل عن نداء قيمة الـstrConn من الملف web.config

ConfigurationSettings.AppSettings("NWind")

لا حظ بالطبع إذا كان الـkey عندك مثلا يساوي zzz إذا قيمة NWind سوف تكون zzz

و لكنك حتى مع هذه الطريقة أنت بحاجة لإضافة هذا السطر في جميع الصفحات التى سوف تتعامل مع نفس الـconnection و لكن الميزة أنه لو مثلا قمت بتغيير الإتصال فسوف تغيره في مكان واحد فقط

يمكنك إضافة keys كما يحلو لك بين التاجز الخاصة بـ <appSettings> مثلا لإضافة connection string جديد

<add key="pubs" value="server=localhost; database=pubs; user id= sa; password=password;"></add>

------

هناك طريقة أخري كنت قرأتها و هي أنك تضع الـconnection string في ملف Global.asax و تجعل القيمة تشير إلى مثلا

session("strConn")= "server=localhost; database=northwind; user id= sa; password=password;"

ثم في الصفحة المراد إستخدام الإتصال

dim strConn as string = session("strConn")

و أيضا ميزتها لو حصل وقمت بتغيير الـconnection string

عموما هذا الطريقة لن تغني أنك في كل صفحة بحاجة إلي إضافة تعريف الـداتابيز كونيكشن

dim objConn as new sqlconnection(strConn)

------

أفضل طريقة على الإطلاق كما قرأت (من حيث الأداء و السرعة و سهولة التطوير) هي تقسيم التطبيق إلى طبقات و يكون هناك طبقة للتعامل مع قواعد البيانات في المشروع كما أشار الأخ إسماعيل (و لكني ليس لدي خبرة معها يا حبذا لو تعطينا فكرة أخي إسماعيل) و لكن أعتقد أنه بالنسبة للمشاريع الصغيرة هذه الطريقة الآنفة الذكر تكفي و حتى ربما مع المشاريع المتوسطة

عموما الله أعلم

و أسف على الإطالة

#5

الاخ طارق كريم أعطاك طريقة جيدة ولكنها فقط لجعل ال Connection String متاحا لكل التطبيق ولكن الأخ السائل طلب توحيد كائن الإتصال و جواب الأخ إسماعيل عنجريني هو الصحيح 100% عن طريق عمل كلاس لجميع عمليات الاتصال بقواعد البيانات بإسم DataBase مثلا و من ثم يقوم بعمل Instance لهذا الكلاس و يعمل عليها و إن كانت لك خبرة في ال OOP يمكنك في كلاس قاعدة البيانات عمل Overloading لل Constructor بحيث يكون الأول يأخذ قيمة ال CnStr من ملف ال Web.Config والثاني تكون أنت حر في وضعه من خلال تمريره لنسخة الكلاس ....... أيضا أعتقد أن هناك حل مجدي إن كنت تستخدم ال VB.NET من خلال وضع تعريف للاتصال cn و يكون Shared بدل Private ليكون مشتركا بين جميع ال Forms الموجودة في التطبيق ..

تحياتي للجميع وحظا موفقا

You can fly while you can touch the sky

#6

سوف أعطيك مثالا تقريبا لهذا الكلاس ..

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;

namespace as4web.Components
{

	public class Database
	{
  private string mConnString;
  private SqlConnection mConn;
  private SqlDataAdapter mAdapter;
  private SqlCommand mCmd;

// 1st Constructor
  public Database():this(ConfigurationSettings.AppSettings["ConnectionString"])
  {
  }

//second constructor
  public Database(string connString)
  {
 	 mConnString = connString;
 	 mConn = new SqlConnection(mConnString);
 	 mConn.Open();
 	 mAdapter = new SqlDataAdapter();
 	 mCmd = new SqlCommand();
 	 mCmd.CommandType = CommandType.StoredProcedure;
 	 mCmd.Connection = mConn;
  }


  public void CloseConnection()
  {
 	 mConn.Close();
  }

// The deconstructor

~Database()
  {
                     // dispose the class here
  }

//  يمكنك إضافة أي طرق لجلب البيانات كالتالي
// return data set ds
public DataSet GetDataSet(string cmdText)
  {
 	 mCmd.CommandText = cmdText;
 	 mAdapter.SelectCommand = mCmd;
 	 DataSet ds = new DataSet();
 	 mAdapter.Fill(ds);
 	 return ds;
  }
}

مثلا لو أردت تعريف كائن من هذا الكلاس و إعادة ds منه اكتب التالي :

   Database Db = new Database();  //سوف يأخذ القيمة من ملف ال web.config
   DataSet ds = Db.GetDataSet("your command here")

طبعا في اخر سطر سوف تمرر اسم ال Stored Procedure و تحتاج لإضافة أجزاء لملف الاتصال للتعامل مع ال SP و مع باقي العمليات مثل ال ExecuteReader و GetDataRow الخ الخ الخ

اتمنى ان اكون قد أفدت ولو بالقليل :)

You can fly while you can touch the sky

#7

من بعد اذنك اخ محمد

انت شو قصدك بالاسطر التالية

 public Database():this(ConfigurationSettings.AppSettings["ConnectionString"])
 {
 }

هل قمت بعملية وراثة نص الاتصال .....

الصراحة لم افهم هذا السطر

.......

#8

اوكي .. نحن قمنا بتضمين ال NameSpace التالي

System.Configuration

وبالتالي نستطيع التعامل مع الطرق و الخصائص المووجودة بداخله على انها من داخل الكلاس نفسه .. في ال Constructors الاثنين الموجودين قمنا بتوريث ال Configuration الخاصة بالتطبيق وبالتالي كائن الاتصال الموجود في Web.Config لل Constructor الأول .. وفي ال Constructor الثاني قمنا بإستقبال القيمة من خلال قيمة يمنحها المبرمج لنسخة الكلاس ..

You can fly while you can touch the sky

#9

شكرا اخ محمد لردك

انا بدي بالضبط Constructor الاول يعني هو عمليا شلون لازم نستخدموا يعني رح يرجع نص الاتصال ام ماذا

ارجو التوضيح...

#10
انا بدي بالضبط Constructor الاول يعني هو عمليا شلون لازم نستخدموا يعني رح يرجع نص الاتصال ام ماذا

رح يوصلك لنص الاتصال الموجود داخل ملف ال Web.Config

بالعادة عندما نقوم بتعريف مفتاح لنص الاتصال في ملف ال Web.Config نكتب التالي :

<add key="cnStr" value="server=(local) database=Northwind;Trusted_Connection=True;" />

و نقوم بعرضه مثلا او كتابته كالتالي :

//C#
Response.Write(ConfigurationSettings.AppSettings["cnStr"].ToString());

You can fly while you can touch the sky

#11

كويس الكلام اخ محمد انا فهمان لهون بس سؤالي انو انت مو عم تطبع نص الاتصال

Response.Write(ConfigurationSettings.AppSettings["cnStr"].ToString());

طيب شلون عم تستدعيها من Constructor الاول

#12

شكرا للجميع

جاري التجريب..

وأتمني اللي عندو طرق تانية يعطينا..مش غلط !

::::التوقيع::::

موقع ممتاز

وان شاء الله يفيد الجميع

وشكرا

؟؟لماذا لا يصل الايميل المرسل من صفحتي الي الهوتميل؟؟

مستوي الجدية في المواضيع المطروحة

لا اله الا الله محمد رسول الله

هذا الموضوع مغلق.

مواضيع مشابهة