PDA

View Full Version : سوال: مشکل در برقراری ارتباط-relation بین جداول



پیام حیاتی
یک شنبه 09 شهریور 1393, 05:38 صبح
سلام
می خوام فیلد s_id در جدول student رو به فیلد n_s_id در جدول numbers متصل کنم :
s_id کلید اصلی و n_s_id کلید خارجی هست.


122882

122885


انجام میشه ولی زمان ذخیره پیغام خطا میده :

122883


'student' table saved successfully'numbers' table
- Unable to create relationship 'FK_numbers_student'.
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_numbers_student". The conflict occurred in database "Project", table "dbo.student", column 's_id'.

این نمای کلی جداول هست:

122884
تشکر.

uthman
یک شنبه 09 شهریور 1393, 16:09 عصر
اطلاعاتش رو کلا حذف کن

aminmousavi
یک شنبه 09 شهریور 1393, 17:49 عصر
برای کنترل جامعیت ، چون جدول رو در گذشته ساختید و رکورد ثبت شده sql نمیگذاره اینکار رو انجام بدید ، برای اینجام اینکار 2 راه دارید :

روش 1 :
- با کوئری عملیات آپدیت جدول رو انجام بدید و کلید خارجی رو تعریف کنید

روش 2 :

- Microsoft SQL Server Managment Studio رو باز کنید
- منوی Tools/Option
- از درختواره : Designers / Table and Database Desiners
- مقدار Prevent saving changes that require table re-creatdion رو برابر false قرار بدید


(قبل از انجام اگر جدول باز هست یا سرویسی از جدول استفاده میکند آن را ببنید )

پیام حیاتی
یک شنبه 09 شهریور 1393, 18:48 عصر
با روش uthman جواب گرفتم.
تجربه شد که قبل از برقراری ارتباطات مقدارها رو در جدول وارد نکنیم.

پیام حیاتی
یک شنبه 09 شهریور 1393, 19:07 عصر
مشکل جدید اینه که با با مقدار دادن به فیلدهای جدول master و student از طریق فرم خطای کلید خارجی با جدول reshte رو دارم :


The INSERT statement conflicted with the FOREIGN KEY constraint "FK_student_reshte". The conflict occurred in database "Project", table "dbo.reshte", column 'r_id'.
The statement has been terminated.

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: The INSERT statement conflicted with the FOREIGN KEY constraint "FK_student_reshte". The conflict occurred in database "Project", table "dbo.reshte", column 'r_id'.
The statement has been terminated.

122922

پیام حیاتی
یک شنبه 09 شهریور 1393, 20:36 عصر
اساتید؟ :متفکر::ناراحت:

uthman
دوشنبه 10 شهریور 1393, 10:25 صبح
دستور insert ی رو که نوشتی می زاری ؟ مقادیر key های اصلی در جدوال reshte,student,master آیا Identity هست ؟

پیام حیاتی
دوشنبه 10 شهریور 1393, 10:44 صبح
این کد :

sqlserver sqls = new sqlserver(".", "Project");
sqls.update("insert into master values('" + Mpcode.Text + "','" + Mname.Text + "','" + Mfamily.Text + "','" + Mnational.Text + "','" + Mphone.Text + "','" + Mmobil.Text + "','" + Mbrith.Text + "','" + Mcourse.Text + "' , '" + Mcertificate.Text + "' , '" + Maddress.Text + "')");
ClearInputs(Page.Controls);
Yes.Visible = true;


این کلاسی که نوشتم و ازش استفاده می کنم :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;




namespace sql
{
public class sqlserver
{
SqlConnection con;
SqlDataAdapter da ;
SqlCommand sc;



public sqlserver(string server,string dbname)
{
con = new SqlConnection("Data Source=" + server + ";Initial Catalog=" + dbname + ";Integrated Security=True");
da = new SqlDataAdapter();
sc = new SqlCommand();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = con;
sc.Connection = con;
}
~sqlserver()
{
con.Close();
}

public DataTable select(string str_q)
{
DataTable temp = new DataTable();
da.SelectCommand.CommandText = str_q;
con.Open();
da.Fill(temp);
con.Close();
return temp;
}
public int update(string str_q)
{
int result;
sc.CommandText = str_q;
con.Open();
result = sc.ExecuteNonQuery();
con.Close();
return result;
}

public int update(string str_q,object image)
{
int result;
sc.CommandText = str_q.Replace("**","@picture");
sc.Parameters.Add("@picture",image);
con.Open();
result=sc.ExecuteNonQuery();
con.Close();
return result;
}



}

}




بله
Identity هستند.

uthman
دوشنبه 10 شهریور 1393, 11:20 صبح
خوب وقتی شما در master درج می کید باید مقدار m_r-id رو هم داشته باشید. دارید؟ . وقتی معادلی تو جدول رشته نیست چه جوری می خوای درج کنی ؟

پیام حیاتی
دوشنبه 10 شهریور 1393, 13:04 عصر
خوب وقتی شما در master درج می کید باید مقدار m_r-id رو هم داشته باشید. دارید؟ . وقتی معادلی تو جدول رشته نیست چه جوری می خوای درج کنی ؟

بله داره.
122953

uthman
دوشنبه 10 شهریور 1393, 13:07 عصر
آقا می دونم که relation بین شون هست . وقتی می خوای در جدول master یه رکورد رو درج کنی مقدار m_r-ID رو از کجا مقدار دهی می کنی ؟
وقتی بخوای در master درج کنی مقدار فیلد m_r_id رو چه جوری و یا از کجا می گیری ؟

پیام حیاتی
دوشنبه 10 شهریور 1393, 15:11 عصر
درست شد به خاطر اینکه در جدول محتوایی نبود خطا می گرفت.
الآن زمانی که اطلاعات جدول student رو وارد می کنم این خطا رو دارم:

Server Error in '/' Application.Column name or number of supplied values does not match table definition.Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.SqlClient.SqlException: Column name or number of supplied values does not match table definition.

به عنوان سوال آخر :
مقدار r-id ردیف 1 برابر با کامپیوتر و ma_id برابر کارشناسی هست،در GridView مقدارهای عددی رو نشون میده،با توجه به ارتباط برقرار شده چطور باید براش تعریف کنیم که مثلا" منظور از عدد 1 در r_id رشته کامپیوتر است و کلمه کامپیوتر نمایش داده شود؟

122965
122966
122967