مشاهده نسخه کامل
: اتصال دیتابیس به سرور
shadmehrshadow1
24-02-2013, 20:27
سلام
من میخوام دیتا بیس رو به یک سرور مرکزی وصل کنم تا برنامه که روی 10 تا سیستم نصب میشه همشون اطلاعات رو روی یک جا بریزند و از اونجا بخونند.
می خوام ببینم پیکار باید بکنم. مثلا کانکشن استرینگ رو تغییر بدم کافیه ؟
مثلا اگه به ما یه آدرس آی پی بدن چیکار باید بکنیم. فقط کافیه پورت و آدرس آی پی رو توی کانکشن استرینگ بنویسیم ؟
یه سوال دیگه هم اینکه میشه با دامین هم این کار رو انجام داد؟ چه جوریه اگه میشه؟
ممنون
سلام
کافی است SQLServer را روی رایانه سرور نصب و پیکربندی کنید و نیازی به نصب مورد اضافه ای هم در کلاینت ها نیست (برخی موارد دیده شده که دوستان اشتباه میکنند و گمان میکنند باید SQLServer روی کلاینت هم نصب شود که صحیح نیست) بعد هم در برنامه ConnectionString مناسب را اصلاح میکنید.
در واقع برنامه شما باید مجهز به فرمی برای تنظیم ConnectionString خود باشد و چهار پارامتر اصلی اتصال را از کاربر دریافت و ConnectionString خود را بسازد و ذخیره کنید.
نام یا آی پی سرور SQLServer
نام دیتابیس روی SQLServer
نام کاربری اتصال به دیتابیس
رمز عبور اتصال به دیتابیس
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
دامین و غیر دامین هم هیچ فرقی ندارد(!)، اگر سرویس DNS مطمئنی در شبکه دارید میتوانید از نام سرور جهت اتصال استفاده کنید وگرنه درج IP هم کافی و موثر است.
در برنامه نویسی هم فقط باید رعایت پاره ای مسائل همزمان را داشته باشید و لحاظ کنید که شاید بین باز شدن تا بسته شدن یک فرم کوچک در برنامه شما، افراد دیگر در شبکه چندین تراکنش مختلف انجام داده باشند...
مشکلات و خطاهای منطقی نرم افزار شما در شبکه معمولاً با مجهز بودن جداول دیتابیس شما به کلیدهای AutoNumber بسیار زیاد کاهش پیدا میکند، قبلاً بارها گفتم و باز تکرار میکنم که اگر نمیخواهید لزومی ندارد کاربر سیستم شما از وجود این فیلدها مطلع باشد و لزوماً نیازی نیست حتماً این فیلدها را در UI به کاربر نشان دهید.
کلیدهای AutoNumber تضمین کننده عدم تکراری بودن است و نیز تضمین میکند وقتی سطری را برای بروزرسانی باز یکنید تا بخواهید ذخیره کنید کلیدش تغییر نکند! و...
موفق باشید.
بسم الله الرحمن الرحیم
با سلام
از استاد جناب _H2_ کمال تشکر رو دارم که وقت گذاشتند.
(برخی موارد دیده شده که دوستان اشتباه میکنند و گمان میکنند باید SQLServer روی کلاینت هم نصب شود که صحیح نیست)
برای این مورد که فرمودید 2تا ستاپ درست کنیم؟ که یه مورد برای کلاینت ها و مورد دیگری برای سرور اجرا شود.
در واقع برنامه شما باید مجهز به فرمی برای تنظیم ConnectionString خود باشد و چهار پارامتر اصلی اتصال را از کاربر دریافت و ConnectionString خود را بسازد و ذخیره کنید.
نام یا آی پی سرور SQLServer
نام دیتابیس روی SQLServer
نام کاربری اتصال به دیتابیس
رمز عبور اتصال به دیتابیس
به نظر شما بهترین مکان برای ذخیره ConnectionString کجاست؟
با سپاس فراوان
به نظر شما بهترین مکان برای ذخیره ConnectionString کجاست؟
یعنی چی؟ مگر کانکشن استرینگ رو ذخیره هم میکنن؟ :n04:
shadmehrshadow1
25-02-2013, 19:17
دامین و غیر دامین هم هیچ فرقی ندارد(!)، اگر سرویس DNS مطمئنی در شبکه دارید میتوانید از نام سرور جهت اتصال استفاده کنید وگرنه درج IP هم کافی و موثر است.
میشه یه نمونه از کانکشن استرینگ دامین هم بگید.
به نظر شما بهترین مکان برای ذخیره ConnectionString کجاست؟
منم این سوال رو داشتم.
ممنون
سلام
یعنی چی؟ مگر کانکشن استرینگ رو ذخیره هم میکنن؟
دلیل تعجب شما را نمیدانم ولی این کار هم در برنامه های دسکتاپی و هم وب، رایج است.
اگر دقت کنید در هر دو گروه (دسکتاپ و وب) سایر شرکت های ایرانی و خارجی هم همواره میتوانید شاهد این مورد باشید
فقط به عنوان یک نمونه مثال میتوانم به MediaPortal از گروه برنامه های دسکتاپی و DotNetNuke از گروه محصولات وبی اشاره کنم که هر دو در زمان نصب فرمی برای تنظیم ConnectionString نمایش داده و رشته اتصال را ذخیره و حفظ میکنند
(از برنامه های ایرانی هم بدلیل شبه تبلیغات صرف نظر میکنم)
تنها دلیلی که میتوان بدلیل آن ConnectionString را ذخیره نکرد آن است که User های برنامه همان User های SQLServer باشد تا کاربر هر بار User و Pass را وارد کند ولی این مورد خیلی کاربردی ندارد.
در حالیکه در سوی مقابل برنامه ها نیاز به داشتن ارتباط پایدار با دیتابیس دارند:
- برنامه ها بدلیل نیاز به قابلیت های گسترده مجوزدهی، ترجیح میدهند خودشان سیستم اکانتینگ و User و Pass را در جداول دیتابیس پیاده سازی کنند که یعنی استقلال از User و Pass اصلی دیتابیس و داشتن ارتباط کامل با آن
- بسیاری از برنامه ها سرویس هایی خودکاری (WinService) دارند که باید بدون لاگین کاربرهم، ارتباط پیوسته با دیتابیس داشته باشند (مانند برخی پشتیبان گیری های خودکار مستقل از مکانیزم خودکار SQLServer یا برخی سرویس های پیام رسانی و...)
- بجز User و Pass ، رشته اتصال شامل IP سرور و نام دیتابیس هم میشود که این مقادیر برای عموم کاربران عادی، میتواند مبهم و پیچیده باشد و چیزی از آن نمیدانند، این موارد در محدوده دانش کارکنان بخش فنی شرکت ها است و از چشم کاربران عادی دورنگاه داشته میشود تا هم اشتباهاً تنظیم نشوند و هم کاربران معمولی را سردرگم نکند. پس نیاز است این مقادیر در پشت پرده حفظ و نگاه داری شود.
و...
همه این موارد مستلزم آن است خود برنامه ارتباط پایداری با دیتابیس داشته باشد و رشته اتصال صحیح را مستقلاً در اختیار داشته باشد.
میشه یه نمونه از کانکشن استرینگ دامین هم بگید
Workgroup, Domain, Web, Internet و... فرقی ندارد تا وقتی IP مجاز و پینگ شونده ای از سرور داشته باشید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به نظر شما بهترین مکان برای ذخیره ConnectionString کجاست؟
در برنامه های وبی تقریباً همه برنامه ها از همان web.config استفاده میکنند، هم به حد کافی امن است و هم رایج و عرف است.
برای برنامه های دسکتاپی خود مایکروسافت و VS به صورت پیشفرض ApplicationName.config را پیشنهاد میکنند ولی کمی از جنبه امنیتی دلچسب نیست (چون برخلاف همزاد وبی اش یک کاربر (کمی شیطان و با معلومات!) میتواند آن را بخواند و سرخود به دیتابیس متصل شود)
میتوانید از Settings یا فایل دستی دیگری استفاده کنید، مهم نیست! مهم آن است که بهتر است این اطلاعات را رمزنگاری و سپس ذخیره کنید تا هرکسی نتواند User و Pass اصلی دیتابیس را مشاهده کند.
نمونه بسیار بسیار ساده ای میتوانید در زیر مشاهده کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
برای این مورد که فرمودید 2تا ستاپ درست کنیم؟ که یه مورد برای کلاینت ها و مورد دیگری برای سرور اجرا شود
بله تقریباً.
در واقع برنامه شما شامل دو بخش نصب SQLServer و نصب برنامه اصلی میتواند باشد که لزوماً میتواند یکی از این بخش ها انجام نشود.
حال چه دو Setup مستقل باشد و یا یک Setup باشد که با دکمه رادویی یا چک باکس و... نصب دو جزء فوق را کنترل کند، این دیگر تصمیم شماست!
موفق باشید.
دلیل تعجب شما را نمیدانم ولی این کار هم در برنامه های دسکتاپی و هم وب، رایج است.
اینکه قسمتی از کانکشن استرینگ موقع نصب تکمیل بشه یا مثال های شما، یه چیز دیگس....!!!
کانکشن استرینگ رو ذخیره میکنن رو ولی هنوز من نفهمیدم یعنی چی!:n04:
بسم الله الرحمن الرحیم
با سلام
- بسیاری از برنامه ها سرویس هایی خودکاری (WinService) دارند که باید بدون لاگین کاربرهم، ارتباط پیوسته با دیتابیس داشته باشند (مانند برخی پشتیبان گیری های خودکار مستقل از مکانیزم خودکار SQLServer یا برخی سرویس های پیام رسانی و...)
لطفا راجع به این مطلب توضیحات بیشتری بفرمائید.
میتوانید از Settings یا فایل دستی دیگری استفاده کنید، مهم نیست!
در حالتی که شبکه است چه جوری کلاینت ها میتونند از Settingsی که در سیستم سرور ذخیره می شود؛ استفاده کنند؟ تصور بنده تا این جای کار این بود که فصل مشترک بین کلاینت و سرور تنها پایگاه داده است. درست است؟
در نمونه ای که آورده اید اون dllی که برای اتصال با بانک استفاده کرده اید کار خودتونه یا از جایی گرفتید؟ برای این می پرسم که در این جور مواقع باید به کدها اعتماد کردید و سریع سراغ جستجو رفت یا از سایت ها ایده بگیریم و خودمون دست به کار شیم؟
از نمونه ای هم که گذاشتید بینهایت سپاسگزارم.:n16:
سلام
کانکشن استرینگ رو ذخیره میکنن رو ولی هنوز من نفهمیدم یعنی چی!
اگر میتوانید کمی بیشتر دلیل و منطق تعجب تان را تشریح بفرمائید تا بتوانیم بهتر مذاکره کنیم و بحث را ادامه دهیم، شاید اصلاً نکته دید تفاوتی وجود نداشته باشد و فقط من بد توضیح داده باشم یا شما بد متوجه شده باشید و اگر اگر چراغ ها روشن شود ببینیم که اختلافی وجود ندارد.
توضیح دیگری میدهیم:
گمانم حداقل سر این مطالب توافق داریم:
1- برنامه های دیتابیس گرای ما به چیزی به نام ConnectionString صحیح نیاز دارند تا کار کنند.
2- ConnectionString مولفه هایی مثل نام/IP سرور دارد که مقداری ثابت نیستند و درنتیجه نمیتواند یک const ساده در برنامه باشد.
3- طبق منطق قبل نتیجه آن میشود که این ConnectionString تا باید هربار در رایانه ساخته شود یا قابل تنظیم و ذخیره سازی و استفاده مجدد باشد.
تا اینجا را قبول دارید، خوب اگر خواستید بقیه این شفاف سازی با شما ... :n16:
بسیاری از برنامه ها سرویس هایی خودکاری (WinService) دارند که ...
لطفا راجع به این مطلب توضیحات بیشتری بفرمائید
برخی موارد (بیشتر در برنامه های بزرگ سازمانی) نیاز میشود تا برنامه خدمات اضافه ای را در شبکه همواره ارائه دهد...
این خدمات مثلاً میتواند یک سیستم اختصاصی زمان بندی وظایف باشد که باید کارهایی خودکار در زمان بندی های خاصی خودکار انجام شود ...
یا مثلاً سیستم اختصاصی ذخیره سازی فایلهای پیوست و اسناد
(((
به دلایل مختلفی که اینجا جایش نیست، افراد ترجیح میدهند فایلهای پیوست اسنادشان را در دیتابیس آرشیو نکنند،
این فایلها میتواند اسناد تصویری و Word و Excel و اسناد اسکن شده و رسیدها و... باشد باید در ارتباط با سند خاصی در دیتابیس ذخیره شود ولی همانطورکه گفتم گاهاً نه در خود دیتابیس،
این سامانه میتواند (یک راه حلش) یک WinService در ارتباط با دیتابیس باشد که در بستر Tcp یا Http یا Ftp و... اجازه آپلود و دانلود فایلهای پیوست به اسناد را درون سرور بدهد،
در این شرایط همچین سرویسی همواره Run است و همواره با دیتابیس در ارتباط است و به کل کاربران در شبکه خدمات میدهد،
)))
همچین سرویس هایی باید مستقلاً ConnectionString را بدانند و به دیتابیس دسترسی داشته باشند.
در حالتی که شبکه است چه جوری کلاینت ها میتونند از Settingsی که در سیستم سرور ذخیره می شود؛ استفاده کنند؟ تصور بنده تا این جای کار این بود که فصل مشترک بین کلاینت و سرور تنها پایگاه داده است. درست است؟
بله فرمایش شما کاملاً صحیح است و من هم همچین منظوری نداشتم.
این مشخص میکند که یا من بد توضیح دادم یا دوستان بد متوجه شده اند، شاید همین بیان بد محل ابهام دوستمان senaps هم باشد ...
قرار نیست کلاینت ها از Setting ای در سرور استفاده کنند...
(((
اینکه میشود ماجرای انیمیشن 'لوک خوش شانس' و برادران 'دالتون'، درقسمتی، گاوصندوق میخردید و کلیدقفل گاوصندوق را درون خود آن میگذاشتند ... بگذریم ...
ما تا وقتی مشخصات سرور را نداریم که نمیتوانیم به آن وصل شویم، ما نمیتوانیم Setting ای را که خود مشخص کننده IP سرور است را از سرور بخوانیم ...
)))
ما این Setting خاص (حاوی رشته اتصال) را در هر رایانه و در خود آن جداگانه تنظیم و ذخیره میکنیم، در واقع این Setting کلید ارتباط برنامه با دیتابیس است.
سایر تنظیمات برنامه را میتوان بطور سرتاسری در یک جدولی در دیتابیس ذخیره کرد ولی ConnectionString فرق دارد و باید هررایانه خودش آن را ذخیره کنید.
اگر {سرور + دیتابیس} را یا هم یک گاوصندوق در نظر بگیریم که حاوی اشیای ارزشمندی است، کلید این {سرور + دیتابیس} خودش یک شی و ارزشمند است.
ولی کلید گاوصندوق تنها شی ارزشمندی است که نمیتواند داخل گاوصندوق باشد!
یادتان هم نرورد که پنجره تنظیمات رشته اتصال باید قبل از ورود به برنامه (مثلاً با دکمه کوچکی در فرم لوگین) هم باید در دسترس باشد.
در یک برنامه دسکتاپی شما نمیتوانید فرم تنظیم رشته اتصال را فقط و فقط درون محیط برنامه و بعد لوگین قرار دهید ... ! چرایش را گمانم میدانید ! :n13:
در نمونه ای که آورده اید اون dllی که برای اتصال با بانک استفاده کرده اید کار خودتونه یا از جایی گرفتید؟ برای این می پرسم که در این جور مواقع باید به کدها اعتماد کردید و سریع سراغ جستجو رفت یا از سایت ها ایده بگیریم و خودمون دست به کار شیم؟
بله یک کتابخانه کد شخصی از خودم است که چند کنترلر دیگر هم دارد، بخش های مختلف کنترلری هم که دیدید بسته به نیاز قابلیت مخفی شدن دارد.
ولی بارها گفتم که مثال های برای ایده گرفتن و دیدن نمونه آماده و مشاهده تصور و ایده دیگران هستند.
این به هیچ وجه معنی آن را نمیدهد که تا مثالی دیدم، ما هم باید فوراً کد آن را Copy و Paste کنیم و عین آن را انجام دهیم.
شما میتوانید از مشاهده اجرا و مشاهده کد این قبیل مثال ایده بگیرید و شاید خودتان چیز بسیار کاملتر و دقیق تر و مناسب تری برای برنامه خودتان درست کنید.
در این مثال هم اگر دقت کنید دو پنجره تنظیمات مجزا و موازی دارد.
که در یکی از control اماده ghdiamond.win.dll استفاده شده
و
در دیگری شاهد یک نمونه ساده هستید که کار با چهار TextBox ساده انجام شده
این دیگر نیاز و برنامه و ایده شخصی شماست که چطور و به چه شکل این کار را انجام دهید.
از صمیم قلب، موفق باشید!
:n16:
تا اینجا را قبول دارید، خوب اگر خواستید بقیه این شفاف سازی با شما ... :n16:
خوب بعدش وقتی داریم برنامه رو نصب میکنیم(من میذارم تو تنظیمات:) )، مشخصاتی که میخوایم (ایپی سرور و یوزر نیم و پسوردی که براش تو سرور ست کردیم تا باش لاگین کنه رو وارد میکنیم!)...
بعدش هم میریم جلو...
حالا برای چی باید کانکشن استرینگ رو ذخیره کنیم؟:n02:
یعنی مگر یک بار در بالا ست نکردیم که سرورمون کجاست و چطوری بهش دسترسی پیدا بکنیم؟
مگر کانکشن استرینگ رو یک بار تعریف نمیکنیم؟
یک بار هم ست میکنیم و میرود پی کارش....
استنباط من این بود که دوستان میگند که کانکشن جای دیگری برای ذخیره شدن داره یا میخوان هر بار باز دوباره ذخیره بکنن؟؟؟
فک کنم سوتفاهم شده در اون بخش ذخیره کردنش!!!!
تعجب من از این بود که مگر کانکشن رو اول کار که برنامه نویسی میکنیم جاش مشخص میشود، یا اخر کار؟
مثلا من وقتی دارم کلاینت رو برنامه نویسی میکنم، در لایهي دسترسیام، یک بار توی یک کلاسی یک کانکشن استرینگی میسازم و چند قسمتش رو با استرینگ بیلدر و از توابع لایه های بالاتر میگیرم و ست میکنم...
ایا غیر از اون یک مرتبه، جای دیگری باید ذخیره بکنم؟:n04:
چون یک کانکشن بیشتر نداریم دیگه
در یک برنامه دسکتاپی شما نمیتوانید فرم تنظیم رشته اتصال را فقط و فقط درون محیط برنامه و بعد لوگین قرار دهید ... ! چرایش را گمانم میدانید ! [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
منظور مثل همون پروژه های دانشگاهی هستش که برای هر فرم، یه بار کانکشن استرینگ مینویسن؟! و کل کار رو از ۰ انجام میدن؟؟؟؟
بسم الله الرحمن الرحیم
با سلام
از پاسختون بینهایت سپاسگزارم. ان شاالله خدا خیرتون بده.
در یک برنامه دسکتاپی شما نمیتوانید فرم تنظیم رشته اتصال را فقط و فقط درون محیط برنامه و بعد لوگین قرار دهید ... ! چرایش را گمانم میدانید ! :n13:
نه؛ متاسفانه نمیدونم.
با تشکر
سلام
تعجب من از این بود که مگر کانکشن رو اول کار که برنامه نویسی میکنیم جاش مشخص میشود، یا اخر کار؟
منظورتان از "کانکشن" همان "کانکشن استرینگ" بود؟!
منظورتان را از "جاش" درست متوجه نشدم.
بحرحال بحث سر محتویات رشته اتصال است و نه مکان آن.
و دقت کنید که تمرکز صحبت ما در این تاپیک بیشتر روی شبکه است.
ایا غیر از اون یک مرتبه، جای دیگری باید ذخیره بکنم؟
محل ذخیره رشته اتصال میتواند ثابت باشد، میتوان همیشه رشته اتصال را از یک فایل (مثلاً connectionstring.txt) در کنار exe خواند.
بحث سر این است که محتویات درون رشته اتصال متغییر است و نمیتواند ثابت و const باشد .
یک رشته اتصال مانند این حداقل چهار پارامتر دارد که ما زمان کدنویسی از آن اطلاع نداریم و در زمان نصب تازه مشخص میشود و شاید بارها بعد نصب هم تغییر کند
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خوب بعدش وقتی داریم برنامه رو نصب میکنیم(من میذارم تو تنظیمات )، مشخصاتی که میخوایم (ایپی سرور و یوزر نیم و پسوردی که براش تو سرور ست کردیم تا باش لاگین کنه رو وارد میکنیم!)...
بعدش هم میریم جلو...
آیا همین هم به معنی ذخیره رشته اتصال نیست؟
شما (حداقل) قبول دارید که رشته اتصال را یکبار در زمان نصب باید تنظیم کنید؟
خوب این تنظیم زمان نصب را کجا انجام میدهید و ذخیره میکنید یا نگاه میدارید؟؟؟
آیا تنظیمی که در زمان نصب برای IP سرور انجام داده اید را نباید جایی ذخیره کنید تا برنامه که بعد نصب اجرا میشود به آن دسترسی داشته باشد؟
خود SETUP که شاید و گاهاً اصلاً نیازی به ConnectionString نداشته باشد، اگر SETUP رشته اتصالی هم بگیرید برای اجرای بعدی برنامه میگیرید و باید آن را در جایی که در دسترس برنامه هم باشد ذخیره کند !
از مطالب بالا نتیجه میگیریم، مفهوم ذخیره کردن رشته اتصال چیز غریبی نیست و وجود دارد
فقط می ماند تنظیم و تغییر رشته اتصال اگر فقط در SETUP باشد کافی است یا باید در برنامه هم قابلیتش موجود باشد؟!
جواب صحیح آن است که شاید تنظیم رشته اتصال در زمان SETUP لازم باشد ولی کافی نیست.
چرا؟
چون مدیران شبکه و مدیران دیتابیس سازمان ها بسته به خط مشی های کاری و امنیتی امکان دارد بارها IP ها را عوض کنند یا رمزهای اتصال به دیتابیس را تغییر دهند و...
((همین مدتی قبل بود که فن آوری اطلاعات یکی از بانک های دولتی ، کل رنج IP های داخلی سازمان را کن فیکن کرد))
در شرکت های کوچک هم امری عادی است که IP یا رمزدسترسی دیتابیس را در شبکه عوض کنند...
آیا در این شرایط باید کل برنامه های کلاینت از اول لغونصب و نصب گردند؟؟؟ آیا نباید برنامه یک فرم کوچک برای تنظیم IP و User و Pass سرور داشته باشد؟؟؟
در یک برنامه دسکتاپی شما نمیتوانید فرم تنظیم رشته اتصال را فقط و فقط درون محیط برنامه و بعد لوگین قرار دهید ... ! چرایش را گمانم میدانید !
گمانم جریان بسیار ساده این تاپیک کمی پیچیده شده تا جایی که جمله بدیهی فوق هم نامفهوم جلوه میکند!!!:n02::n26:
عزیزان، این جریان همان کلید و گاوصندوق است.
فرض کنید ایشان >>> :3: <<< مدیر فنی شرکت بوق هستند، (دیشب هم کمی نمک به زندگیشان اضافه شده و دعوای کوچکی با همسرگرامیشان داشتند :blink:) صبح که می آیند سرکار ، صلاح میدانند IP سرور یا حداقل Pass دیتابیس را عوض کنند ...
حدس میزنید چه بلایی سرکلاینت ها در می آید:
الف) ارتباط همه کلاینت ها با سرور قطع شده ودیگر هیچ برنامه ای Login نمیشود.
ب) هیچ اتفاقی رخ نمیدهد و همه با خوبی و خوشی به زندگی خود ادامه میدهند.
ج) گزینه (د) صحیح است!
یکی باید کلاینت ها را درستشان کند ولی نمیتوان خیلی باشخصیت Login کرد و بعد از Login داخل محیط برنامه ConnectionString برنامه را اصلاح کرد.
باید بتوان ConnectionString را بدون Login و در واقع قبل از Login اصلاح و ویرایش کرد.
جمیعاً موفق باشید.
من اشتباه منظور ها رو فهمیده بودم! :)....!!!
یکی باید کلاینت ها را درستشان کند ولی نمیتوان خیلی باشخصیت Login کرد و بعد از Login داخل محیط برنامه ConnectionString برنامه را اصلاح کرد.
باید بتوان ConnectionString را بدون Login و در واقع قبل از Login اصلاح و ویرایش کرد.
خداشاهده یکی از دوستانم چنین کاری کرده بود!!!! یعنی چون من میام تو تنظیمات برنامه کانکشن رو میذارم(تنظیمات رو به سبک برنامههایی مثل فایرفاکس یا IDM توی تنظیمات شبکه و کانکشن استرینگ و ... برنامه تنظیم، و در فایلی جدا ثبت میکنم! :) ) اومده بود همین کارو کرده بود، ولی برنامهاش برای دیدن اون تنظیمات نیاز به لوگین داشت!!( یعنی دیدن کل تنظیمات برنامه رو بسته به سطح دسترسی کرده بود!!) وقتی برنامهاش خراب شد، مجبور شد دوباره از نو نصب کنه!!!!!! :)
البته کاری که من میکنم قدری خطرناک میتونه جلوه کنه و هست، ولی اهمیت امنیتی چندان بالایی نداره برا برنامههای من! :):n21:
shadmehrshadow1
02-03-2013, 12:08
خیلی ممنون از توضیحات دوستان عزیز . واقعا مفید بود . مخصوصا _H2_ .
یه موضوع دیگه هم هست ممنون میشم کمک کنید.
من همیشه دیتابیس رو اتچ میکردم و بهش وصل می شدم . واسه همین یکم با وصل شدن به سرور مشکل دارم.
من میخوام به دیتا بیس موجود در SQl server Managment وصل بشم که نسخه 2012 هست و دیگه نمیخوام به صورت اتچ به بانک وصل بشم.
کانکشن استرینگی الآن استفاده می کنم :
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DBName.mdf;Integrated Security=True;User Instance=True
این طور که معلومه باید به این صورت تغییرش بدم :
Data Source=ServerAddress;Initial Catalog=DataBaseName;User Id=Username;Password=Password;
ولی باز نمیتونم . راستش زیاد نمیتونم با SQL Server Managment ارتباط برقرار کنم یکم برام پیچیدست :)
نمیدونم کجای کار رو اشتباه انجام میدم که نمیشه . فکر کنم یوزر نیم رو اشتباه وارد می کنم . این اطلاعات رو از کجا بیارم که بزارم توی کانکشن استرینگ .
نسخه ویژوآل استودیو من هم 2010 هست.
ببخشید که من پاسخ میدم شایدم اشتباه باشه تصورم....
ولی شما احیانا متن اصلی کانکشن استریگتون همینه؟؟
Data Source=ServerAddress;Initial Catalog=DataBaseName;User Id=Username;Password=Password;
در سرور ادرس ادرس و شماره پورت رو باید وارد کنین... در بخش دیتابیس نیم هم باید اسم درست وارد بشه...
فایر وال ممکنه بهتون اجازهی کار رو نده و گیر بده و...
shadmehrshadow1
02-03-2013, 12:34
ممنون
پورت رو باید از کجا پیدا کنم ؟
من با این پیغام مواجه میشم :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگه پسوورد نداشته باشه چی باید بنویسیم ؟ IntegratedSecurity رو true بدم؟
بسم الله الرحمن الرحیم
با سلام
بنده هم به نوبه خودم از دوستان تشکر میکنم؛ خدا رو شکر تاپیک مفیدی بود.:n01:
چند تا لینک می ذارم؛ ان شاالله مفید واقع بشه.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
موفق باشید.
تشکر کافی نبود.... لینک های گرداوری شده بسیار عالی هستن به نظرم! :)
shadmehrshadow1
04-03-2013, 16:04
ممنون از دوستمون لینک ها رو گذاشتن.
کسی میدونه او اروور واسه چی بود؟
سلام
نمیدونم کجای کار رو اشتباه انجام میدم که نمیشه . فکر کنم یوزر نیم رو اشتباه وارد می کنم . این اطلاعات رو از کجا بیارم که بزارم توی کانکشن استرینگ
شما باید برای دیتابیس تان User اضافه کنید...
- مطمئن شوید پورت 1433 در سرور و کلاینت باز باشد
برای سیستم عامل های بالای XP
سلام
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
بعد باید مداعتبار سنجی MixedMode را برای SqlServer فعال کنید.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در صورت تغییر باید SqlServer را ریست کنید تا تغییرات اعمال شود.
سپس باید User و Pass جدیدی با مجوزهای لازم بسازید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از چهار پارامتر اتصال یک مورد مربوط به IP سرور است که باید بدانید، مورد بعدی مربوط به نام دیتابیس تان در سرور است (همان نامی که در SSMS میبینید) و دو مورد آخر هم که User و Pass است که از مرحله قبل تولید میکنید.
در خصوص پورت کاری SQLServer هم اگر نسخه را در حالت Default نصب کرده باشید (که در برنامه SQL Server Configuration Manager سرویس را با نام وهله MSSQLSERVER مشاهده کنید) نیازی به درج پورت نخواهد بود و خودکار از پورت 1433 استفاده میشود و شما کاری لازم نیست انجام دهید.
البته این موارد با تشریح کامل تر در تاپیک های گذشته بیان شده ...
موفق باشید.
shadmehrshadow1
04-05-2013, 20:41
سلام
اول ممنون از همه توضیحات کامل و خوبی که دوستان دادند.
ما یه هاست ویندوز گرفتیم . دیتا بیس رو هم توی سایت ReStore کردیم . حالا که میخوایم وصل بشیم بهش و ازش اطلاعات استخراج کنیم به مشکل بر خوردیم.
راستش فعلا این پیغام خطا رو میده :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
نمیدونم مشکل از کجاست. و کجای کار رو اشتباه انجام دادیم. یه چندتا سوال هم داشتم .
کانکشن استرینگ باید به چه صورت باشه . مثلا این دو :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اینکه این شماره پورت باید همین 1433 که واسه اس کیو ال هست باشه یا اون هاست و سایت مت یه پورتی داره که باید اون رو بدیم؟
سلام
برای اتصال از رشته اتصال شبیه این استفاده کنید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر قصد اتصال ریموت را ندارید و فقط میخواهید سایتان صحیح بالا بیاید، بجای IP نقطه را هم امتحان کنید...
=====
اگر قصد دارید از منزل یا جای دیگری به دیتابیس تان متصل شوید:
اگر هاست را بطور معمول از شرکت های هاستینگ تهیه کرده اید، باید مطمئن شوید که اصلاً ارتباط Remote را فعال کرده و پشتیبانی میکنند.
بسیاری از هاستینگ های معمولی اجازه این کار را نمیدهند.
ضمن اینکه برخی از هاستینگ ها از سرور متفاوت از IIS برای میزبانی SQLServer استفاده میکنند که در این صورت باید IP را از خودشان بپرسید.
=====
البته در هرصورت معمولاً باید خودتان ، دیتابیس و یوزری برای اتصال به آن را از طریق "کنترل پنل" ی که هاستینگ در اختیارتان قرارداده ایجاد کنید.
در نهایت با بخش پشتیبانی شرکت هاستینگ تان مشورت کنید.
موفق باشید.
shadmehrshadow1
07-05-2013, 16:47
اول لازم میدونم یه تشکر ویژه از _H2_ ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) عزیز داشته باشم به خاطر کمک ها و توضیحات کامل در عین حال ساده و کاربردی.
یک سوال دیگه داشتم که مقدار Connect Timeout=45 یعنی تا 45 ثانیه درخواست رو بفرسته تا کانکنکت بشه به سرور؟
اگه به این شکل هست در صورتی که بعد از گذشت این زمان به سرور متصل نشد چه اتفاقی میوفته؟ پیغام خطا میده؟ برنامه متوقف میشه؟
سلام
...یه تشکر ...لطف دارید.
یک سوال دیگه داشتم که مقدار Connect Timeout=45 یعنی تا 45 ثانیه درخواست رو بفرسته تا کانکنکت بشه به سرور؟
اگه به این شکل هست در صورتی که بعد از گذشت این زمان به سرور متصل نشد چه اتفاقی میوفته؟ پیغام خطا میده؟ برنامه متوقف میشه؟
فرآیند Open شدن Connectionنیازمند اتصال کلاینت به سرور و اعتبارسنجی امنیتی و... است.
مقدار ConnectTimeout مشخص کننده حداکثر زمان مجازی است که برنامه منتظر این برقراری ارتباط می ماند.
پیش فرض این عدد حدود 15 است ولی بدنیست برای شبکه های اشتراکی و پرترافیک و کند و... این عدد حداقل 30 باشد.
در واقع این عدد تضمین میکند که در صورت وجود مشکلی در شبکه و سرور و... برنامه شما تا ابد منتظر نماند تا شاید ارتباط برقرار شود.
اگر در این مدت مقرر نتوان به سرور متصل شد طبیعتاً جایی که در کد شما دستور Connection.Open را دارد به خطاها میخورد (تا درواقع برنامه نویس از عدم برقراری این ارتباط مطلع شود)
در کل، شما باید دستورات کاربا دیتابیس را در بلوک های try-cache انجام دهید تا بتوانید خطا را تشخیص داده و اقدام مناسبی مرتبط با آن انجام دهید (حداقل یک پیام فارسی به کاربر!)
موفق باشید.
shadmehrshadow1
08-05-2013, 20:36
ممنون.
مثلا این نمونه کد رو که من استفاده می کنم . کجا باید اون پیغام خطا رو بزارم یا همون Catch ؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یه سوال دیگه هم داشتم. اینکه توی برنامه ما یه دیتابیس لوکال هم داریم که اتچ هست . مبخواستم ببینم اگه برنامه رو روی یه سیستم دیگه نصب کنیم چون دیتابیس به صورت اتچ شده هست مشکلی پیش نمیاد؟ یا کار خاصی باید روی اون یکی سیستم انجام داد؟ چیزی باید نصب بشه؟
یه توضیحی هم راجع به او دی بی سی میدین؟
من مدتیه که هرچی یوز می سازم برای Studio managment نمیتونم لوگین کنم باهاش. پیغام خطای زیر رو میده . :|
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
shadmehrshadow1
20-05-2013, 16:42
ممنون میشم اگه جواب پرسش های پست آخرم رو هم بدید.
کجا باید اون پیغام خطا رو بزارم یا همون Catch ؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
چون دیتابیس به صورت اتچ شده هست مشکلی پیش نمیاد؟ یا کار خاصی باید روی اون یکی سیستم انجام داد؟ چیزی باید نصب بشه؟
باید نسخه مناسب SQLServer نصب باشد و دیتابیس هم اتچ شود.
برای موارد ساده و با انتقال و نصب سریع تر میتوانید از نسخه های SQL Server LocalDB و SQL Server Compact استفاده کنید.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
یه توضیحی هم راجع به او دی بی سی میدین؟
یک رابط نرم افزاری بسیار قدیمی برای یکسان سازی ارتباط با دیتابیس های مختلف SQL است.
شما باید یکبار ارتباط با دیتابیس واقعی را در ODBC ایجاد کنید
و یکبار هم اطلاعات لازم را به برنامه بدهید تا بتواند به منبع ODBC متصل شود.
در واقع میانجیگری ODBC باعث میشود برنامه شما بتواند با دیتابیس های متفاوت کار کند.
در حال حاضر دیگر خیلی کاربرد ندارد، ضمن اینکه تکنولوژی جدیدتر OLEDB هم میتواند همین میانجیگری را انجام دهد.
من مدتیه که هرچی یوز می سازم برای Studio managment نمیتونم لوگین کنم باهاش. پیغام خطای زیر رو میده
یا کاربران شما مجوزهای لازم برای لوگین را ندارند و یا اعتبار سنجی SQLServer تان در حالت Mixed/SQLServerAndWindowsAuthenticationMode قرار ندارد.
پست زیر را مطالعه کنید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
shadmehrshadow1
22-05-2013, 18:53
سلام
ممنون از راهنمایی های بسیار خوبتون
فقط نمیدونم چرا مشکل ورود با یک یوزر دیگه رو نمیتونم حل کنم . این موارد رو هم انجام دادم:
در Management روی ریشه سرویس راست کلیک کرده و...
Root->RightClick->Properties->Security و مطمئن شوید که گزینه SQL Server and Windows Authentication mode فعال است.
اما باز هم لوگین نکردن به منیجمنت استودیو :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
البته در قسمت user mapping وقتی از بخش users mapped to this login یکی از دیتا بیس ها رو انتخاب می کنم پیغام خطا میده :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
از قسمت Database role membership for : باید گزینه خاصی رو انتخاب کنم؟ به طور پیش فرض در حالت Public قرار داره.
ممنون
سلام
با توجه به آخرین خطایی که نوشته بودید، حدس میزنم دیتابیس شما قبلاً درجای دیگری attach بوده و شما دیتابیس را به سیستم جدید منتقل و مجدد استفاده کرده اید...
بحرحال نام کاربری مدنظر شما از قبل در این دیتابیس وجود داشته و حالا ...
در شاخه های درخت برنامه SSMS به زیر شاخه زیر رفته و نام 'serv' را حذف کنید و مجدد usermapping را انجام دهید.
Databases>yourdatabasename>Security>Users
میتوانید علاوه بر مسیر فوق، کاربر 'serv' را از مسیر استاندارد زیر هم حذف کنید و کلاً مجدداً از همین مسیر زیر اقدام به تعریف کاربر و تخصیص مجوز و... نمائید.
Databases>Security>Logins
انشاا... مشکل حل میشود.
موفق باشید.
shadmehrshadow1
23-05-2013, 19:47
سلام . باز هم ممنون :n16:
نمیدونم چرا نمیشه ، حتی با یوزر Sa هم نمیتونم وارد بشم. ممکنه بد نصب کرده باشم؟ :n13:
البته من با نام سرور (local) وارد میشم. فرقی می کنه با کدام نام وارد بشم؟
منظورتون از :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این هست :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
آخه در Databases زیر شاخه ای به نام Security وجود نداره.
من به برنامه درست کرده بودم و از اون برنامه یک فایل نصبی تهیه کردم .و در سیستم دیگری اون رو نصب کردم . اما وقتی که می خواستم اطلاعاتی رو توی دیتابیس SQL ذخیره کنم با پیغام خطا مواجه شدم.
پیغام داد که فایل دیتابیس فقط خواندنی هست . در حالی که وقتی من به فایل مراجعه کردم تیک فقط خواندنی اون برداشته شده بود. این رو هم بگم که دیتابیس به صورت اتچ در برنامه وجود داره و با اس کیو ال اکسپرس خود ویژوآن استودیو طراحی کردمش.
یک سوال دیگر هم داشتم.ممنون میشم راهنمایی کنید.البته قبلا مطرح کرده بودم ولی متوجه نشدم.: :n27:
ما یه جدول داریم مثلا جدول اول : name,family,age,tel,address و یه جدول دیگه که همین فیلد های جدول اول رو داره به علاوه فیلد های دیگه.
من میخوام وقتی اطلاعاتی در جدول دوم وارد می کنیم و ثبت می کنیم . بعدش اطلاعات فیلد های name,family,age,tel,address در جدول دوم رو با همه ی رکورد های موجود در جدول اول مقایسه کنه و اون سطر هایی که شباهت بیشتری بهش دارن رو در خروجی به دست بیاریم. اگه بشه درصد شباهت رو هم به دست آورد خیلی خوبه . نمیدونم که تونستم منظورم رو برسونم یا نه.
بزارید این جور بگم .
فرض کنید ما یک جدول داریم به نام table1 که شامل فیلد های name,family,age,tel,address هست .
که مثلا اطلاعات زیر توی این جدول هست به ترتیبی که بالا گفتم.
علی ، زند ، 20 ، 0911346 ، مشهد
محسن ، زند ، 21 ، 0911347 ، اصفهان
علی ، حمیدی ، 20 ، 0911345 ، تهران
من میخوام جست و جو به جای اینکه بر اساس یک فیلد انجام بشه مثلا فیلد name ، روی تمام فیلد ها انجام بشه. مثلای برای جست و جو بجای اینکه فقط بدیم محسن تا جوابی رو بده . تمام فیلد ها رو بدیم . مثلا مقدار های زیر رو فرض کنید.
محسن ، حمیدی ، 20 ، 0911345 ، تهران
1- یعنی جست و جو بر اساس تمام فیلدها.
2- در صورتی که عملیات 1 انجام شد اونوقت حتما نتیجه رو بر اساس میزان شباهت به ترتیب نشون بده که این جوری میشه:
علی ، حمیدی ، 20 ، 0911345 ، تهران | 4 شباهت
علی ، زند ، 20 ، 0911346 ، مشهد | 2 شباهت
محسن ، زند ، 21 ، 0911347 ، اصفهان | 1 شباهت
امیدوارم که اینبار تونسته باشم منظورم رو برسونم. :n01:
shadmehrshadow1
29-05-2013, 13:23
کسی نیست؟ :n27:
یه سوال دیگه. چه جوری میشه برای فایل دیتابیس اتچ شده SQLExperess که در خود ویژوآل استودیو هست رمز گذاشت و یا یوزر.
سلام
حتی با یوزر Sa هم نمیتونم وارد بشم
یا کاربرتان غیر فعال است یا در حالت mixed قرار ندارید.
البته من با نام سرور (local) وارد میشم
یعنی با نام سرور (local) وارد میشود و با چه نامی وارد نمیشود؟
نسخه تان Express بوده؟
از شبکه وصل میشود یا همان رایانه؟
آخه در Databases زیر شاخه ای به نام Security وجود نداره
بله، میبخشید، اشتباه تایپی من بود.
پیغام داد که فایل دیتابیس فقط خواندنی هست
اگر پیامتان واقعا readonly بوده، چند حالت دارد.
- دیتابیس تان در فایل سیستم readonly شده. (file property)
- ارتباط با دیتابیس در رشته اتصال readonly شده. (connectionstring)
- خود دیتابیس تان در مد فقط خواندنی قرار گرفته. (ALTER DATABASE dbname SET READ_ONLY|READ_WRITE)
- احتمال کمی هم وجود دارد مشکل شما از مجوز های درایوهای ntfs باشد.
نتیجه رو بر اساس میزان شباهت به ترتیب نشون بده
اصولاً برای جستجوهای پیشرفته در حد چیزی مانند موتور سرچ های وب و... SQLServer سرویس ویژه ای به نام FullTextSearch دارد که قابلیت های پیشرفته و سریعی را برای جستجو در مقیاس وسیع را میدهد ...
از جمله برای رتبه بندی خروجی جستجو توابعی مانند FREETEXTTABLE فراهم شده ...
که البته شرایطی در تهیه و بروزرسانی کاتالوگ ها و... دارد...
تحقیق کنید، میتوانید مطالعه در این ضمینه داشته باشید و اگر شرایطش را دارید از این سرویس کمک بگیرید
...
چه جوری میشه برای فایل دیتابیس اتچ شده SQLExperess که در خود ویژوآل استودیو هست رمز گذاشت و یا یوزر
امنیت SQLServer بر اساس user/login ها است.
شما میتوانید پس از attach یک کاربری با رمز دلخواه برای دسترسی به دیتابیس ایجاد کنید.
این شرایط منطقی است ولی encrypt کل دیتابیس مدنظرتان بوده، پیشنهاد میکنم برای برنامه های کوچک از دیتابیس SQLServer Compact استفاده کنید که برای اینجور برنامه های کوچک بهتر است و نیازی به اتچ و... هم ندارد.
موفق باشید.
shadmehrshadow1
31-05-2013, 15:16
ممنون :n16:
اصولاً برای جستجوهای پیشرفته در حد چیزی مانند موتور سرچ های وب و... SQLServer سرویس ویژه ای به نام FullTextSearch دارد که قابلیت های پیشرفته و سریعی را برای جستجو در مقیاس وسیع را میدهد ...
از جمله برای رتبه بندی خروجی جستجو توابعی مانند FREETEXTTABLE فراهم شده ...
یعنی از این طریق میشه اون کار رو انجام بدم؟ راه دیگری وجود ندارد ؟ نمونه ای از این مورد ندارید؟ FREETEXTTABLE رو جست و جو کنم ؟
سلام
(میبخشید این هفته یک سرور داشتیم که دچار مشکل شد و کمی گرفتار شدم...)
سرویس FTS بیشتر برای موارد جستجو روی یک فیلد متنی بزرگ کاربرد دارد.
تابع FREETEXTTABLE یکی از توابع این سرویس است که جدولی از primarykey سطر و عددی به عنوان رتبه و نزدیکی به مورد جستجو باز میگرداند، در نتیجه خیلی راحت میتوان خروجی جستجوی Sort شده ای بر حسب نزدیکی به مورد جستجو را در خروجی نشان داد.
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
==============
ولی از این نظر که شما چند ستون دارد که دیتاهایشان هم در هر ستون کم است، خوب مورد جالبی برای FTS نیست.
اگر شرایط استفاده از FTS را نداشته باشید و نتوانید با تغییرات این شرایط را تامین کنید، بحرحال میتوانید خودتان دستی کدی برای این کار بنویسید.
با کدهای #C مناسب و استفاده از DataReader میتوانید کد مناسبی بنویسید.
پیشنهاد میکنم:
1- ترتیب کلمات و حروف جداکننده و... در ورودی جستجو کاربر برایتان مهم نباشد، مانند موتور سرچهای اینترنتی
2- ورودی متنی که کاربر برای جستجو را میدهد را از کاراکترهای انفصال (مانند Space Tab Enter , : ; |) شکسته و به یک آرایه ای از کلمات خالص تبدیل کنید.
3- سطرهای کل جدول مورد نظر را با DataReader بخوانید و هر فیلد را با هر عنصر آرایه تان بررسی کنید و درمقابل یافتن هر وجود عنصر آرایه در هر فیلد یک عدد به رتبه آن سطر اضافه کنید.
4- PrimaryKey سطر و رتبه سطر را در یک List یا Dictionary ذخیره کنید.
5- همین کار را تا پایان کلیه سطرها انجام دهید.
6- در نهایت List یا Dictionary نهایی همان کار خروجی FREETEXTTABLE را برای شما انجام میدهد.
7- درنهایت میتوانید Sort ای روی رتبه سطرها انجام دهید و مثلاً بالاترین 100 رتبه نخست را بارگذاری و به کاربر نشان دهید.
موفق باشید.
shadmehrshadow1
16-06-2013, 13:35
ممنون از راهنمایی هاتون :n16:
راستش من یکم تو درک و رته اندازی این مورد مشکل دارم :n28:
یه نمونه کد میتونید بزارید اگه واستون مقدوره :n17:
سلام
یه نمونه کد میتونید بزارید اگه واستون مقدوره
چشم، اگر فرصت کنم در تعطیلی پیش رو (نیمه شعبان) کدساده ای خواهم نوشت.
شرمنده، باید کمی منتظر بمانید تا وقت کنم...
موفق باشید.
سلام
من هر کاری کردم اس کیو ال در مرحله نصب .net fromwork3.4 خطا میده لطفا کمکم کنید. باتشکر:n27:
shadmehrshadow1
23-06-2013, 13:33
سلام
من هر کاری کردم اس کیو ال در مرحله نصب .net fromwork3.4 خطا میده لطفا کمکم کنید. باتشکر:n27:
خب چه خطایی میده؟ اگه امکان داره متن خطا رو بزارید یا عکسش
سلام
یه نمونه کد میتونید بزارید اگه واستون مقدوره
یک پروژه ساده با WPF ...
اگر عبارتی را جستجو کنید، عبارت را به کلمات میشکند و در همه فیلدهای دنبال ان میگردد، هر سطری که تعداد بیشتری از کلمات عبارت را درخود داشته یا در فیلدهای متنی اش مدام تکرار شده باشد در خروجی جستجو بالاتر قرار خواهد گرفت.
قبل از آزمایش از صحت connectionstring در رایانه خود مطمئن شوید (connectionstring روی فرض نصب بودن نسخه sqlexpress بسته شده و در این صورت تغییری لازم ندارد)
لینک موقت:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
موفق باشید.
shadmehrshadow1
29-06-2013, 12:14
سلام
ممنون از وقتی که گذاشتید. :n16:
من هنوز کامل برنامه رو بررسی نکردم . یکم با سی شارپ مشکل دارم. یکم زمان میبره :n26:
فقط یه سوال : :n13:
برنامه جست و جو رو از توی جدول انجام میده و یا از توی دیتا گرید؟
و اینکه میشه توی این برنامه تعداد شباهت ها رو به دست آورد تا اون رو تبدیل به درصد بکنیم؟
سلام
...یکم با سی شارپ مشکل دارم...
ببخشید، یادم نبود شما VB کار میکنید.
برنامه جست و جو رو از توی جدول انجام میده و یا از توی دیتا گرید؟
برنامه یکراست با کمک command,datareader روی همه سطرهای جدول دیتابیس جستجو میکند، بعداً در نهایت 100 نتیجه شبیه ترین به کمک EntityFramework مجدد از دیتابیس خوانده شده و در گراید نمایش داده میشود.
میشه توی این برنامه تعداد شباهت ها رو به دست آورد تا اون رو تبدیل به درصد بکنیم؟
این کد در واقع خودش عددی موسوم به Rate (امتیاز/رتبه) را برای سطرها بدست می آورد وگرنه که نمیتوانست اطلاعات را براساس شباهت شان مرتب کند؟!
ساختار KeyRate به هر primarykey یک عدد Rate نظیر میکند و از آن برای مرتب سازی اطلاعات استفاده میکند ولی درنهایت قبل از نمایش در گراید، عدد Rate را حذف میکند تا کاربر چیز اضافه ای نبیند، در واقع کاربر فقط میبیند که فلان سطر بالاتر از بقیه است و عدد و درصدی نمیبیند (تقریباً شبیه خروجی موتور سرچ های اینترنتی)
shadmehrshadow1
04-07-2013, 10:53
سلام . :n17:
من متاسفانه هرکاری کردم نتونستم کلاس هایی که تو برنامه هست رو به وی بی دات نت تبدیل کنم :n28:
shadmehrshadow1
10-07-2013, 10:48
میشه یه کمکی بکنید . به مشکل برخوردم گیر کردم :n27:
متاسفانه کد دانلود نشد که اول امتحان کنم بعد اعلام کنم، همش تایم اوت میده:n29:
با این کد ها تبدیل نمیشن؟
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
سلام
متاسفانه کد دانلود نشد که اول امتحان کنم بعد اعلام کنم، همش تایم اوت میده
متاسفانه در چند ماه اخیر حدوداً هر 20 روز سرور عوض کردم...
این سرور فعلی هم، همین امروز حدود 5 ساعت قطع بود !!!
من متاسفانه هرکاری کردم نتونستم کلاس هایی که تو برنامه هست رو به وی بی دات نت تبدیل کنم
نسخه VB.Net هم اضافه شد.
الگوریتم کمی اصلاح شد تا اولویت بندی بهتری داشته باشد.
(((
قبلاً اگر "a 5" را در دو سطر زیر جستجو میکردید، سطر (الف) بالاتر نشان داده میشد
الف)
abcdedaxax
ب)
abcd5
چون تکرار بیشتری از مورد جستجو در آن وجود داشت
ولی حالا مورد (ب) بالاتر نشان داده میشود چون تنوع بیشتری از کلمات مورد جستجو را شامل میشود در واقع به نوعی جستجو دارای دو معیار شده.
)))
از همان لینک قبلی دانلود کنید.
باید یاداوری کنم که این فقط یک مثال ساده جهت سرنخ هایی از شروع کار است و برای شرایط خاص باید کد دقیق تر و بابازدهی بالاتر جایگزین شود.
موفق باشید.
shadmehrshadow1
13-07-2013, 11:22
دکمه تشکر کافی نبود.
خیلی ممنون :n16:
shadmehrshadow1
14-07-2013, 15:05
سلام. ببخشید دوباره مزاحم شدم. راستش من این کد رو برای پروژه میخواستم که از نوع ٌWPF نیست .
و یکی دوتا از خط های کلاس رو خطا داره . نمیدونم به خاطر همین هست که پروژه من WPF نیست یا از جای دیگری هست.
برای مثال در کلاس SearchEngine در خط :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خطای زیر وجود داره :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و یا در کلاس Table در خط :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
خطای زیر وجود داره :
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و اینکه منظور از CSMain در این پروژه چیه؟
ممنون میشم راهنمایی بفرمایید.
سلام
برای استفاده از ConfigurationManager باید کتابخانه System.Configuration.dll را به پروزه تان Reference کنید.
(منو Project>Add Reference)
این کتابخانه در انواع پروزه های دات نتی مانند WinForm, WPF, ASP.Net و... کاربرد دارد و ارتباط ساده ای را با فایل پیکربندی app.config (یا web.config در وب) ممکن میسازند.
CSMain یک نام دلخواه و مخفف ConnectionStringMain است و ارجاع به مدخلی در app.config دارد که رشته اتصال دیتابیس در ان قرار دارد.
در واقع در پروژهای برنامه نویسی ما ConnectionString را مستقیم در کد درج نمیکنیم تا با تغییر IP,DB,User,Pass نیازی به تغییر کد و کامپایل مجدد نباشد.
بجایش میتوان ConnectionString را در app.config یا web.config پروژه و در بخش configuration\connectionStrings\add تعبیه کنید.
=====
کلاس KeyAttribute هم در کتابخانه System.ComponentModel.DataAnnotations.dll تعریف شده که باید به پروژه تان Reference کنید.
(منو Project>Add Reference)
=====
در کل برای صحت کارکرد این کد (در یک حالت Copy و Paste کامل) باید کتابخانه های زیر در پروژه تان Reference باشند.
System.Data.dll
System.Data.Entity.dll
System.ComponentModel.DataAnnotations.dll
System.Configuration.dll
EntityFramework.dll
EntityFramework.SqlServer.dll
(که دو مورد آخری را میتوانید در پوشه Packages در بسته دانلود شده پیداکنید)
=====
در یک شرایط غیر Copy و Paste کامل، میتوان گفت در واقع اصل کار انجام شده در فایل SearchEngine.cs/SearchEngine.vb است که در تمام پلتفرم های موجود دات نت و حتی بدون Reference اضافه ای کار خواهد کرد.
در واقع جواب سوال شما فقط فایل فوق است و بقیه پروژه ارزش خاصی ندارد و فقط یک سمپل بسیار ساده ای از چگونگی استفاده از فایل مذکور است.
بقیه پروژه برای ان است که بتوانید خروجی کارکرد فایل فوق را مشاهده کنید و ببینید که کد الکی و سرکاری نیست!
موفق باشید.
shadmehrshadow1
15-07-2013, 12:32
ممنون :n16:
یه راهنمایی هم در این مورد و خطا می کنید؟ و این قسمت مربوط چی میشه؟
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سلام
گرچه فایل SearchEngine نیاز به ارجاع خواسی ندارد ولی برای بقیه پروژه از Linq و Framework4 و برای خواندن اطلاعات از EntityFramework استفاده شده.
شما باید نسخه دات نت پروژه تان را یه 4 تغییر دهید و دستورات Imports را هم اضافه کنید.
متغییرهای عمومی تعریف شده مانند m_Adapter را هم فراموش نکنید...
DG و IsEnable و Dispacher هم که مربوط به اجزای UI در WPF هستند ...
اصلاً میتوانید قسمت مربوط به چندریسمانی AsyncLoad را هذف کنید...
shadmehrshadow1
27-07-2013, 14:41
ممنون :n16:
یک سوال دیگه داشتم.
چون من توی جدولم از جوین استفاده میکنم و مقدار عددی بیشتر توی جدول هست. برای مثال دو تا از فیلد های جدول حاوی عدد 5 هستند. میخوام ببینم چه جوری میشه برای جست و جو مقدار های جست و جو رو به طور جدا وارد کرد.
برای مثال اگه عدد 5 رو وارد کنیم معلوم نیست که ما کدوم فیلد رو برای عدد 5 جست و جو کردیم.
تو این روشی که توی این پروژه هست تمام کلمات درون یک تکت باکس نوشته میشه و اون کلمات در تمام فیلدهای جدول جست و جو میشه.
چه طور میشه چند تا تکست باکس گذاشت و معلوم کرد که مثلا این مقدار تکس باکس اول برای فیلد مثلا اسم هست و مقدار جست و جویی تکست باکس دوم برای فیلد نام خانوادگی هست.
ممنون. :n12:
سلام
میخوام ببینم چه جوری میشه برای جست و جو مقدار های جست و جو رو به طور جدا وارد کرد.
فرق خاصی نمیکند، تازه از یک زاویه نگاهی ساده تر هم میشود، چون مقدار هر فیلدی مشخص میشود.
در یک شرایط خیلی معمولی شم میتوانید برای هر فیلد دیتابیس یک کنترلر در GUI برنامه هم مستقر کنید و بعد از یک شرط WHERE ساده روی مقادیر استفاده کنید...
ضمن اینه که در همچین شرایطی دیگر خیلی بحث rate دادن و مرتب شدن خروجی مطرح نمیشود و همان WHERE ساده مناسب تر است.
چرا بحث مرتب سازی خروجی مطرح نمیشود؟؟؟
چون طبق عرف معمول برنامه های موجود وقتی شما چند فیلد را با هم وارد میکنید کاربر انتظار دارد بین این شروط AND انجام شود...
اگر من در برنامه ای جستجو کنم ...
"نام افرادی که علی هستند"
یک خروجی به من نشان دهد...
انتظار دارم اگر فیلدهای "متأهل بودن" و "فرزند داشتن" و "سن بالای 40 سال" را وارد کنم، این خروجی کمتر و خاص تر و کوچک تر شود نه اینکه با وارد کردن هر فیلد جدید بجای کوچک شدن سطرهای یافته شده، مدام سطرها بیشتر و بیشتر شوند...گ
یعنی کاربر بیشتر انتظار AND روی تمام فیلدهایی دارد که به روشنی داده و با یک WHERE ساده قابل پیاده سازی است و در این شرایط مرتب سازی خروجی هم خیلی معنی ندارد چون همه سطرهای خروجی دارای همه شروط تایین شده بوده اند.
مثلاً همه سطرها "علی و متأهل و فرزنددار و 40 سال" را داشتند، پس دیگر مرتب سازی معنی خاصی ندارد.
((
بیشتر موارد مرتب سازی خروجی جستجو بر اساس نزدیکی به مورد جستجو (نه جدید بودن و پربازدید و...) در شرایط جستجو در اسناد متنی رخ میدهد.
))
=====
حالا دقیقاً 1) رویکرد و الگوریتم شما چیست؟ و 2) کجایش را مشکل دارید؟
شب خوش
shadmehrshadow1
30-07-2013, 12:42
حالا دقیقاً 1) رویکرد و الگوریتم شما چیست؟ و 2) کجایش را مشکل دارید؟
سلام.
من میخواستم ببینم کدوم قسمت رو باید تغییر بدم تا بتونم فیلد های جست و جوی متفاوت رو تعیین کنم همونجور که خودتون توی قسمت با where توضیح دادین.
راه WHERE مناسب است اما برای من rate بندی خیلی مهم است. فکر نکتم با استفاده از دستور WHERE و AND بشه رتبه بندی کردی.
من برای این میگم که به صورت جدا بشه مقادیر رو وارد کرد که توی جدولم مقادیر عددی دارم و ممکنه دوتا از فیلد های جدول دارای مقدار 5 باشه و اگه عدد 5 وارد بشه معلوم نمیشه که ما عدد 5 رو برای جست و جو در کدام فیلد وارد کردیم.
برای مثال وقتی وارد می کنیم : " علی 20 متاهل دانشجو " . این عدد 20 میتونه هم توی فیلد سن جست و جو بشه و یا برای مثال سابقه کار.
اگر از دستور WHERE استفاده کنیم و وارد کنیم "علی 20 متاهل دانشجو" تمام رکورد هایی که دقیقا به این شکل هستند رو نشون میده و رکورد هایی که به صورت " علی 30 مجرد دانشجو" هستند رو نشون نمیده . البته با استفاده از AND .
رتبه بندی رو حتما احتیاج دارم.
ممنون
سلام
ممکنه دوتا از فیلد های جدول دارای مقدار 5 باشه و اگه عدد 5 وارد بشه معلوم نمیشه که ما عدد 5 رو برای جست و جو در کدام فیلد وارد کردیم
باورکنید در عمل و بسته به پاره ای شرایط میتواند اینقدرها هم مهم نباشد!
این نوعی جستجوی پیشرفته است که همه جارا دنبال خواسته کاربر میگردد.
مانند موتور سرچ های اینترنتی یک یک متن کیگیرند و هرکجا را که بتوانند برای یافتن ان جستجو میکنند، حالا میخواهد Header باشد یا متن بدنه یا متن داخل یک فایل text... موتور سرچ همه جا را میگردد تا خواسته کاربرش را پیدا کند و میبینید که بیشتر کاربرها هم با این شیوه راحت هستند تا اینکه بخواهند...
البته در آخر بستگی دارد به نوع برنامه و حیطه ای که برنامه در ان عمل میکند و صد البته بهرحال برنامه شماست!
=====
در نهایت راه حل منطقی آن میشود که برای فیلد های عددی از همان WHERE و AND استفاده کنید (چون فیلدهای عددی خیلی بحث rate بندی را ندارد، یا ععدشان عددی کعه کاربر وارد کرده هست یا نیست) ...
میمااند فیلدهای متنی که در آنها rate بندی معانی متددی میتواند داشته باشد.
که چون دیگر فیلدهایتان و مقادیرتان تفکیک شده و مشخص شدند، بهترین و سریع ترین راه استفاده از FTS و توابعی مانند FREETEXTTABLE برای ترتیب بندی خروجی است.
در واقع SQL شما WHERE برای فیلدهای عددی خواهد داشت و JOIN و ORDER BY به FREETEXTTABLE برای فیلدهای متنی...
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
صرفاً برای تکمیل بحث و انکه اصلاحیه آن کد برای این شرایط را هم داشته باشید، میتوان کد مرکزی را که قبلاً دادم را چنین ویرایش کرد...
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد فوق آزمایش نشده ولی مشکل خاصی نباید داشته باشد.
این کدهم مانند توضیحات قبل، فرض کرده با جداکردن فیلدها دیگر نمیخواهید فیلدهای عددی را بدین شیوه جستجو کنید و فقط رتبه بندی را روی فیلدهای متنی انجام میدهد.
(اول و مهم تر از همه بدلیل سرعت و دوم آنکه اصولاً با جداشدن فیلدها دیگر منطقاً فرق خاصی ندارد اینجا جستجو انجام شود یا نه...)
و با شرایط جدید فعلی که مطرح کردید از نظر سرعت و بازدهی کلاً پیشنهاد نمیکند.
در عمل باید از همان FTS خود SqlServer استفاده کنید.
موفق باشید.
shadmehrshadow1
07-08-2013, 12:10
سلام. بازم ممنون از وقتی که میذارید.
میشه این کد رو روی چنین جدولی پیاده کنید : name,family,age,tel,vaziat tahol
که توی این جدول وضعیت تاهل به صورت 0 و 1 ثبت میشه.
این اطلاعات رو هم توش قرار بدید:
علی ، زند ، 20 ، 0911346 ، 0
محسن ، زند ، 21 ، 0911347 ، 0
علی ، حمیدی ، 20 ، 0911345 ، 1
و ما چنین چیزی رو جست و جو کنید :
محسن ، حمیدی ، 20 ، 0911345 ، 0
در اون صورت نتیجه خروجی باید به این ترتیب باشه :
علی ، حمیدی ، 20 ، 0911345 ، 0 | 4 شباهت
علی ، زند ، 20 ، 0911346 ، 0 | 2 شباهت
محسن ، زند ، 21 ، 0911347 ، 1 | 1 شباهت
ولی فکر نکنم چنین خروجی رو به ترتیب به ما بده.
ببخشید که جسارت کردم.
کد اصلاح شده
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
اگر توانستید کد را چنان اصلاح کنید که مقایسه فیلد های عددی، عددی انجام شود.
موفق باشید.
zpakmehr
23-02-2014, 19:10
:n05::n24::n25::n21::n16::n12::n14::n11:
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.