PDA

View Full Version : سوال: ارتباط بین جداول در Asp.net



rezvan.j
چهارشنبه 02 تیر 1389, 12:36 عصر
سلام دوستان گرامی

چند تا سوال دارم که لطف می کنید اگه کمک کنید .

برنامه ای با As.Net می نویسم
می خواهم بین 4 تا جدول ارتباط برقرار کنم که هر کدوم کلید اصلی و خارجی رو دارند . بهتره با DataRelation بنویسم یا از StoredProcdeure هم میشه استفاده کرد ؟
با DataRelation بین جداولم ارتباط برقرار کردم ولی نمی تونم از مقادیرش استفاده کنم و خطا داره .
join رو میشه در VS استفاده کرد ؟ یعنی در #C میشه نوشت دو تا جدول رو Join کن ؟ پس اینجوری دیگه اون DataRelation چی هست ؟
کدهایی که نوشتم :
فعلا توی Label خواستم بیارمشون بعد باید به GridView بفرستمشون این فقط ارتباطش هست که هنوز خطا داره .






SqlCommand cmd = new SqlCommand("select lesson,idless from lesson ", connect);


SqlDataAdapter adapter = new SqlDataAdapter(cmd);


DataSet ds = new DataSet();


try


{





//پر کردن دیتاست با جدول درس


adapter.Fill(ds, "lesson");


//پر کردن دیتاست با جدول درس/معلم


SqlCommand cmdEmpLess = new SqlCommand("select idless,idempless from empless ", connect);


adapter.Fill(ds,"empless");


//پر کردن دیتاست با جدول نمرات


SqlCommand cmdMark = new SqlCommand("select mark,idempless from mark ", connect);


adapter.Fill(ds ,"mark");


}


catch


{





}


//ایجاد ارتباط فیلد کد دانش آموزی در جداول دانش آموز و نمره


// DataRelation relstd = new DataRelation ("relstd",ds.Tables["student"].Columns["idstd"],ds.Tables["mark"].Columns["idstd"]);


//ایجاد ارتباط فیلد درس در جداول درس و درس/معلم


DataRelation relation = new DataRelation("relation" , ds.Tables["lesson"].Columns["idless"], ds.Tables["empless"].Columns["idless"]);


//ایجاد ارتباط فیلد درس/معلم در جداول درس/معلم و نمره


ds.Relations.Add(relation);


DataRelation relationMarkEmpless = new DataRelation("relationMarkEmpless", ds.Tables["empless"].Columns["idempless"], ds.Tables["mark"].Columns["idempless"], false);


// ds.Relations.Add(relstd);





ds.Relations.Add(relationMarkEmpless);


// foreach (DataRow rowstd in ds.Tables["student"].Rows)


// {


foreach (DataRow rowless in ds.Tables["lesson"].Rows)


{


Label1.Text = Label1.Text + "<br />" + rowless["lesson"];


Label1.Text = Label1.Text + "<br />" + rowless["mark"];


// Label1.Text = Label1.Text + "<br />" + rowless["student"];


foreach (DataRow rowEmpLess in rowless.GetChildRows(relation))


{


foreach (DataRow rowMark in rowEmpLess.GetParentRows(relationMarkEmpless))


{


Label1.Text = Label1.Text + "&nbsp;&nbsp;";


Label1.Text = Label1.Text + rowMark["mark"] + "<br />";


}


}


}


}


// }


و این خطا رو هم میده :







'column' argumant cannot be null


Parameter name:column



از خطی که Bold کردمش خطا میگیره .

Peyman.Gh
چهارشنبه 02 تیر 1389, 12:38 عصر
فکر میکنم یکی از Column ها Allow Nulls نمیباشد و باید مقدار داشته باشد.

rezvan.j
چهارشنبه 02 تیر 1389, 12:42 عصر
و اینکه چطوری می تونم مقدار انتخاب شده از DropDownList رو در بانک درج کنم ؟




SqlCommand cmd1 = new SqlCommand("insert ... values('" + TextBox3.Text.Trim() + "','" + TextBox2.Text.Trim() + "','" + TextBox1.Text.Trim() + "','" + DropDownList1.Text.Trim() + "' ", connect);


cmd1.ExecuteNonQuery();


این رو هم نوشتم اما خطا مییره
DropDownList1.selectedItem.value

و اینکه اصلا توجهی نداره کاربر چه جیزی رو انتخاب کرده خیلی برنامه بخواد جواب بده اولین چیزی که در Drop هست رو خودش انتخاب می کنه
موقع Bind کردن DataTextField و DataTextValue رو هم تنظیم کردم .

ممنون اگه بتونید کمک کنید .

rezvan.j
چهارشنبه 02 تیر 1389, 12:45 عصر
فکر میکنم یکی از Column ها Allow Nulls نمیباشد و باید مقدار داشته باشد.

تنکس
یعنی اجازه AllwNull رو نداشته باشه ؟

Peyman.Gh
چهارشنبه 02 تیر 1389, 12:53 عصر
یعنی باید حتماً مقدار داشته باشد.

Peyman.Gh
چهارشنبه 02 تیر 1389, 12:55 عصر
و اینکه چطوری می تونم مقدار انتخاب شده از DropDownList رو در بانک درج کنم ؟
این رو هم نوشتم اما خطا مییره
DropDownList1.selectedItem.value

و اینکه اصلا توجهی نداره کاربر چه جیزی رو انتخاب کرده خیلی برنامه بخواد جواب بده اولین چیزی که در Drop هست رو خودش انتخاب می کنه
موقع Bind کردن DataTextField و DataTextValue رو هم تنظیم کردم .

ممنون اگه بتونید کمک کنید .

متن خطا را قرار دهید.

rezvan.j
چهارشنبه 02 تیر 1389, 13:04 عصر
الان متن خطاظ همراهم نیست ولی می تونم بخونمش که واقعا میگه سینتکس نزدیک "مقدار داخل درپ دون لیست" صیح نیست .
مشکل تایپی وجود نداره هیچ چیزی از قلم نیفتاده یعنی شایدم من نمی دونم .
ولی خطا میده :
Incorrect syntax near"مقدار درپ دون لیست" که انتخاب شده

rezvan.j
چهارشنبه 02 تیر 1389, 13:06 عصر
یعنی باید حتماً مقدار داشته باشد.

جدول mark هیچ کدوم از فیلدهاش اجازه خالی بودن رو نداره . و با مقادیر آزمایشی هم پرش کردم .

Peyman.Gh
چهارشنبه 02 تیر 1389, 13:13 عصر
DropDownList1.SelectedItem.Text

rezvan.j
یک شنبه 06 تیر 1389, 15:31 عصر
دوستان این دیتا ریلیشن من ، هر کاری می کنم مثل اینکه نمی خواد حل بشه با join ، StoredProcedure نوشتم .

4 تا جدول رو join کردم و 2 الی 3 تا از فیلدهاش رو توی گرید نمایش میدم و یکی از فیلدهای گرید رو هم لینک کردم که اگه کلیک شد توی یه دیتا لیست تمام اطلاعات دیگه رو هم نشون بده ولی این کارو نمی کنه



<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Visible="False" Width="165px" DataKeyNames="idempless" AutoGenerateSelectButton="True" >

<Columns>

<asp:BoundField DataField ="mark" HeaderText=" نمره " />

<asp:BoundField DataField="name" HeaderText="نام معلم" Visible="False" />

<asp:BoundField DataField="family" HeaderText="معلم" Visible="False" />

<asp:BoundField DataField ="idempless" HeaderText ="id" />

<asp:ButtonField DataTextField="lesson" HeaderText ="نام درس" />

<asp:BoundField DataField="classno" HeaderText="شماره کلاس" />

</Columns>

<SelectedRowStyle BackColor="Silver" />


</asp:GridView>




asp:DetailsView ID="DetailsView2" runat="server" AutoGenerateRows="False" DataSourceID="SqlDataSource2"

Height="50px" Width="125px">

<Fields >

<asp:BoundField DataField ="name" HeaderText="نام معلم" />

<asp:BoundField DataField = "family" HeaderText="معلم" />

<asp:BoundField DataField = "classno" HeaderText="کلاس" />

<asp:BoundField DataField = "yearsemester" HeaderText="ترم" />

</Fields>

</asp:DetailsView>

<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:MyBankConnectionString %>"

SelectCommand="SP_ViewMark" SelectCommandType="StoredProcedure">



<SelectParameters>

<asp:SessionParameter Name="id_std" SessionField="username" Type="Int32" />

<asp:SessionParameter Name="year_semester" SessionField="year_semester" Type="Int32" />

<asp:ControlParameter ControlID="gridview1" Name="idempless" PropertyName="selecteddatakey.value" />

</SelectParameters>
</asp:SqlDataSource>



CREATE PROCEDURE SP_ViewMark @id_std int, @year_semester int
AS
SELECT dbo.mark.mark, dbo.lesson.lesson ,dbo.employee.name , dbo.employee.family , dbo.empless.classno ,
dbo.empless.yearsemester , dbo.mark.idempless
FROM dbo.empless INNER JOIN
dbo.employee on dbo.empless.idemp = dbo.employee.idemp inner join
dbo.lesson ON dbo.empless.idless = dbo.lesson.idless INNER JOIN
dbo.mark ON dbo.empless.idempless = dbo.mark.idempless where dbo.empless.yearsemester=@year_semester
GO


اینم StoredProcedure م
در مورد آرگومان هاش خطا داره اما نمی دونم چه طوری باید باشه . کم و زیاد و ایناش رو
Procedure or function SP_ViewMark has too many arguments specified.


ببینید می تونید کمک کنید حل بشه بلاخره . ممنون .