نه متاسفانه همین الان از دریا امدم و خسته هستم فردا سعی میکنم عکس هم بذارم ولی نه فقط برای همین بکاپ خطا میده ایا اصلا روند کلی درست هست کد بالا برای اون حالت اول درست جواب میده ولی حالت دوم نه دیتابیس 2008اکسپرس هستش
Printable View
نه متاسفانه همین الان از دریا امدم و خسته هستم فردا سعی میکنم عکس هم بذارم ولی نه فقط برای همین بکاپ خطا میده ایا اصلا روند کلی درست هست کد بالا برای اون حالت اول درست جواب میده ولی حالت دوم نه دیتابیس 2008اکسپرس هستش
خسته نباشی.
اول تست کن ببین واقعا چنین sp رو با sqlexpress بهش دسترسی داری یا نه. برای این منظور با sqlexpress این select رو بزن و نتیجه sp های برگشتی رو بررسی کن ببینم اصلا اون sp وجود داره یا نه :
select * from DBAzmoon.information_schema.routines
where routine_type = 'PROCEDURE'
با سلام بله تمام استور پروسجورها رو برگشت داد ولی من اون رو از داخل منجمنت استدیو اجرا کردم این هم عکس خطا
ضمیمه 111427
ضمیمه 111428
ببینید وقتی به management studio ورود می کنید با چه server name ای ورود می کنید؟ (عکس رو بیین) :
ضمیمه 111444
در این عکس من دارم با sqlexpress ورود می کنم نه با server name اصلی برنامم.
طبیعی هست که اگر با server name اصلی ورود کنم لیست همه sp ها رو به من برگشت میده.
یا با express ورود کن و اون select رو اجرا کن یا کلا از کدنویسی استفاده کن :
sp :
create proc SelectAllStoredProcedure
AS
select * from DBAzmoon.information_schema.routines
where routine_type = 'PROCEDURE'
درون ویژوال :
SqlConnection con = new SqlConnection("server = .\\SQLEXPRESS;DataBase = DBAzmoon;Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("SelectAllStoredProcedure", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
dt = new DataTable();
da.Fill(dt);
GrdAllSp.DataSource = dt;
توجه داشته باش که این sp رو در express ایجاد کنی چراکه server شما در کانکشن استرینگ نسخه express هست که بایستی به این sp دسترسی داشته باشه تا بتونه اونو اجرا کنه.
با سلام منم دقیقا مثلا شما اجرا کردم ولی خطا میداد چطور برای بقیه spها خطا نداد بهم فقط برای همین خطا میده!!!!!!!
این هم عکس اگر امکانش هست شما نحوه پیاده سازی کد بکاپ رو سمت سی شارپ یه مثال ساده بزنین با فرض دیتابیس اکسپرس
ضمیمه 111460
ببینید فرقی نداره.
اکسپرس هم مثل نسخه کامل یک موتور (engin) هست با یکسری محدودیت ها.
قرار نیست کار خاصی کنیم یا اینکه کد جدیدی بنویسیم. کدها همون ها هستن فقط سرویس دهنده ما (server) تبدیل به sqlexpress شده. همین.
کد رو که قرار دادم براتون.
شما گفتید که با express میتونید بقیه sp ها رو اجرا کنید. حالا با همین اکسپرس لیست همه sp ها رو بگیرید (فرض کنید دارید یک sp مربوط به select رو اجرا می کنید). نتیجه رو ببینید آیا اون sp وجود داره یا نه.
من احساس میکنم شما اون sp مربوط به بک اپ رو به جمع sp هایی که در اکسپرس هست اضافه نکردید یا نام sp رو در نوشتن دقت نکردید!
من تا حالا چنین موردی رو نداشتم که همه sp ها رو بشناسه ولی یک sp رو نشناسه.
من کلا با بکاپ و ریستور با Sp مشکل دارم
متن خطا :
////////
---------------------------
---------------------------
User does not have permission to alter database 'DBAZMOON', the database does not exist, or the database is not in a state that allows access checks.
ALTER DATABASE statement failed.
The file 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON.mdf' cannot be overwritten. It is being used by database 'D:\MY AZMOON\MYAZMOON\MYAZMOON\BIN\DEBUG\DBAZMOON.MDF'.
File 'DBAZMOON' cannot be restored to 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON.mdf'. Use WITH MOVE to identify a valid location for the file.
The file 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON_log.ld f' cannot be overwritten. It is being used by database 'D:\MY AZMOON\MYAZMOON\MYAZMOON\BIN\DEBUG\DBAZMOON.MDF'.
File 'DBAZMOON_log' cannot be restored to 'D:\MY AZMOON\MYAZMOON\MYAZMOON\bin\Debug\DBAZMOON_log.ld f'. Use WITH MOVE to identify a valid location for the file.
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
RESTORE DATABASE is terminating abnormally.
User does not have permission to alter database 'DBAZMOON', the database does not exist, or the database is not in a state that allows access checks.
ALTER DATABASE statement failed.
---------------------------
OK
---------------------------
/////////
این کد sp ریستور
ALTER PROC RESTOREDB
@PATH NVARCHAR(400)
AS
ALTER DATABASE DBAZMOON SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE DBAZMOON FROM DISK=@PATH WITH REPLACE
ALTER DATABASE DBAZMOON SET ONLINE
RETURN
این هم کد سمت سی شارپ
try
{
SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\DBAZMOON.mdf;Integrated Security=True;User Instance=True");
SqlCommand cmd = new SqlCommand("RESTOREDB", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@PATH", path);
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
MessageBox.Show("restore Test ok");
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
و دیتابیس رو هم ضمیمه کردم
اگه امکان داره یه نمونه ساده بذارین که منم کدهای شما رو تست کنم
ممنون
من 2 حالت مختلف رو برای این خطا در نظر می گیرم. ابتدا احتمال اول رو مطرح میکنم اگر این مورد رو رعایت کردید بگید تا در مورد احتمال دوم هم صحبت کنیم.
الف) شما دیتابیس رو به SQL Express اضافه نکردید به همین خاطر هست که زمانیکه کانکشن استرینگ و server رو بر روی sqlexpress تنظیم می کنید خطای وجود نداشتن دیتابیس رو صادر میکنه.
ضمیمه 111575
اضافه کردن یک دیتابیس به SQL Express و مشاهده جدول (ها) (همان دیتابیسی که قصد بک آپ و ری استور را از آن داریم)
ضمیمه 111574
نمایی از پروسیجرهای Backup & Restore :
ضمیمه 111571
پیغام موفقیت آمیز بودن عملیات بک آپ با استفاده از کانکشن استرینگی که server آن SQLExpress می باشد :
ضمیمه 111572
آیا شما دیتابیس DBAzmoon رو به SQL Express وارد کردید؟
در زمان استفاده از کد زیر خطا نمایش داده می شود
((DataRowView)comgroup.SelectedItem)["id"]
خطای زیر نمایش داده می شود
علت خطا چیستنقل قول:
Unable to cast object of type 'myazmoon.TBLGROUP' to type 'System.Data.DataRowView'.
میشه سورس پروژه را هم بزارید
با سلام و تشکر از جناب ونیز 2088 بابت آموزش خوب و جواب های سریع و مناسبشون
امروز یکم وقت بیشتری داشتم و نشستم ببینم مشکل از کجاس
چون تعجب میکردم که چطور تمام sp ها اجرا میشدن ولی این یکی نه !!!!!!!!
تازه متوجه یک نکته شدم من کانکشن استرینگ از نوع اتچ خودکار بود یعنی اینطوری:
SqlCommand cmd = new SqlCommand();
string connection = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath +
"\\DBAZMOON.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
با این حالت تمام sp جز بکاپ و ریستور درست اجرا میشدن
وقتی کانکشن استرینگ اینو رو تبدیل به این کردم درست نمیشد
public SqlConnection con = new SqlConnection
(@"Data Source=.\SQLEXPRESS;Initial Catalog=DBAZMOON;Integrated Security=True");
بعد دیتابیس رو هم در سرور sql اتچ کردم درست شد ولی یک نکته داشت دیتابیس باید به صورت بقیه دیتابیس ها لیست میشد یعنی آدرس محل قرار گرفتنش تو لیست نمایش داده نمیشد هر وقت نشون میداد مثلا درایو d و پوشه فلان /...... درست نمیشد ولی وقتی که فقط اسمش بود(مسیرش ذکر نمیشد) درست شد و sp بکاپ و ریستور هم به درستی اجرا شدن !!!!حالا یک سوال مطرح میشه اگه بخوام کانکشن استرینگ رو به صورت اولی ست کنم که خودش اتچش کنه باید در sp چه تغییری بدم تا مثل بقیه اجرا بشه
ممنون
دلیل اینکه سورس رو نذاشتم این هست که برای دوستان مبتدی بسیار محتمل هست که به جای تایپ کدها دست به copy & paste بزنند. در این حالت محاله که شخصی بتونه مسلط بشه.
هدف این هست که دوستان بعد از مشاهده ویدئوها، با توجه به درکی که از کدها پیدا میکنن شخصا اقدام به تایپ کدها کنن چراکه زمانیکه یک دستور رو متوجه میشیم و بعد اونو در طول پروژه چندین بار تایپ می کنیم به اون کدها مسلط می شیم.
یکی از مواردی که شخصا بدم از اتچ خودکار میاد همین تغییر نام دادن دیتابیس بعد از اتچ کردن هست که در مواردی مثل Backup و Restore و کلا هر کوئری که در اون نام دیتابیس رو ذکر می کنید به مشکل بر میخورید. دلیلش رو در ادامه بصورت کامل توضیح میدم.
زمانیکه قصد استفاده از یک دیتابیس رو داریم در حقیقت داریم اون دیتابیس رو Use می کنیم (این کار در حالت عادی بصورت اتومات انجام میشه و نیازی به نوشتن کدی توسط کاربر نیست).
در شکل زیر sp مربوط به Backup رو قبل از اتج خودکار مشاهده می کنید. به خط اول اون خوب دقت کنید . همونطور که مشاهده می فرمایید نام دیتابیسی که use (استفاده) شده بصورت ساده و بدون ذکر مسیر هست.
ضمیمه 111631
همونطور که خودتون هم میدونید زماینکه یک دیتابیس رو بصورت اتچ خودکار در میاریم، بعد از اتچ شدن، نام دیتابیس به همراه مسیر کامل اون دیتابیس رو خواهیم داشت. نکته کلیدی همین جاست. در این حالت اولا : دیتابیسی که use میشه دیگه نام ساده دیتابیس نیست بلکه مسیر کامل به همراه نام دیتابیس با پسوند mdf خواهد بود. این کار بصورت اتوماتیک توسط sql انجام میشه و شما نیاز به انجام هیچ کاری ندارید.
ثانیا : هر جایی که در کوئری ها، قرار هست نام دیتابیس ذکر بشه دیگه نباید نام ساده دیتابیس رو ذکر کرد بلکه بایستی مسیر کامل + نام دیتابیس به همراه پسوند mdf رو درون یک قلاب ذکر کنید. عکس زیر رو با عکس قبلی مقایسه کنید. همونطور که در عکس هم ملاحظه می کنید در دستور backup مسیر کامل به همراه نام دیتابیس و پسوند فایل (mdf) درون قلاب قرار گرفته.
ضمیمه 111630
در نهایت در تصویر زیر می تونید نتیجه کار را مشاهده کنید :
ضمیمه 111629
حالا می تونیم براحتی درک کنیم چرا فقط در دستورات backup & restore این اتفاق می افته.(چون فقط درون این دو sp ما نام دیتابیس رو ذکر می کنیم که با توجه به توضیحاتی که عرض کردم نام دیتابیس بعد از اتچ خودکار تغییر میکنه).
برای حل این مشکل می تویند sp رو به گونه ای بنویسید که یک پارامتر دوم هم دریافت کنه که این پارامتر دوم همون مسیر کامل + نام دیتابیس به همراه پسوند خواهد بود.
با سلام مجدد و تشکر از پاسخ های کاملا فنی و مفیدتون
بله منم به این نکته رسیدم اصلا خود sql prompat این رو پیشنهاد میداد ولی باز یک سوال برام پیش اومد من به دلیل که شما شیوه sp رو پیشنهاد دادین و روش کارتون بر این مبنا بود دوست دارم تمام دستورات ام رو به ان صورت بنویسم ولی باز یک مشکل
دیتابیس رو باید رو یک سیستم دیگه اتچ کنید برای اولین بار چطور میتونم از sp اتچ استفاده کنم درحالیکه هنوز دیتابیسی در سرور ام اتچ نشده و نیست که بخواهم دستورات من رو اجرا کنه و اصلا یک جورایی من به sp خودم هنوز دسترسی ندارم باز باید به شیو سابق کامند تکس سمت سی شارپ رو بیارم؟؟؟
نه. نیازی به استفاده از commandtext نیست.
برای اولین بار میتونید یکی از sp های سبک پروژه تون رو در فرم لود اولین فرم اجرا کنید تا دیتابیس از طریق یکی از sp های پروژه خودتون اتچ بشه.
مثلا من یک sp به نام SelectAllRecord دارم. برای اولین بار با کد زیر و با استفاده از Stored Procedure ها ، دیتابیس رو اتچ میکنم.
SqlConnection con = new SqlConnection("server = .\\SQLEXPRESS; AttachDbFilename = |DataDirectory|\\DBTest33.mdf; Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("SelectAllRecord", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
DataTable dt = new DataTable();
da.Fill(dt);
با سلام مجدد خدمت استاد عزیز و خسته نباشید ایا مبحث جستجو درون دیتاگرید توی ویدیوها پیاده شده؟ {اگه فرم جستجو و تکست باکسها و نتیجه رو با سلکت رکورد موردنظر توی دیتاگرید (جهت نمایش یا ویرایش) و همچنین پرش به رکورد خاص اموزش بدین ممنون میشویم!! ( بدلیل مشغله زیاد نتونستم تمام ویدئوها رو ببینم. شرمنده)
با سلام و تشکر مجدد از آموزش های خوبتون در قسمت چهارهم sp که برای جوین جداول نوشتین رو اگر دقت کرده باشین سوالات رو به صورت نامرتب جوین میکرد و بهتر بود ORDER BY TBLGROUP.GROUPID رو بهش اضافه میکردین البته این نکته در ویدیو ها قبل گفته شده بود ولی خب بهتر بود در اینجا هم استفاده میشد
USE [DBAZMOON]
GO
/****** Object: StoredProcedure [dbo].[loaddgroupandQtxt] Script Date: 10/15/2013 00:00:38 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[loaddgroupandQtxt]
AS
SELECT GROUPNAME,TBLQUSETION.GROUPID ,QUSETIONTEXT,ANSWER,CASE1,CASE2,CASE3,CASE4 FROM TBLQUSETION
INNER JOIN TBLGROUP ON dbo.TBLQUSETION.GROUPID = TBLGROUP.GROUPID
ORDER BY dbo.TBLGROUP.GROUPID
RETURN
تا نتایج مرتبی رو داشته باشیم
یک سوال :
من سعی کردم که بانک رو 2005 sql تبدیل کنم ولی نتونستم هم اسکریپت گرفتم و از اکسپورت استفاده کردم ولی نتیجه جالب نشد sp ها به مقصد انتقال پیدا نمیکرد و روابط و کلید ها هم لحاظ نمیشد؟!!!
موفق باشین
سلام دوست من.
ابتدا جا داره یه تشکر از شما داشته باشم. قطعا اگه شما نبودید این تاپیک خاک میخورد.
وجود شما و سوالاتی که مطرح کردید و جواب هایی که داده شد باعث شد که این تاپیک قدری بتونه مفید باشه. شایدفردا ما نباشیم، باشد که در آینده کسانیکه این تاپیک رو می بینن مطلب مفیدی گیرشون بیاد.
حرفتون صحیح هست.
تاکید اصلی بر روی کلیت کار هست و معمولا کمتر به حواشی پرداختم وگرنه خیلی می شد مانور داد. همونطور که خودتون هم دیدید هر مطلبی رو که دست گذاشتم روش حداقل 30 تا 45 دقیقه وقت گرفت!.
بله با order by گرفتن از GroupID یا GroupName میشد کوئری ها رو مرتب کرد و نتیجه هم زیباتر خواهد شد.
مراحل رو به همراه شکل ها توضیح میدم تا مشکلی پیش نیاد :نقل قول:
یک سوال :
من سعی کردم که بانک رو 2005 sql تبدیل کنم ولی نتونستم هم اسکریپت گرفتم و از اکسپورت استفاده کردم ولی نتیجه جالب نشد sp ها به مقصد انتقال پیدا نمیکرد و روابط و کلید ها هم لحاظ نمیشد؟!!!
موفق باشین
در محیط management studio روی دیتابیس مورد نظر کلیک راست کنید و از گزینه Task، گزینه Generate Scripts رو انتخاب کنید :
ضمیمه 111890
اگر پنجره ای ظاهر شد کلید Next رو بزنید تا به پنجره زیر برسید. در این پنجره، کلیه گزینه ها رو تیک بزنید تا جداول و Stored Procedure های شما به اسکریپت اضافه بشن.
ضمیمه 111889
در گام بعدی، ابتدا دکمه Advanced رو کلیک کنید.
ضمیمه 111892
حال در پنجره باز شده، گزینه های کلیدی زیر رو لحاظ کنید :
الف) Script for Server Version : در اینجا بایستی ورژن SQL Server سیستم مقصد رو انتخاب کنید. من اسکریپت رو از SQL Server 2012 تهیه و نسخه مقصد من SQL Server 2008 R2 هست.
ب) Types of data to scrip : اگر مایلید داده های جداول شما هم به سیستم مقصد منتقل بشه این گزینه رو بر روی Schema and data تنطیم کنید.
توجه : گزینه های Script Foreign Keys و Script Primary Keys بصورت پیش فرض True هستن. اگر نبودن اونها رو بر روی True قرار بدید.
ضمیمه 111891
بر روی Next کلیک و در انتها دکمه Finish رو کلیک کنید تا Script شما تهیه بشه.
ضمیمه 111888
در سیتم مقصد یک دیتابیس خالی همنام با دیتابیسی که از اون script تهیه کردید رو ایجاد کنید.
در محیط Management Studio (یا با کدنویسی) از مسیر File \ Open \ File فایل اسکریپتی که ساختید رو بهش بدید و اونو اجرا کنید.
سعی کردم مراحل رو خیلی ساده توضیح بدم که دوستانی که آشنایی چندانی با مطالب ندارند هم بتونن استفاده کنن.
موفق باشید.
با سلام مجدد خدمت دوست و استاد عزیز آقای ونیز2008نقل قول:
سلام دوست من.
ابتدا جا داره یه تشکر از شما داشته باشم. قطعا اگه شما نبودید این تاپیک خاک میخورد.
وجود شما و سوالاتی که مطرح کردید و جواب هایی که داده شد باعث شد که این تاپیک قدری بتونه مفید باشه. شایدفردا ما نباشیم، باشد که در آینده کسانیکه این تاپیک رو می بینن مطلب مفیدی گیرشون بیاد.
شما اگر آمار بازدید از این تایپک رو ببینید قطعا با من موافق خواهید بود که این تایپیک موفق بوده(2388 تا این لحظه) !!شما اگر به سوالاتی که در انجمن مطرح میشود دقت کنین میبینین که این دوره آموزشی چقدر میتونست برای افراد مبتدی و حتی متوسط مفید باشه ولی مشکل اساسی جایی دیگه هست ما در این فرم بارها با درخواست هایی مواجه بودیم که طرف عنوان میکنه من وقت دیدن فیلم رو نداشتم لطفا این رو جواب بدین و ده دقیقه بعد باز یک سوال و یا استادمون گفته و اخیرا لطفا این رو برامو انجام بدین و یا برام میل کنین وect .........باور کنین بعضی از دوستان قدری حاضر نیستین خودشون رو به زحمت بندازن اونم برای چیزی که بهش نیاز دارن!!!برای من که سعادتی بود که با شما گام به گام در این پروژه پیش برم و از دانش شما استفاده کنم امیدوارم هرجا هستین موفق باشین
موقع ثبت گروه ارور میده نمیتونه به sql وصل بشه
باید چیکار کنم؟
نمیدونم شنیدید یا نه؟"الحمد لله رو یکم زود گفتم"در نماز جمعه پس از فوت امام خمینی(Quote:"الحمد لله که امام مرد و نه این شد نه آن";یعنی نه روسها آمدند و نه غربی ها)
شما هم "فقظ" رو یک مقدار دیر گفتید.
نسخه enterprise فقط روی ویندوز سرور نصب میشه.
فقط نسخه enterprise روی ویندوزسرور نصب میشه.
سلام.
نام سرور رو اشتباه وارد کردید به همین خاطر برنامه قادر به ارتباط برقرار کردن با دیتابیس نیست.
برای اینکه نام سرور(ها) رو بیرون بکشید یه لیست باکس روی فرم بذارید و کد زیر رو در فرم لود قرار بدید :
List<string> listOfInstances = (Microsoft.Win32.Registry.LocalMachine.OpenSubKey(
@"SOFTWARE\Microsoft\Microsoft SQL Server").GetValue("InstalledInstances", "SQLSERVER IS NOT INSTALLED") as string[]).ToList();
listBox1.Items.AddRange(listOfInstances.ToArray()) ;
دقت کنید که پروژه رو در حالت AnyCpu اجرا کنید. برای این کار در پنجره Solution Explorer بر روی روت پروژه کلیک راست و گزینه properties رو بزنید. بقیش هم که در شکل مشخص هست.
این سرور رو خودتون تایپ می کنید؟ یا موقع بالا اومدن sql خودش وجود داره؟!!
به نظر میرسه جایی رو دارید اشتباه می کنید.
در کانکشن استرینگ از (local) و یا نقطه . استفاده کنید، ببینید مشکلتون حل میشه :
server = (local); ..........
یا
server = . ; ..........
زمانیکه شما در زمان نصب sql یک Instance دلخواه وارد می کنید و بعد با همون instance اقدام به ساخت دیتابیس می کنید بایستی از همون instance استفاده کنید. واسه همین در آموزش ها چنین کانکشن استرینگی رو می بینید :
SqlConnection con = new SqlConnection("server = .\\md2008;DataBase = DBAzmoon;Integrated Security = True");
منظور از دات (نقطه . ) یعنی همین کامپیوتر جاری. یعنی من به جای اینکه نام کامپیوتر خودم (veniz-pc) رو وارد کنم به جای اون از نقطه استفاده کردم. پس در سیستم خودم چه کانکشن بالا رو بنویسم چه کانکشن زیر رو بنویسم جفتشون یک معنا و مفهوم رو دارند و به درستی کار می کنند :
SqlConnection con = new SqlConnection("server = veniz-pc\\md2012 ;DataBase = DBTest1;Integrated Security = True");
در کانکشن های بالا بخش مربوط به server مربوط به کانکشن های شبکه هست که در واقع شامل دو بخش (ابتدا نام کامپیوتر یا IP سیستم جاری هست و بعد از بک اسلش هم باید نام اینستنس (InstanceName) رو وارد کنید).
در مورد چنین کانکشن استرینگ هایی در ویدئوی 16 (آخرین ویدئو) کامل صحبت میشه.
اما زمانیکه برای sql خودتون یک instance تعیین نمی کنید و می زارید بصورت پیش فرض باشه و SQL شما بر روی همین سیستم جاری وجود داره می تونید از (local) که اشاره به سیستم جاری داره استفاده کنید :
SqlConnection con = new SqlConnection("server = (local) ;DataBase = DBTest1;Integrated Security = True");
در کانکشن قبلی که مربوط به کانکشن های شبکه هست این احتمال وجود داره که server بر روی سیستم دیگه ای باشه به همین خاطر برای شناسایی اون از نام کامپیوتر (یا IP) و InstanceName استفاده میشه.
من قبلا نسخه enterprise ه 2000 رو روی xp داشتم.عجب چیز زشتی هم بود الان که فکرش رو میکنم.
در ضمن اون فایلهای کوچکی که قولش رو داده بودم هم احتمالا فردا شب آماده میشه.از چند ساعت قبل از اون موقعی که بهتون PM دادم تا جند دقیقه پیش توی راه بودم.واقعا دیگه چشمام نمیبینه.میترسم خراب کنم.
فکر میکنم حرفت درست باشه! ولی اینها رو ببین. به نظرت کی درست میگه؟ :
https://barnamenevis.org/showthread.p...ght=Enterprise
حالا اینو ببین :
http://stackoverflow.com/questions/1...006823#1006823
ممنونم.نقل قول:
در ضمن اون فایلهای کوچکی که قولش رو داده بودم هم احتمالا فردا شب آماده میشه.از چند ساعت قبل از اون موقعی که بهتون PM دادم تا جند دقیقه پیش توی راه بودم.واقعا دیگه چشمام نمیبینه.میترسم خراب کنم.
تشکر از زحمتی که میکشی.
با سلام خدمت آقای ونیز عزیز که انصافا با این ویدئوها، کمک بزرگی به خیلی از افرادی که تشنه یادگیری هستن- من جمله خودم- کردین.در مورد این حرفتون،من فکر می کنم که اتفاقا این یه نکته مثبته !!! چرا ؟ به این دلیل که شما اینقدر خوب و روان توضیح دادین که به نظر من افرادی که تازه شروع کردن، خیلی سوال خاصی براشون پیش نمیاد چون شما جواب ها رو هم در ویدئو ها دادین. من 2 3 قسمت رو بیشتر نتونستم ببینم ولی واقعا باید بهت خسته نباشید بگم، مطمئن باشین اون تاثیر و هدفی که مد نظر شما بوده، هر روز داره بیشتر تحقق پیدا می کنه... ضمنا این نکته رو هم بگم که چون شما ویدئوهارو برای قشر تازه کار در نظر گرفتین، خب خیلی جای تعجب نداره که اگر هم کسی به مشکلی بر بخوره، خیلی زود می تونه با یه جستجوی کوچیک، مشکلش رو برطرف کنه.
مخلص کلام اینکه،ارزش کاری که انجام دادین و وقتی که گذاشتین، چه برای ضبط ویدئو ها ، چه برای آپلود کردنشون، بسیار بالاست، و حیفه که بخواد با تعداد سوال های پرسیده شده و... سنجیده بشه.
به هر حال، امیدوارم در آینده بتونیم ویدئو های بیشتر و تخصصی تری از شما ببینیم، در اینصورت مطمئن باشین که یکی از افرادی که هر روز و هر ساعت سوال خواهد کرد، خود من هستم!!!
با تشکر، موفق باشید.
خیلی وقت هست که کانکشن استرینگ ننوشتم ولی زمان ما قبل و بعد از مساوی فاصله نمیزاشتن.شاید تغییر کرده یا من یادم نیست.فکر میکنم ارزش امتحان کردن داره.
سلام.
یکی از دلایل اصلی برای تولید این آموزش این بود که سوالات تکراری خیلی زیادی می دیدم و همچنان می بینم. خیلی از سوالاتی که روزانه در سطح تالار مطرح میشه در مجموعه وجود داره که اگر دوستان ویدئوها رو به دقت مشاهده کنن میتونه بخشی از سوالاتشون رو پاسخگو باشه ولی همچنان سوالات تکراری به وفور پیدا میشه.
قبلا کانکشن رو به شکل های مختلف تست کرده بودم (از نظر فاصله قبل و بعد از مساوی، حروف کوچیک و بزرگ، استفاده از DataSource یا Server ، یا مثلا DataBase یا Initial Catalog و ...).
از لحاظ فاصله قبل و بعد مساوی خللی در کار ایجاد نمیکنه،یعنی جفت این کانکشن ها به درستی کار می کنند :
SqlConnection con = new SqlConnection("server=.\\md2012;DataBase=DBTest1;I ntegrated Security=True");
یا
SqlConnection con = new SqlConnection("server = .\\md2012;DataBase = DBTest1;Integrated Security = True");
اگر منظورتون چیز دیگه ای هست،لطفا ذکر کنید.
بین حروف کوچیک و بزرگ تفاوتی وجود نداره و اینکه شخصا ترجیح میدم که به جای استفاده از کلمات Data Source و Initial Catalog از کلمات Server و DataBase استفاده کنم چراکه مفهوم کانکشن رو بهتر میشه با این کلمات برای افراد مبتدی توضیح داد و فهم اون به نظرم راحت تر هست.
با سلام و تشکر از فیلم آموزشی :تشویق::تشویق::تشویق::تشویق:: شویق::تشویق::تشویق:
در فیلم قسمت 4 در گرید ویو یک فیلد visble را true گذاشتیم و در زمانی که رکود انتخاب می شد سوال و جوابهای آن رکورد در تکس باکسها نمایش داده می شد.
در گرید ویوی که گذاشته ام visble دو تا فیلدها را true گذاشته ام چگونه می شود با کلیک بر روی هر خانه فیلد دیگر فیلدهای آن را در تکس باکس نمایش دهیم (در ویدئو رکورد انتخاب می کردیم تا اطلاعات آن فیلد به ما نمایش دهد )
سلام دوست عزیز.
احتمالا منظورتون اینه که visible یکسری از ستون ها رو false کردیم تا نمایش داده نشن!.
برای اینکه روی یک سلول (خانه) از گرید کلیک کنید و اطلاعات رو نمایش بدید باید از رویدادهایی مثل CellMouseClick و ... استفاده کنید که مربوط به کلیک کاربر در یک سلول میشن.
در این باره قبلا در سایت خیلی بحث شده که می تونید کدها و رویدادهای مورد نیازتون رو پیدا کنید.
موفق باشید.
چرا وقتی میخوایم از طریق sqlserver express ری استور کنیم خطا میده؟! :افسرده:
موقع بک آپ مشکل نداره موقع ری استور خطا میده!
User does not have permission to alter database 'MyGym', or the database does not exist.
ALTER DATABASE statement failed.
The file 'D:\MyFiles\MyGym\MyGym\MyGym\bin\Debug\Database\M yGym.mdf' cannot be overwritten. It is being used by database 'D:\MYFILES\MYGYM\MYGYM\MYGYM\BIN\DEBUG\DATABASE\M YGYM.MDF'.
برای اینکه فایل مقصدی که برای restore انتخاب کردید وجود داره و توسط یک دیتابیس دیگه استفاده میشه.
یه سوال از استاد ونیز دارم
چطوری میتونم برنامه ای که نوشتم مسیر کانکشن در یک فایل متنی باشه و کاربر بتونه خودش ای پی اون سیستم رو بده و برنامه متصل بشه به بانک
همونطور که دوستم هم گفتن نمیشه همزمان از یک دیتابیس در دو جای متفاوت استفاده کرد و همزمان که توسط برنامه دیگه ای داره استفاده میشه با دیگری بر روی اون دیتابیس تغییرات اعمال کرد. باید قبل از ری استور، تمامی کانکشن های متصل به اون دیتابیس قطع بشه (هیچ استفاده از اون نشه) و بعد از offline کردن اون اقدام به ری استور کنید.
فکر کنم اگر منظور و هدفتون رو کامل توضیح بدید بهتر بتونم راهنمایی کنم.
ip سیستم سرور رو میتونی با قرار دادن یک فرم در پروژه و وارد کردن ip توسط کاربر دریافت کنید و بعد اونو در کانکشن استرینگ اعمال کنید و در صورت صحت اونو یک جایی ذخیره کنید و از اون به بعد از اون کانکشن ذخیره شده استفاده کنید.شما میتونی ip های فعال شبکه رو هم خودتون با کدنویسی بدست بیارید و بعد در یک حلقه، (در یک ساختار try و catch) اقدام به وارد کردن تک تک ip ها کنید تا متوجه بشید کدوم ip مربوط به سرور هست. اینطوری دیگه نیازی به گذاشتن فرم و دریافت ip هم از کاربر نیست. این تاپیک ها رو ببینید :
http://stackoverflow.com/questions/1...s-in-a-network
http://stackoverflow.com/questions/9...t-ipv4-address
من میخوام برنامه رو به کاربر بدم و خودش نصب کنه بدون نیاز من
نظر شما در مورد این کار چیه از چه برنامه ای برای اینستال کردن استفاده کنم و چگونه برنامه ای که بصورت شبکه هست رو کاربر خودش نصب کنه؟
در شبکه بودن نرم افزار بحث یه کم متفاوت هست نسبت به تک کاربره بودن نرم افزار.
چون در شبکه بودن نسخه کامل sql رو نصب میکنن که معمولا حجم زیادی داره و نیاز به یکسری تنظیمات داره که باید حتما برنامه نویس در محل حاضر باشه (یا از راه دور اقدام به نصب کنه) ولی در یک برنامه تک کاربره برای شما sql express کفایت خواهد کرد(بدون نیاز به تنظیمات خاصی).
من گمان میکنم منظور شما نرم افزار تک کاربره هست نه نرم افزاری که قراره در چند سیستم بصورت همزمان کار کنه.
خیلی مهم نیست که با چه نرم افزاری اقدام به تهیه setup کنید. مهم اینه که پیش نیازهایی رو که نیاز هست روی سیستم مشتری نصب بشه وارد یک فایل setup کنید.می تونید با setup خود ویژوال یک فایل ست آپ بسازید. چیزی که مهمه کدنویسی شما برای اتچ خودکار دیتابیس هست.
درباره اتچ کردن خودکار برنامه تاپیک های خیلی زیادی ایجاد شده که توصیه میکنم با جستجو کردن به جواب مورد نظرتون برسید.
موفق باشید.
خب الان چاره چیه؟! چطوری کانکشن ها رو قطع کنم؟ بعدشم شما هم همین کار رو کردین ولی همچین مشکلی نداشتین که!!:متفکر:نقل قول:
همونطور که دوستم هم گفتن نمیشه همزمان از یک دیتابیس در دو جای متفاوت استفاده کرد و همزمان که توسط برنامه دیگه ای داره استفاده میشه با دیگری بر روی اون دیتابیس تغییرات اعمال کرد. باید قبل از ری استور، تمامی کانکشن های متصل به اون دیتابیس قطع بشه (هیچ استفاده از اون نشه) و بعد از offline کردن اون اقدام به ری استور کنید.
مسیر restore رو تغییر بدید.
متوجه منظورتون نمیشم.نقل قول:
مسیر restore رو تغییر بدید.
من میام یه دیتابیس رو که یه جایی ذخیره شده backup میگیرم و بعد میام restore میکنمش.
بعدش که بخوام دوباره برنامه رو اجرا کنم حب همون دیتابیس اول که استفاده میشد استفاده میشه دیگه. من که connectionstring رو تغییر نمیدم. واقعاً گیج شدم من :ناراحت:
ممنون.
فهمیدم مشکل از کجاست. باید توی connection string اسم دیتابیس رو میذاشتم :چشمک:
یه مشکلی در رابطه با قسمت ثبت سوالات پیش اومده!!!!!
من کامله کامل با توجه به فیلم ها قسمت ثبت سوالات رو طراحی کردم اما موقع ثبت یک سوال درون یک گروه امتحانی ، سوال به QuestionID بعدی وارد میشه
private void cmbGroup_SelectedIndexChanged(object sender, EventArgs e)
{
SqlDataAdapter da = new SqlDataAdapter("SelectAllQuestionByGroupID", con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddWithValue("@groupID ", ((DataRowView)cmbGroup.SelectedItem)["GroupID"]);
DataTable dt = new DataTable();
da.Fill(dt);
grdQuestion.DataSource = dt;
}
مثلا من گروه اقتصاد با شماره QuestionID = 2 رو انتخاب میکنم و سوال رو ثبت میکنم اما وقتی داخل sql میرم میبینم که سوال برای گروه با QuestionID = 3 ثبت شده!!!
-------------------------------------------------------
یه پیشنهادم دارم اینکه سورس پروژه رو واسه دانلود قرار بدین
خیلی خیلی متشکریم:)
سلام با تشکر از آموزشتون که خیلی خوب هست .
شما از کانکشن استرینگ و sql در آموزشتون استفاده کردید و سوال اینه که من فقط روش orm و Linq را بلدم و دانشجو هستم و با این روش پروژه هام را انجام میدم و آیا برای آینده که میخوام وارد بازار کار بشم نیاز به یادگیری کار با کانکشن استرینگ و sql هست ؟ میتونم فقط با همین روش کار کنم ؟
همه ی مطالبی که در مورد همه ی connection string ها وجود داره روی هم ۵۰ صفحه نمیشه.(http://www.connectionstrings.com/)
و یکی از اجزا اصلی هر برنامه دیتابیسی هست.مثل اینکه شما بگید من بدون ظرف غذا میخورم.شاید شما اینطوری بگید و هر کسی نگاه کنه همین رو بگه.ولی بلاخره غذاتون رو دارید از یک جایی میخورید که اسمش میشه ظرف.
در روشهایی هم که گفتید بلاخره ارتباط با دیتابیس وجود داره و راهی برای این کار نیست جز connection string
(بعضی دیتابیسها طراحی متفاوتی دارند و نیاز به connection string ندارند و طبق معمول چون چیز متفاوتی هستند در ایران استفاده نمیشن.)
sp که گذاشتید مربوط به نمایش سوالات یک گروه امتحانی هست ولی سوالتون در ارتباط با ثبت یک سوال هست.
در زمان ثبت برای هر سوال ما GroupID رو ثبت می کنیم تا مشخص بشه سوال درج شده متعلق به کدوم گروه هست.
در مورد QuestionID که گفتید، این فیلد اصلا مشخص کننده گروه خاصی نیست.
من فکر میکنم بهتره یکبار دیگه ویدئوهای مورد نیازتون رو از اول و با دقت بیشتری نگاه کنید.
سلام دوست عزیز.
در تکمیل صبحت های جناب FastCode این مطلب رو بگم که در LINQ و EF هم کانکشن استرینگ وجود داره ولی کاربر نیازی به درگیر شدن با این مفاهیم رو نداره و در واقع در پس زمینه این موارد ست میشه.
شما اگر مفاهیم ADO رو خوب درک کنید در LINQ و Entity Framework هم با مشکل مفاهیم روبرو نخواهید شد چراکه LINQ و EF هم در پس زمینه همون کارهای ADO رو دارند ولی کاربر دیگه درگیر این مفاهیم نمیشه.
بدون شک باید به سمت LINQ و EF حرکت کرد و بازارکار هم روز به روز طلب بیشتری رو برای این تکنولوژی ها میکنه.
در مورد sql هم همونطور که خودتون مستحضر هستید زبان LINQ شما رو بی نیاز به دونستن دستورات خاص sql میکنه ولی همین دستورات در نهایت باز هم به زبان قابل فهم اون دیتابیس (sql، mysql ، oracle یا ...) تبدیل میشه (بدون دخالت کاربر) ولی به شخصه اعتقاد دارم که هیچ چیزی نمیتونه جای یادگیری SQL Server رو بگیره.
موفق باشید.
مشکل اینه وقتی فرم ثبت سوال لود میشه اگر سوال رو برای ایتم اول کمبوباکس ثبت کنم درسته اما وقتی یک گروه دیگه انتخاب میکنم برای بعدیش ثبت میشه!!!!
واقعا چند بار فیلم رو دیدم کپی برابر اصله اما نمیدونم مشکل از کجاست!!!!
اینم کد دکمه ی ثبت سوال
SqlCommand cmd = new SqlCommand("AddQuestion", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@GroupID", cmbGroup.SelectedValue);
cmd.Parameters.AddWithValue("@QuestionText",txtbox Question.Text);
cmd.Parameters.AddWithValue("@txtCase1",textboxCas e1.Text);
cmd.Parameters.AddWithValue("@txtCase2",textboxCas e2.Text);
cmd.Parameters.AddWithValue("@txtCase3",textboxCas e3.Text);
cmd.Parameters.AddWithValue("@txtCase4",textboxCas e4.Text);
cmd.Parameters.AddWithValue("@answer",cmbAnswer.Te xt);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("سوال مورد نظر با موفقیت اضافه گردید");
clearTextBox();
FillGrid();
اما اگر سورس برنامه رو هم لطف کنید شاید بهتر باشه ، از زحماتتون بسیار سپاس گذارم
-----------------------------------------------------------------------------------------------------------------------------
یه سوال هم در مورد متغیرهای از نوع setting برای چی از این نوع استفاده کردین؟!
چه مزیتی نسبت به متغیر های معمولی داره؟