PDA

View Full Version : سوال: ثبت اطلاعات دو جدول بصورت همزمان



maktab
چهارشنبه 21 تیر 1391, 12:12 عصر
سلام
فرض کنید دوتا جدول داشته باشیم یکی جدول کارنامه دومی هم جدول نمرات.
وقتی قراره یک کارنامه ثبت بشه باید اطلاعات به یک سطر از جدول کارنامه ثبت بشه و تمام نمرات در جدول نمرات نیز ثبت بشه و اگر در ثبت مرحله دوم مشکلی ایجاد شد اطلاعات مرحله قبل هم ثبت نشند.
خب جدول اول که یک insert ساده دارد. ولی جدول دوم باید یک insert چندتایی یا یک جدول بگیرد. برای این کار باید چکار کرد؟

Arash_janusV3
چهارشنبه 21 تیر 1391, 12:18 عصر
انجام دادن چندین عملیات INSERT در SQL به طور همزمان با استفاده از دستور BeginTransaction (http://barnamenevis.org/showthread.php?346847-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-%D8%A8%D9%87-%D9%87%D9%85%D8%B1%D8%A7%D9%87-%D9%85%D8%AB%D8%A7%D9%84%D9%87%D8%A7%DB%8C-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF%DB%8C&p=1531646&viewfull=1#post1531646)

tooraj_azizi_1035
چهارشنبه 21 تیر 1391, 12:18 عصر
سلام
هم از کلاس SqlTransaction (http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqltransaction.aspx)برای ثبت اتومیک باید استفاده کنید و هم از TableAdapterManager (http://msdn.microsoft.com/en-us/library/bb384432.aspx)برای ثبت جداول رابطه ای.


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);
}
}
}
}

maktab
چهارشنبه 21 تیر 1391, 12:23 عصر
ممنون. ولی این کار باید بصورت یک Store Procedure باشه. اگر ممکنه یک مثال برای آن بزنید.

maktab
چهارشنبه 21 تیر 1391, 19:25 عصر
من میخواهم کوئری هام را در SP بنویسم. همچنین دارم از EF استفاده میکنم.
خب چطور میشه یک شی (جدول) را بصورت کامل به SP فرستاد و در آن با توجه به موارد گفته شده ذخیره کنم؟

tooraj_azizi_1035
چهارشنبه 21 تیر 1391, 20:02 عصر
Julie Lerman به عنوان یک Microsoft MVP پاسخ داده:
http://msdn.microsoft.com/en-us/data/gg699321.aspx

maktab
یک شنبه 25 تیر 1391, 01:55 صبح
Julie Lerman به عنوان یک Microsoft MVP پاسخ داده:
http://msdn.microsoft.com/en-us/data/gg699321.aspx

من متوجه ذخیره اطلاعات دو جدول بصوت همزمان در این آموزش نشدم. من به مثالی نیاز دارم که شبیه به همین مثال بدون EF کار کند (البته همان طور که گفتم با استفاده از EF و SP).
اگر ممکنه یکم توضیح بدید.

san_sal_2008
جمعه 04 بهمن 1392, 21:08 عصر
در صورتی که بخواییم اطلاعات رو داخل دو جدول ثبت کنیم طوری که کلیداصلی جدول اول داخل جدول دوم هم هست
چه جوری میشه ؟؟
از دوستان پرسیدم میگن باید join شه
ولی مشکل من اینجاست بعداینکه جوین شد دستور ثبت رو چه جوری باید قرار داد ممنون میشم کمک کنید