ورود

View Full Version : سوال: چرا در فیلد id در جدول relation مقدار 0 قرار میگیره



mona mahmoudi
چهارشنبه 30 مرداد 1392, 18:10 عصر
سلام
من در اس کیو ال جدول ها و ارتباط بین آنها را ایجاد کرده ام
برای مثال یک جدول موبایل و یک جدول برند و یک جدول ارتباط این دو جدول که حاوی دو کلید جدول های موبایل و برند است ایجاد کرده ام.همچنین برای درج اطلاعات در این جدول ها به همین ترتیب برای هر کدام یک پروسیجر ایجاد کردم یعنی یک پروسیجر درج برای جدول موبایل ، یک پروسیجر درج برای جدول برند و یک پروسیجر درج برای جدول ارتباط بین این دو.
در سی شارپ با استفاده از کانستراکتور و متد ها عملیات درج را انجام می دهم اما متاسفانه به مشکلی برخوردم و آن این است که وقتی روی دکمه درج کلیک می کنم اطلاعات در دو جدول موبایل و برند درج می شوند ولی مقدار نال یا 0 در جدول ارتباط بین آنها قرار می گیرد.
جدول ارتباط به صورت اتوماتیک مقدار میگیره یعنی اول جدول موبایل بعد برند و همون موقع idهاشون در جدول ارتباط ثبت میشه.
کلا با Debug کردن برنامه متوجه شدم در موقع اجرای برنامه مقدار ID {00000000-0000-0000-0000-000000000000} System.Guid قرار میگیره و بعد که برنامه کامل به پایان میرسه توی sql به دو جدول اول مقدار id رو به صورت درست( نه null و نه 0) اختصاص میده و به جدول ارتباط بین آنها کماکان مقدار 0 قرار می دهد
هر چقدر سرچ کردم نتونستم مشکلم رو برطرف کنم .
لطفا کمک کنید

parvizwpf
جمعه 01 شهریور 1392, 23:18 عصر
کد بزارید. اون جایی که دارید صفر یا اون guid 0 میگیرید یعنی چیزی براش اطلاعات صحیحی نمیفرستید

mona mahmoudi
پنج شنبه 14 شهریور 1392, 09:53 صبح
این تیکه از کد که برای درج در جدول relation استفاده شده رو خطا میده


if (sda.InsertCommand.ExecuteNonQuery() > 0)

Error این هستش
110180


لطفا دوستانی که در این مورد اطلاعات دارند کمک کنند

Salah Sanjabian
پنج شنبه 14 شهریور 1392, 10:53 صبح
سلام . این Exception به این خاطر که شما دارین یه ID رو به جدول واسط اینسرت میکنی که هنوز تو جدول Brand ثبت نشده

mona mahmoudi
پنج شنبه 14 شهریور 1392, 11:40 صبح
راستش مشکل اینجاست : زمانی که برنامه C# من داره اجرا میشه مقدار id رو برای دو جدول موبایل و برند 00000000-0000-0000-0000-0000 در نظر میگیره و وقتی که میرم توی Sql مقدار id رو برای این دو جدول درست درج میکنه یعنی 0 نیست
ولی برای جدول relation مقدار Null یا 00000000-0000-0000-0000-0000 قرار داده میشه
من از این کد برای درج در جدول Brand استفاده میکنم



public Boolean Insert()
{
Boolean _result = false;
try
{
sda.InsertCommand = new SqlCommand();
sda.InsertCommand.Connection = sc;
sda.InsertCommand.CommandType = CommandType.StoredProcedure;
sda.InsertCommand.CommandText = "SP_INS_BRAND";
sda.InsertCommand.Parameters.AddWithValue("@TYPE", type);
if (sc.State != ConnectionState.Open) { sc.Open(); }
if (sda.InsertCommand.ExecuteNonQuery() > 0)
{ _result = true; }
else
{ _result = false; }
if (sc.State != ConnectionState.Closed) { sc.Close(); }
}
catch { }
return _result;
}

میشه راهنمایی کنید چه کار باید بکنم

Salah Sanjabian
پنج شنبه 14 شهریور 1392, 11:55 صبح
داری از SQLCOmpact استفاده میکنی؟ کارباهاش نمیدونم چرا سخته. 2 روز باهاش کار کردم به خاطر همین مسائل بیخیالش شدم و LocalDB 2012 رو انتخاب کردم

mona mahmoudi
پنج شنبه 14 شهریور 1392, 12:13 عصر
نه از Compact استفاده نمی کنم
SQL Server 2008 هستش که باهاش کار می کنم

mona mahmoudi
پنج شنبه 14 شهریور 1392, 12:32 عصر
لطفا دوستان محترم راهنمایی کنند
من واقعا نمیدونم چطور باید این مشکل رو برطرف کنم

parvizwpf
سه شنبه 19 شهریور 1392, 21:14 عصر
کل کد اینزرت رو بزارید اینجا اگه مبینید صفر میده خب خودتون باید مثلا با این کد بهش یه آی دی رندوم بدید:
GUID.NewID()

mona mahmoudi
چهارشنبه 20 شهریور 1392, 10:41 صبح
id رو توی پروسیجری که براش تعریف کردم و برای درج فراخوانیش میکنم بهش اختصاص میدم یعنی توی پروسیجر new id میشه.
کد درج من هم این طور هست:


protectedvoid Button1_Click(object sender, EventArgs e)

{

App_Class.mobile m1 = new App_Class.mobile(int.Parse(txtprice.Text), txttitle.Text);

if (m1.Insert())

{

App_Class.brand b1 = new App_Class.brand(txtbrand.Text);

if(b1.Insert ())

{

if(m1.InsertMobileBrand(b1.ID))

{

Label1.Text = "succede";



}

else{ Label1.Text = "failde relation";}

}

else{Label1.Text = "failde class brand";}

}

else{Label1.Text = "failde class mobile";}

}

mona mahmoudi
چهارشنبه 20 شهریور 1392, 17:59 عصر
با راهنمایی شما مشکل من حل شد خیلی خیلی ممنون