PDA

View Full Version : سوال: ذخیره شدن اطلاعات در جدول دوم به شرط درج شدن در جدول اول



pesare
پنج شنبه 09 آبان 1392, 12:21 عصر
سلام دوستان

سوال من اینه

ذخیره شدن اطلاعات در جدول دوم به شرط درج شدن در جدول اول

hadi46
پنج شنبه 09 آبان 1392, 12:42 عصر
سلام
میتونی توی همون کوئری ذخیره در جدول اولت

با دستور select @@scopeIDENTITY داخل یک متغییر و چک کنی ببینی ایا مقدار جدیدی بر می گرداند یا خیر اگر برگرداند سپس جدول دوم رو پر کنی


یا trigger بنویسی روی اون جدول زمانی که پر شد جدول دوم هم پر شود

Mahmoud.Afrad
پنج شنبه 09 آبان 1392, 17:33 عصر
اگر جداول وابسته هستند بهتره از تراکنش (transaction) استفاده کنی.

pesare
پنج شنبه 09 آبان 1392, 22:39 عصر
میشه نحوه استفاده از Transaction رو توضیح بدین؟

hadi46
شنبه 11 آبان 1392, 11:05 صبح
سلام

SqlConnection cnn = new SqlConnection(ConnectionString);
SqlTransaction trans = null;
try
{
cnn.Open();
trans = cnn.BeginTransaction();
SqlCommand cmd = new SqlCommand("spInsertFactor",cnn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Transaction = trans;
/// rest of command configuration such as parameters and ....
cmd.ExecuteNonQuery();
trans.Commit();
‌}
catch(Exception ex)
{
if(trans != null)
trans.RollBack();
}

pesare
شنبه 11 آبان 1392, 12:27 عصر
پیغام خطا رو با RaiseError چطوری میشه برگردوند؟

hadi46
شنبه 11 آبان 1392, 13:57 عصر
یک مثال در sql

begin transaction
BEGIN TRY
insert into s values(3,4) --جدولی با دوفیلدid,text
insert into h values('1') --جدولی با فیلد id
END TRY
BEGIN CATCH
SELECT
--لیست خطاها
ERROR_NUMBER() AS ErrorNumber
,ERROR_SEVERITY() AS ErrorSeverity
,ERROR_STATE() AS ErrorState
,ERROR_PROCEDURE() AS ErrorProcedure
,ERROR_LINE() AS ErrorLine
,ERROR_MESSAGE() AS ErrorMessage;


IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION