View Full Version : سوال: نحوه استفاده از پروسیجر یا join در LINQ
mustafaehsani
چهارشنبه 04 اردیبهشت 1392, 18:03 عصر
با سلام عزیزان خواهشا کمک کنند سه چهار روزه سرکارم
یه دیتابیس با چهار جدول به صورت زیر
103273
همونطور که توی شکل هم معلومه براش یه پروسیجر واسه join جدولهام نوشتم اما نمیدونم با چه دستور و به چه صورت بنویسم البته کدهای زیر رو امتحان کردم
DataClassesDataContext db = new DataClassesDataContext() ;
db.Syl_join(iD:Label1.Text);
GridView2.DataSource = db.Syl_join(iD: Label1.Text.ToString());
GridView2.DataBind();
}
که error زیر رو میده
103274
کد sql پروسیجرم که البته مطمئنم درسته چون توی خود sql جواب داد. متغیر ID هم از label1.text میگیره
ALTER PROCEDURE [dbo].[Syl_join]
@ID nchar(10)
AS
SELECT dbo.Teacher.Family, dbo.Teacher.Name, dbo.Credit.Name AS Expr1
FROM dbo.Credit INNER JOIN
dbo.Syllabus ON dbo.Credit.ID = dbo.Syllabus.[Credit ID] INNER JOIN
dbo.Student ON dbo.Syllabus.[Student ID] = dbo.Student.ID INNER JOIN
dbo.Teacher ON dbo.Syllabus.[Teacher ID] = dbo.Teacher.ID where dbo.Student.ID=@ID
RETURN
amirsajjadi
چهارشنبه 04 اردیبهشت 1392, 18:40 عصر
UserName رو پیدا نکرده به خاطر همین مقدار تهی رو برمیگردونه و وقتی میخوای به رشته تبدیلش کنی خطا میده. الان دقیقا میخوای کد sqlی که گذاشتی رو به linq تیبدیل کنی؟
mustafaehsani
چهارشنبه 04 اردیبهشت 1392, 19:02 عصر
UserName رو پیدا نکرده به خاطر همین مقدار تهی رو برمیگردونه و وقتی میخوای به رشته تبدیلش کنی خطا میده. الان دقیقا میخوای کد sqlی که گذاشتی رو به linq تیبدیل کنی؟
یا کد تبدیل به linq بشه یا کدی که بشه از این پروسیجر استفاده کرد ممنون میشم کمک کنی
mustafaehsani
چهارشنبه 04 اردیبهشت 1392, 19:05 عصر
UserName رو پیدا نکرده به خاطر همین مقدار تهی رو برمیگردونه و وقتی میخوای به رشته تبدیلش کنی خطا میده.
آخه تا استارت رو میزنم این error رو میده اجازه نمیده داده بهش بدم
نکته خیلی مهم اینکه تا کد پروسیجر رو ننویسم قسمت اول برنامه که لاگین شدنه کار میکنه
amirsajjadi
پنج شنبه 05 اردیبهشت 1392, 08:12 صبح
اول چک کن ببین که username وجود داره
if context... isnot nothing then ...
دوم اینکه برای مقدار دهی به پروسجر باید از Parameter های GridView استفاده کنی
amirsajjadi
پنج شنبه 05 اردیبهشت 1392, 17:03 عصر
تبدیل پروسجر به linq
Public Class Class1
Public Function GetProc_Syl_join(iD As Integer) As Object
Dim db As New DataClassesDataContext
Dim lnq = From c In db.Credits Join s In db.syllabus On c.ID Equals s.CID _
Join st In db.Students On s.SID Equals st.ID _
Join th In db.Teachers On s.TID Equals th.ID Where st.ID = iD Select CreditName = c.Name, TeacherName = th.Name, TeacherFamily = th.Family
Return lnq
End Function
End Class
میتونی همین تابع رو از طریق ObjectDataSource به گریدویو بدی و پارامتر اون رو به یک شی و یا یک مقدار Bind کنی.
Sub refreshData(id As Integer)
Dim pr As New Parameter("iD", Data.DbType.Int32, id.ToString)
Dim dsData As New ObjectDataSource
dsData.SelectMethod = "GetProc_Syl_join"
dsData.TypeName = "Class1"
dsData.SelectParameters.Clear()
dsData.SelectParameters.Add(pr)
GridView1.DataSource = dsData
GridView1.DataBind()
End Sub
mohammad5593
سه شنبه 30 مهر 1392, 07:29 صبح
تبدیل پروسجر به linq
Public Class Class1
Public Function GetProc_Syl_join(iD As Integer) As Object
Dim db As New DataClassesDataContext
Dim lnq = From c In db.Credits Join s In db.syllabus On c.ID Equals s.CID _
Join st In db.Students On s.SID Equals st.ID _
Join th In db.Teachers On s.TID Equals th.ID Where st.ID = iD Select CreditName = c.Name, TeacherName = th.Name, TeacherFamily = th.Family
Return lnq
End Function
End Class
میتونی همین تابع رو از طریق ObjectDataSource به گریدویو بدی و پارامتر اون رو به یک شی و یا یک مقدار Bind کنی.
Sub refreshData(id As Integer)
Dim pr As New Parameter("iD", Data.DbType.Int32, id.ToString)
Dim dsData As New ObjectDataSource
dsData.SelectMethod = "GetProc_Syl_join"
dsData.TypeName = "Class1"
dsData.SelectParameters.Clear()
dsData.SelectParameters.Add(pr)
GridView1.DataSource = dsData
GridView1.DataBind()
End Sub
باتشکر، دوست عزیز لطفا یک فایل نمونه بگذارید
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.