السلام عليكم
كنا في ال ASP العادية نعمل ملف اتصال واحد ونعمللو Include من باقي الصفحات..
ممكن اذا في حدا بيعرف كيف نقلد الطريقة هادي في ال ASP.NET من ناحية الفكرة والناتج ومش مهم الأسلوب اذا النتيجة وحدة
واذا طلبي مش واضح احكولي أوضح كمان
شكرا..
السلام عليكم
كنا في ال ASP العادية نعمل ملف اتصال واحد ونعمللو Include من باقي الصفحات..
ممكن اذا في حدا بيعرف كيف نقلد الطريقة هادي في ال ASP.NET من ناحية الفكرة والناتج ومش مهم الأسلوب اذا النتيجة وحدة
واذا طلبي مش واضح احكولي أوضح كمان
شكرا..
::::التوقيع::::
موقع ممتاز
وان شاء الله يفيد الجميع
وشكرا
؟؟لماذا لا يصل الايميل المرسل من صفحتي الي الهوتميل؟؟
مستوي الجدية في المواضيع المطروحة
لا اله الا الله محمد رسول الله
تستطيع أحي بناء class يقوم بجميع العمليات الخاصة بالتعامل مع قاعدة البيانات
أعتقادي يا اخي انا شفت موضوع مختص بهذه الامر حيث أنه قام بتوحيد الاتصال وذلك عبر وضع رابط الاتصال في ملف CONFIG فحاول البحث عن هذه الامر في مكتبة MSDN وانا إن شاء الله سوف ابحث لك عن هذه الامر وسف امدك فيه باقرب فرصة .
إذا كنت تستخدم فيجول ستوديو دوت نت سوف تجد في متصفح المشروع أو الـ 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)
------
أفضل طريقة على الإطلاق كما قرأت (من حيث الأداء و السرعة و سهولة التطوير) هي تقسيم التطبيق إلى طبقات و يكون هناك طبقة للتعامل مع قواعد البيانات في المشروع كما أشار الأخ إسماعيل (و لكني ليس لدي خبرة معها يا حبذا لو تعطينا فكرة أخي إسماعيل) و لكن أعتقد أنه بالنسبة للمشاريع الصغيرة هذه الطريقة الآنفة الذكر تكفي و حتى ربما مع المشاريع المتوسطة
عموما الله أعلم
و أسف على الإطالة
الاخ طارق كريم أعطاك طريقة جيدة ولكنها فقط لجعل ال 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
سوف أعطيك مثالا تقريبا لهذا الكلاس ..
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
من بعد اذنك اخ محمد
انت شو قصدك بالاسطر التالية
public Database():this(ConfigurationSettings.AppSettings["ConnectionString"])
{
}هل قمت بعملية وراثة نص الاتصال .....
الصراحة لم افهم هذا السطر
.......
اوكي .. نحن قمنا بتضمين ال NameSpace التالي
System.Configuration
وبالتالي نستطيع التعامل مع الطرق و الخصائص المووجودة بداخله على انها من داخل الكلاس نفسه .. في ال Constructors الاثنين الموجودين قمنا بتوريث ال Configuration الخاصة بالتطبيق وبالتالي كائن الاتصال الموجود في Web.Config لل Constructor الأول .. وفي ال Constructor الثاني قمنا بإستقبال القيمة من خلال قيمة يمنحها المبرمج لنسخة الكلاس ..
You can fly while you can touch the sky
شكرا اخ محمد لردك
انا بدي بالضبط Constructor الاول يعني هو عمليا شلون لازم نستخدموا يعني رح يرجع نص الاتصال ام ماذا
ارجو التوضيح...
انا بدي بالضبط 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
كويس الكلام اخ محمد انا فهمان لهون بس سؤالي انو انت مو عم تطبع نص الاتصال
Response.Write(ConfigurationSettings.AppSettings["cnStr"].ToString());
طيب شلون عم تستدعيها من Constructor الاول
شكرا للجميع
جاري التجريب..
وأتمني اللي عندو طرق تانية يعطينا..مش غلط !
::::التوقيع::::
موقع ممتاز
وان شاء الله يفيد الجميع
وشكرا
؟؟لماذا لا يصل الايميل المرسل من صفحتي الي الهوتميل؟؟
مستوي الجدية في المواضيع المطروحة
لا اله الا الله محمد رسول الله
هذا الموضوع مغلق.