PDA

View Full Version : سوال: ايجاد يك كانكشن منحصر به فرد براي هر كاربر



* joodi *
دوشنبه 03 بهمن 1390, 09:37 صبح
سلام

ميخوام براي يك كاربر فقط يك كانكشن داشته باشم چون در اينترفيس يك اسكريپت مينويسم كه توش تمپ تيبل create ميكنم و ميخوام از اين تمپ تيبل توي بانك استفاده كنم اگر كانكشن رو open و close كنم كانكشني كه مربوط به يك كاربر خاص هست از بين ميره و كار من خراب ميشه!

آيا روشي وجود داره كه بتونم يك كانكشن خاص براي هر كاربر داشته باشم ؟
يا اگر كانكشن راتا لاگ اوت كاربر باز نگه دارم مشكلي ممكنه پيش بياد؟

ضروريست لطفا راهنمايي كنيد.
با احترام

* joodi *
چهارشنبه 05 بهمن 1390, 08:59 صبح
هيچ كس يعني؟!:ناراحت:

alonemm
چهارشنبه 05 بهمن 1390, 11:04 صبح
باسلام:
شما میتونید جدول Temp رو سمت کد نویس و با اشیای ADO بسازید و برای هر کاربر در یک سشن نگهداری کنید.

* joodi *
چهارشنبه 05 بهمن 1390, 11:55 صبح
ممنونم من براي ايجادش از ADO كمك گرفتم اما ميخوام از اين تمپ تيبل در sp استفاده كنم كه اين مستلزم قطع نشدن ارتباط با sql هست.
اما فكر ميكنم سوالمو بد پرسيدم
اصل درست بودن اين كار براي خود من جاي سوال داره اما مامورم به انجامش! :))
آيا اگر كاربران زيادي همزمان با يك سيستم تحت وب عمل اينزرت و ... انجام بدن ممكنه كانفليكت داده ها اتفاق بيفته؟ در مورد نرم افزار هاي تحت ويندوز اين اتفاق افتاده و به همين خاطر تمپ تيبل در اينترفيس create ميكنيم و در sp با استفاده از اون عمل اينزرت و ... را در جدول اصلي انجام ميديم اما در مورد وب چون كانكشن قطع ميشه تمپ تيبل از حافظه remove خواهد شد!!

سناريو درست است اصلا؟! :)

alonemm
چهارشنبه 05 بهمن 1390, 12:14 عصر
بجای تمپ از سشن استفاده کنید و شی ADO مثل DataSet رو درسشن ذخیره کنید.
درمورد انکه مشکل در ذخیره داده هاست که باید بگم من تاحالا در SQLServer 2008 این موضوع رو ندیدم برای مدیریت بهتر شما باید از SqlTransaction استفاده کنید.
مثل:

private static void ExecuteSqlTransaction(string connectionString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();

SqlCommand command = connection.CreateCommand();
SqlTransaction transaction;

// Start a local transaction.
transaction = connection.BeginTransaction("SampleTransaction");

// Must assign both transaction object and connection
// to Command object for a pending local transaction
command.Connection = connection;
command.Transaction = transaction;

try
{
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();

// Attempt to commit the transaction.
transaction.Commit();
Console.WriteLine("Both records are written to database.");
}
catch (Exception ex)
{
Console.WriteLine("Commit Exception Type: {0}", ex.GetType());
Console.WriteLine(" Message: {0}", ex.Message);

// Attempt to roll back the transaction.
try
{
transaction.Rollback();
}
catch (Exception ex2)
{
// This catch block will handle any errors that may have occurred
// on the server that would cause the rollback to fail, such as
// a closed connection.
Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
Console.WriteLine(" Message: {0}", ex2.Message);
}
}
}
}



موفق باشید.