سلام.. تووی سی شارپ ّا چه دستوری میشه فهمید که sql server روی سیستم نصب هست یا نه ؟
فک میکنم باید از دستورات رجیستری استفاده کرد.ممنون میشم راهنمایی کنید.
سلام.. تووی سی شارپ ّا چه دستوری میشه فهمید که sql server روی سیستم نصب هست یا نه ؟
فک میکنم باید از دستورات رجیستری استفاده کرد.ممنون میشم راهنمایی کنید.
یکی از راه ها که نرم افزارهای deployment هم از اون استفاده میکنند. بررسی رجستری در این شاخه هست:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server
برای مثال، برای بررسی SQL Server Express 2005 SP2 باید مقدار Version در شاخه
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\SQLEXPRESS\MSSQLServer\CurrentVersion
برابر با 9.00.3042.00 باشه.
سلام
کدی رو که لطف کردین گذاشتین باید توی program.cs چک بشه با فرم اول برنامه ؟
کدی نگذاشتم که فقط محل ذخیره کلید مربوط به Version رو گذاشتم D: .هر جا لازم به بررسی باشه باید کد مروبط به خوندن مقدار رجیستری اجرا بشه. معمولا اگه در Setup ی که ساخته شده مشخص شده باشه که پیشنیاز نرم افزار چی هست، Setup این بررسی رو انجام میده. اگه نیاز چیز دیگه ای هست، بستگی به اون باید بررسی رو انجام داد و جای مشخصی نداره.
سلام
پیشنهاد میکنم دنبال این راه نری. اگه بخوای این کار رو بکنی باید در نظر بگیری که ممکنه یه نفر
روی دستگاهش SQL Server یا Express Edition یا LocalDb رو نصب کرده باشه که هرکدوم یه جور تنظیمات داره.
ضمن این که هر کدوم هم نسخههای متنوع داره. تازه ممکنه Sql Server نصب باشه، اما سرویساش غیر فعال
باشه. به علاوه ممکنه کاربر شما Sql Server دیگری رو تو شبکه استفاده کنه.
صبا صبوحی
سلام
چطوری و از کجا اینو اعمال کنم ؟ (که اگه sql نصب نبود نصب انجام نشه)
با اینستال شیلد کار میکنم !
پیشنهاد شما چیه ؟
مثلا من الان بعد از ستاپ سازی و غیره ، روی سیستمی که اس کیو ال نصب نیست برنامه رو نصب میکنم و اجرا میکنم حدود 10 تا 12 ثانیه هنگ میکنه !
بعد پیغام "عدم خواندن اطلاعات از بانک" رو میده که تو catch نوشتم ؛
--------------------------------------------------------------------------
یه سوال دیگه این که راهی هست که بعد از نصب (sql رو کلاینت نصب باشه) دیتابیس خودش اتچ بشه ؟
سلام
فکر کنم این قسمت رو اشتباه از قول من نقل کردی، چون من مطلبی راجع به Setup ننوشته بودم
پیشنهاد من اینه که همون روش عادی رو انجام بدی، connection string توی config برنامه.
پیشنهاد شما چیه ؟
مثلا من الان بعد از ستاپ سازی و غیره ، روی سیستمی که اس کیو ال نصب نیست برنامه رو نصب میکنم و اجرا میکنم حدود 10 تا 12 ثانیه هنگ میکنه !
بعد پیغام "عدم خواندن اطلاعات از بانک" رو میده که تو catch نوشتم ؛
--------------------------------------------------------------------------
یه سوال دیگه این که راهی هست که بعد از نصب (sql رو کلاینت نصب باشه) دیتابیس خودش اتچ بشه ؟
اون هنگ کردنی که شما میگی، در واقع connection timeout هست که میتونی زمانش رو کمتر کنی.
زمان پیشفرض یک دقیقه هست که خیلی زیاده، برای کامپیوتر خودت یا حتا شبکههای امروزی 5 ثانیه هم کافی هست.
اما کار دیگهای که میتونی انجام بدی که ببینی خطا میگیری یا نه، اینه که تو یه thread دیگه ارتباط با sql رو تست کنی تا
کاربر مجبور نشه منتظر timeout بمونه.
و برای پرسش بعدی شما
پیشنهاد میدم که برنامهی نصب شما، script دیتابیس رو داشته باشه و دیتابیس رو خودش بسازه.
من مدتهاست که این کار رو میکنم و از مشکلات و «شر» عدم سازگاری نسخههای مختلف sql راحت شدم.
یا باید با نسخهی پایین کار کنی که بتونی رو نسخههای مساوی یا بالاتر attach یا restore کنی، و یا این که
باید مطمئن باشی که روی دستگاه مشتری حداقل نسخهای مثل نسخهی خودت نصب هست که گاهی عملی نیست.
من با نسخهی 2014 کار میکنم که روی ویندوز xp نصب نمیشه.
کافیه script رو مناسب با حداقل نسخهی قابل پشتیبانی ( انتخاب من نسخهی 2008 هست ) تولید کنی و
اون رو اجرا کنی.
صبا صبوحی
ببخشید ، نقل قول از plus بود !
و اینجاست که میگن آدما (خودمو میگم) هر چی بیشتر میرن جلو ، متوجه میشن که هیچی بلد نیستن :)
چطور یا از کجا باید زمان رو کم کرد ؟
اول اینکه از اسکریپت نویسی هیچی نمیدونم :) --- :(
دوم اینکه یعنی نباید دیتابیس رو مثل روال الانم (که توی پوشه دیباگ میریزم) باشه و خود ستاپ یه دیتابیس با جدولها و فیلدها و ... ایجاد کنه ؟
ممنون ...
یعنی خودش یه پیغام میده دیگه ! (به en)
راهی هست فارسیش کرد ؟
------------------------------
البته ببخشید اگه از بحث اصلی یکم منحرف شدم ...
تقریبا همه بخش های InstallShield قابلیت تغییر زبان داره. فارسی سازیش بحث مفصلی داره. در بخش General Information یا در بخش Release میتونید زبان رو تعیین کنید. البته زبان فارسی به صورت پیشفرض نصب شده. باید یا خودتون فارسی کنید یا جستجو کنید نمونه هایی از فایل های فارسیش موجود هست.
سلام
تو ConnectionString باید بنویسی ConnectionTimeout=10 مثلاً برای 10 ثانیه
پیشفرض 60 ثانیه هست.
اول: لازم نیست سکریپت نویسی بدونی، خود Sql Server امکانش رو برات گذاشته. روی دیتابیس کلید راست رو بزن و منوی Task و زیر منوی GenerateScript میتونی
این کار رو انجام بدی ( تو Management Studio ) تنظیمات خوبی هم داره. مثلاً میتونی بگی که دادهها رو بیاره یا نه، یا این که برای کدوم نسخهی Sql سکریپت بسازه.
دوم: بله دقیقاً منظورم همینه. این کار بهترین کاره.
صبا صبوحی
براحتی با چک کردن سرویس های ویندوز میتونید از نصب بودن آن باخبر بشید حتی اگر سرویس ران نباشد
public static bool IsServiceInstalled(string serviceName)
{
// get list of Windows services
ServiceController[] services = ServiceController.GetServices();
// try to find service name
foreach (ServiceController service in services)
{
if (service.ServiceName == serviceName)
return true;
}
return false;
}
سلام
دوست عزیز، این روش برای LocalDb جواب نخواهد داد.
صبا صبوحی
من با این کد تست کردم شد.فک میکنم روی لوکال هم جواب بده:
DataTable dt = SqlDataSourceEnumerator.Instance.GetDataSources();
if (dt.Rows.Count == 0)
return false;
else
return true;
کد بالا برای تست کردن نصب بود و این کد هم برا بدست آوردن نام ها :
foreach (DataRow dr in dt.Rows){
ddlInstances.Items.Add(string.Concat(dr["ServerName"], "\\", dr["InstanceName"]));
}
منبــــــع
سلام
دوست عزیز، به نظر من خوب نیست ما فرض کنیم که SQL به صورت Local وجود داره. یعنی اینطوری خودمون
برای نرمافزار خودمون محدودیت بیثمری رو قائل شدیم. همیشه این امکان وجود داره که من از یه Sql Server
در محیط شبکه استفاده کنم. به همین دلیل بهترین کار تست ارتباط به شکل ایجاد یک SqlConnection و باز و
بسته کردن اون هست.
صبا صبوحی
راستش من برای نرم افزارهای خودم با بررسی کانکشن این تست رو انجام میدم و بعد با بررسی وجود دیتابیسم که اگر نبود بسازمش
فوقش 5 ثانیه معطل میشی...
ولی چون شما راه دیگه ای رو میخوای دوستان جوابهای متفاوتی میدن