PDA

View Full Version : تبدیل دستور اس کیو ال به دستورات اکسس (اجرا از سی شارپ)



hojjatshariffam
سه شنبه 28 اردیبهشت 1389, 21:06 عصر
بچه ها من می خوام این دستور رو تو اکسس اجرا کنم ولی کلی با اس کیو ال فرق داره
ببینید میشه تبدیلش کرد به زبان اکسس
توضیح : می خوام از طریق کد تو سی سارپ این اسکیو ال رو تو پایگاه داده اجرا کنم
وقتی پایگاه داده اسکیو ال سرور هست ، درست اجرا میشه
ولی وقتی پایگاه داده اکسس هست کلی خطا میده اولیشم واسه دستور if هستش




if( (SELECT Count ([ID])

FROM [LalehMilkData].[dbo].[Info_tbl]
where [Name]='Company_Name')<1)

insert into [LalehMilkData].[dbo].[Info_tbl]
VALUES
('Company_Name'
,NULL
,'abc'
,null
,null)
else

UPDATE [LalehMilkData].[dbo].[Info_tbl]
SET
[Value] = 'bca'

WHERE [Name] = 'Company_Name'


توضیح کد اسکیوال: اگه رکوردی در نتیجه دستور Select برگردونده نشه ، در اینصورت یک رکورد Insert میشه و اگه رکورد موجود باشه ، Update بشه

hojjatshariffam
چهارشنبه 29 اردیبهشت 1389, 01:15 صبح
بچه های کسی در این مورد اطلاعاتی نداره؟

مهدی رحیم زاده
چهارشنبه 29 اردیبهشت 1389, 06:28 صبح
دوست من برای اجرای دستورات از SQLCommand و یا OLEDBCommand استفاده کنید . فرقی نداره که چه بانکی باشه Access و یا SQL.
OLEDB رو برای Access استفاده کنید ، مشکلی نداره .
موفق باشید

hojjatshariffam
چهارشنبه 29 اردیبهشت 1389, 11:05 صبح
دوست من برای اجرای دستورات از SQLCommand و یا OLEDBCommand استفاده کنید . فرقی نداره که چه بانکی باشه Access و یا SQL.
OLEDB رو برای Access استفاده کنید ، مشکلی نداره .
موفق باشید
خب برای امتحان همه اینا رو یه sqlCommand کنید و یه بار به SQL Server بفرستید و یه بار دیگه با OLEDBCommand به اکسس بفرستید ببینید چه فرقی می کنه ، مطمعنا که اکسس Error میده
تو خود اکسس هم اگه تو قسمت کوئری این دستورات را وارد کنید اصلا قبول نمی کنه ، ولی اس کیو ال به راحتی اجرا می کنه
اکسس اولین اروری هم میده به دستور If می باشد ، اصلا if رو نمیشناسه
نمی دونم من اشتباه می کنم یا اشکال از جای دیگست.
یه مثال دیگه هم می زنم : برای افزایش خودکار فیلد های کلید تو اسکیو ال سرور می تونیم از IDENTITY (1,1) استفاده کنیم ولی تو اکسس این کارو نمی شه کرد ، همین جا مطرح کردم و بعد از کلی کمک دوستان فهمیدیم که باید تو اکسس از دستور AUTOINCREMENT(1,1) استفاده کرد یک هفته وقتمو گرفت این تفاوت کوچیک .
پس الان مطمئنم که کلی فرق دارند ، اکسس از اسکیو ال استاندارد استفاده نمی کنه ، یه جا خوندم که از T-SQL استفاده می کنه ، شایدم اشتباهی این مطلب رو خوندم ولی تفاوتشونو کاملا احساس کردم
حالا یکی کمک کنه یا از روش های غیر استاندارد برای این کار استفاده نکنیم راه بهینه به نظر شما در مورد این گونه تفاوت ها چیست
دوستان متخصص دیتا بیس لطفا نظرتونو بگید

مهدی رحیم زاده
چهارشنبه 29 اردیبهشت 1389, 15:10 عصر
میشه دقیقا بگید چکار می خوایید انجام بدین؟
شاید بشه معادل رو انجام داد.

hojjatshariffam
چهارشنبه 29 اردیبهشت 1389, 19:34 عصر
کار خاصی نیست
می تونم اول سلکت کنم ، تو برنامه چک کنم ، بعد آپدیت یا اینزرت کنم . ولی می خوام فقط با یک بار مراجعه به دیتا بیس (که اکسس هم هست و سرعتش بطبع پائینه) اینزرت یا آپدیت بشه
اگه دیتا بیسم اسکیو ال سرور بود ، هم همون دستورا رو قبول می کرد و هم اینکه سرعتش پالا بود

مهدی رحیم زاده
چهارشنبه 29 اردیبهشت 1389, 21:51 عصر
دوست من همیشه و همه جا نمیشه همه چیز رو پیدا کرد .
متاسفانه توی این دنیا این قانونه !:ناراحت:
روی App فک نکنم زیاد سرعتش تاثیر گذار باشه.
مگه تعداد داده های شما چند تاست؟

hojjatshariffam
چهارشنبه 29 اردیبهشت 1389, 22:37 عصر
دوست من همیشه و همه جا نمیشه همه چیز رو پیدا کرد .
متاسفانه توی این دنیا این قانونه !:ناراحت:
روی App فک نکنم زیاد سرعتش تاثیر گذار باشه.
مگه تعداد داده های شما چند تاست؟
تعداد داده ها معلوم نیست ، چون اپلیکیشن میره دست کاربران نهائی ، ممکنه چند هزار سند (رکورد) تو دیتا بیس ثبت بشه
اول باید سلکت بشه بیاد به برنامه ، چک بشه ، بعد اگه شرط برقرار بود تصمیم گرفته بشه که درج یا ویرایش بشه
وقتی تعداد رکورد بالا باشه و این عملیات چندین بار در یک زمان برای فیلد های مختلف تکرار بشه و دیتا بیس هم اکسس باشه سرعت به شدت پائین میاد
همونطور که گفتم اس کیو ال سرور می تونه ستوری رو که نوشتم رو در یه بار کانکت شدن اجرا کنه و نیازی به ارسال و چک شدن داده ها در اپلیکیشن نیست ولی اکسس تو قسمت کوئری اصلا دستور if رو نمیشناسه
من به اجبار این کار رو کردم ولی دنبال راه حل بهینه ام . که اگه دیتا بیسم اس کیو ال سرور بود ، همین دستور مشکل رو حل می کرد ولی متاسفانه دیتا بیس اکسس هست و فعلا در این ورژن برنامم نمی تونم عوضش کنم