SQL Server 2000 كمك!

Mafia

Member
من وقتي كه يك ارتباطه با SQL Server 2000 ميسازم آخرش ميگه كه از اين ديتا بيس نميشه Update & Delete كرد و از يكي از دوستام پرسيدم گفت بايد يكPrimery Key براش بسازي!
ميشه يكي كامل بگه كه چيكار بايد بكنم؟
ممنون :wink:
 

omidak

Active Member
سلام:
اگر بتونيد... Code کامل رو بزارید تا ببینمیش خوبه.... :wink:
آخه نمیدونم که چی کار کردی... :wink:
 

Mafia

Member
راستش مشكل از ديتابيس نه از كد!
البته من كدهارو به صورت Wizard تو VS.net درست كردم
 

delavar

Member
Mafia گفت:
من وقتي كه يك ارتباطه با SQL Server 2000 ميسازم آخرش ميگه كه از اين ديتا بيس نميشه Update & Delete كرد و از يكي از دوستام پرسيدم گفت بايد يكPrimery Key براش بسازي!
ميشه يكي كامل بگه كه چيكار بايد بكنم؟
ممنون :wink:

سلام
مشكل سطح دسترسي يوزرتان به اون ديتابيس مي‌باشد.
اگر خودت دسترسي داري سطح دسترسي را فول كن يا اينكه به administrator سايت اطلاع بده برات درستش كنه.

دلاور
 

omidak

Active Member
سلام:
من همیشه پیشنهاد میکنم برایه استفاده از DataBase از اجزاء Data در TooBox استفاده نکیند... چون واقعاً سر درد آوره...;) :roll:
 

Mafia

Member
نه بابا خيلي راحته!
من الان مشكلم حل شده فقط نميدونم چطوري ميشه اطلاعات رو سيو يا ديليت كرد!
فقط ميتونم اونهارو تو يه ديتاگريد نشون بدم
 

raincoat

New Member
Mafia گفت:
نه بابا خيلي راحته!
من الان مشكلم حل شده فقط نميدونم چطوري ميشه اطلاعات رو سيو يا ديليت كرد!
فقط ميتونم اونهارو تو يه ديتاگريد نشون بدم
براي ايجاد تغییر در database یعنی همان Update و delete و insert شما باید یک Key در Table اتان داشته باشید. Database اتان را ویرایش کنید و یکی از ستونهایتان را بعنوان Key جدول تعریف کنید . بعد اگر از ابزار Toolbox استفاده میکنید DataAdapter خود را دوباره بسازید و اگر دستی مینویسید InsertCommand , DeletCommand, UpdateCommand را به adapter خودتان اضافه کنید.
برای تغییر در Table بهترین راه استفاده از Enterprise Manager میباشد ، کافیست جدول خود را در حالت Design ویرایش کنید و یکی از ستونهایتان که ترجیحا عددی است را کلید جدول بکنید.
 

Mafia

Member
آقا مشكل من با ديليت كردن حل شد ولي فعالا فقط ميتونم به ديتا بيس از طريق دستور زير در #C اد كنم:
DataRow dr = DataSet1.Tables["login"].NewRow();
dr["user"] = user.text;
dr["pass"] = pass.text;
DataSet1.Tables["login"].Rows.Add(dr);
sqlDataAdapter1.Update(DataSet1);

ميشه يكي دستورهاي لازم براي ديليت و سلكت و ... رو بگه
ممنون
 

raincoat

New Member
ببين مافيا ، اینجوری که یکی بیاد Command هارو بهت بگه نمیتونی اون چیزی که میخوایی رو بنویسی . باید تا حدودی یاد بگیری چطور خودت بنویسیشون . الان که خودت add کردن رو یاد گرفتی Delete کردن و غیره هم کار راحتی هستند .
من یک روش کلی بهت میدم خودت بقیه اش رو بنویس ، روش مورد استفاده من از طریق Stored Procedure هاست برای مثال اگر database که باهاش کار میکنی 2 تا ستون داشته باشه به نام های UserName,PassWord و خود جدول نامش Users باشه یک stored procedure به شکل زیر در دیتا بیس بنویس که لازم نباشه هر دفعه از Dataset و DataAdapter استفاده کنی :
کد:
 create proc Delete_User
(
	@UserNamer varchar(16)
)
as
delete from Users where UserName =@UserName

اين دستور را ميتواني از طريق Enterprise Manager قسمت Tools و برنامه SQL Query Analyzer وارد کنی .
حالا در برنامه اصلی ات ، جایی که میخواهی Delete یا update یا هر کار دیگر بکنی :
کد:
string con = "Server=localhost;initial catalog=[Esme Database et ro inja benevis, esme jadval na esm e khod e database];Trusted_Connection=true;"
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandText = "Delete_User"; // or update or insert ,...
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Connection = new SqlConnection( con );

SqlParameter Usern = new SqlParameter("@UserName",SqlDbType.VarChar,30);
SqlParameter Passw = new SqlParameter("@PassWord",SqlDbType.VarChar,30); 

Usern.Value = user.Text;
Passw.Value = pass.text;

sqlCommand.Parameters.Add(Usern);
sqlCommand.Parameters.Add(Passw);

sqlCommand.Connection.Open();
sqlCommand.ExecuteNonQuery();
sqlCommand.Connection.Close();

حالا برای Update و Insert خودت Stored Procedure اش را بنویس و از همین طریق در برنامه ات ازش استفاده کن. برای Select کردن یکخورده فرق میکند ، شما نمیتوانید از داخل Dataset چیزی Select کنی ، فقط میتوانی فیلتر کنیش که آنهم دقیقا دستور SQL نیست. برای همین بهتره باز هم از Stored Procedur ها استفاده کنی . تنها فرقش این است که نتیجه ای که برمیگرداند را باید در یک DataAdapter ذخیره کنی . بعد از طریق همان Dataset یا DataTable یا هر چیز دیگر در برنامه ات استفاده کنی.
پ ن : نوع داده های دیتا بیست را من پیش فرض Varchar گرفتم ؛ اگر فرق داشته باشند این کد کار نمیکند ، همینطور UserName باید بعنوان Key جدول شما باشد.
 

salma

New Member
دوست عزيز
ديتاست زماني كه ركوردي كم يازيادشودويا تغيير كندمتوجه مي شودولازم نيست كدخاصي بنويسي فقط در ديتااداپتور دستورات اضافه وحذف و...بايد دقيق مشخص شود درضمن ديتاست شما ازنوع تايپد است يا آنتايپد
 

Mafia

Member
ببخشيد من تايپد و آنتايپد رو نميدونم !
ولي من از اين كرد براي اظافه كردن به ديتابيس اظافه كردم:
private void butAddRow_Click(object sender, System.EventArgs e)
{
DataRow dr = DataSet1.Tables["login"].NewRow();
dr["username"] = user.Text;
dr["password"] = pass.Text;
DataSet1.Tables["login"].Rows.Add(dr);
sqlDataAdapter1.Update(DataSet1);
DataGrid1.DataBind();
}

حالا من فقط ميخوام به همين روش مثلا ديليت كنم
 

Mafia

Member
raincoat گفت:
ببين مافيا ، اینجوری که یکی بیاد Command هارو بهت بگه نمیتونی اون چیزی که میخوایی رو بنویسی . باید تا حدودی یاد بگیری چطور خودت بنویسیشون . الان که خودت add کردن رو یاد گرفتی Delete کردن و غیره هم کار راحتی هستند .
من یک روش کلی بهت میدم خودت بقیه اش رو بنویس ، روش مورد استفاده من از طریق Stored Procedure هاست برای مثال اگر database که باهاش کار میکنی 2 تا ستون داشته باشه به نام های UserName,PassWord و خود جدول نامش Users باشه یک stored procedure به شکل زیر در دیتا بیس بنویس که لازم نباشه هر دفعه از Dataset و DataAdapter استفاده کنی :
کد:
 create proc Delete_User
(
	@UserNamer varchar(16)
)
as
delete from Users where UserName =@UserName

اين دستور را ميتواني از طريق Enterprise Manager قسمت Tools و برنامه SQL Query Analyzer وارد کنی .
حالا در برنامه اصلی ات ، جایی که میخواهی Delete یا update یا هر کار دیگر بکنی :
کد:
string con = "Server=localhost;initial catalog=[Esme Database et ro inja benevis, esme jadval na esm e khod e database];Trusted_Connection=true;"
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.CommandText = "Delete_User"; // or update or insert ,...
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Connection = new SqlConnection( con );

SqlParameter Usern = new SqlParameter("@UserName",SqlDbType.VarChar,30);
SqlParameter Passw = new SqlParameter("@PassWord",SqlDbType.VarChar,30); 

Usern.Value = user.Text;
Passw.Value = pass.text;

sqlCommand.Parameters.Add(Usern);
sqlCommand.Parameters.Add(Passw);

sqlCommand.Connection.Open();
sqlCommand.ExecuteNonQuery();
sqlCommand.Connection.Close();

حالا برای Update و Insert خودت Stored Procedure اش را بنویس و از همین طریق در برنامه ات ازش استفاده کن. برای Select کردن یکخورده فرق میکند ، شما نمیتوانید از داخل Dataset چیزی Select کنی ، فقط میتوانی فیلتر کنیش که آنهم دقیقا دستور SQL نیست. برای همین بهتره باز هم از Stored Procedur ها استفاده کنی . تنها فرقش این است که نتیجه ای که برمیگرداند را باید در یک DataAdapter ذخیره کنی . بعد از طریق همان Dataset یا DataTable یا هر چیز دیگر در برنامه ات استفاده کنی.
پ ن : نوع داده های دیتا بیست را من پیش فرض Varchar گرفتم ؛ اگر فرق داشته باشند این کد کار نمیکند ، همینطور UserName باید بعنوان Key جدول شما باشد.

آقا بسيار ممنون فقط من يه سوال دارم اگه يه sqlCommand مثلا ديليت رو يه چيز معين تعيين كنيم از طريق ديتاگريد هم ميتونم ديليت كنيم؟ :wink:
 

raincoat

New Member
قضيه DataGrid یخورده فرق میکنه ، مخصوصا اگر از مال خود دات نت استفاده کنی که خیلی راحت تر از این حرفهاست . برای DataGrid بهترین راه اینه که یک DataSet بسازی و Bind اش کنی بهش . حالاهم میتونی از این شکلی که من نوشتم استفاده کنی هم از طریق ویزارد .
اگر از روش من استفاده میکنی یک Stored Proceduer بنویس برای Select و نتیجه اش رو از طریق یک DataAdapter بگیر و بریز تو Dataset . حالا هر تغییری که تو Datagrid بدی خودش تو dataset هم ثبت میشه. فقط کافیه بعد از اینکه کار ادیت Grid تموم شد ( چه آپدیت چه دیلیت چه اینسرت ) آداپترت رو با دیتاست آپدیت کنی. البته یکخورده خورده کاری داره و اون اینه که DeleteCommand , UpdadeCommandو InsertCOmmand را هم باید بنویسی و به آداپتریت اضافه کنی . پس اگر فقط میخواهی از گرید استفاده کنی از طریق ویزارد راحت تره ، بزار خودش برات تمام کمند هارو درست میکنه.
بطور کلی اینجوری بهت بگم که وقتی طرفت Dataset و ِDataGrid هستند هر تغیرری بدی خودش میره ثبت میشه تو Dataset و هیچ کدی لازم نداره . فقط هواست باشه که آداپترت رو هم آپدیت کنی که نتیجه تو دیتابیس ذخیره بشه .
Myadapter.Update(mydataset;)

یک پیشنهاد میکنم ، برای یاد گرفتن اینجور چیزها هیچ چیز بهتر ازدیدن Demo نیست . به این آدرس برو:
http://www.microsoft.com/usa/webcasts/
و از آنجا وب کست هایی که فکر میکنی لازم داری را دانلود کن و ببینشان( دراین مورد خاص وبکستهای ADO.NET را بگیر ) . من خودم بدون داشتن حتی یک کتاب تمام چیزی که از دات نت یاد گرفتم را از همان جا شروع کردم و بعد با کمک نمونه مثالهای MSDN یاد گرفتم. زبان انگلیسی سطح بالا هم احتیاج ندارد ، خیلی تخصصی حرف میزنند و مطمئن باش میفهمی چی میگن.
 

Mafia

Member
بازم يه مشكل!
من از جايي كه هاست گرفتم يه آدرس SQL Server به من داده كه من از طريق Enterprise manager به اون وصل شدم ولي وقتي كه روي Databases كليك ميكنم هنگ ميكنه و حدود نيم ساعت هم صبر كردم تا ليست رو دانلود كنه ولي بازم نكرد!
ميشه بگين چه راههاي ديگه اي هست كه بشه Table رو به يه ديتابيس اضافه كرد؟
 

raincoat

New Member
سعي کن این مشکل وصل شدن رو حل کنی ، چون در هر صورت برای Backup گرفتن یا تغییرات احتمالی بهش احتیاج داری.
ببینم به تو یک آدرس معمولی دادن که به SQL وصل شی؟ خیلی عجیبه ! SQL Server رو همیشه میزارن پشت FireWall و بعد با VPN بهش وصل میشن نه اینکه همینجوری ولش کنن به امون خدا هر کی خواست وصل شه بهش. اگه اینجوری که میگی باشه خیلی خطرناکه ، یه صحبتی با هاستت بکن. من نشنیده بودم اینجوری سرویس بدن.
میتونی برنامه SqlWebAdmin رو هم بهشون پیشنهاد بدی که برات نسب کنند ، مال خود مایکروسافت هست و مجانیه .
 

Mafia

Member
آقا من از هاست فري گرفتما!
مشكل هم از طريق SQL Query Analyzer حل شد :wink:
 

Mafia

Member
حالا يكي لطف كنه بگه با Query Analyzer چطوري ميشه Table درست كرد!!!
 

جدیدترین ارسال ها

بالا