PDA

View Full Version : مشکل dataset



m_zamani
سه شنبه 03 بهمن 1385, 11:32 صبح
Private Sub q()
Dim strs As String = "SELECT * From Enter" & " Where ( per_no = ?)"
Dim ds As New DataSet
Dim da As New SqlDataAdapter(strs, con)
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("¬êں©ى کں©êë§ی ©ں یں©§ کëی§"))
da.Fill(ss, "Enter")
TextBox1.DataBindings.Add(New Binding("Text", ds, "enter.name"))
End Sub


من نمی دونم مشکل این تکه کد چیه؟ روی خط دستورfill پیغام میده

iman_s52
سه شنبه 03 بهمن 1385, 11:37 صبح
ss چیه ؟؟؟

programmermp
سه شنبه 03 بهمن 1385, 11:48 صبح
ss چیه ؟؟؟

ss یک متغیر از نوع dataset هست




من نمی دونم مشکل این تکه کد چیه؟ روی خط دستورfill پیغام میده



عزیز من توی تاپیک قبلیت هم گفتم توی کدهای شما اصلا




con.open و con.close



دیده نمی شه یعنی اصلا کانکشن یا همون برقرار کننده ارتباط بین dataadaptor و dataset

باز و بسته نمی شه

در ضمن شما قبل از اینکه بخواهید دیتا ست یا همون ss رو پر کنی با دستور fill

باید یکبار اون رو با دستور clear خالی کنی

و بالاخره فیلد per_no باید اینطور ی مقدار دهی بشه و گرنه خطا می ده



per_no='مقدار'



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

m_zamani
سه شنبه 03 بهمن 1385, 11:53 صبح
من قبلا con.open رو اجرا کردم و connection برقراره

iman_s52
سه شنبه 03 بهمن 1385, 11:59 صبح
تویه تعریف DataSet متغیرش به اسم ds ولی تویه Fill به ss نسبت داده شده.
واسه همین میگم ss چیه ؟؟؟؟؟؟؟؟

m_zamani
سه شنبه 03 بهمن 1385, 12:11 عصر
Private Sub q()
Dim strs As String = "SELECT * From Enter" & " Where ( per_no = ?)"
Dim ss As New DataSet
Dim da As New SqlDataAdapter(strs, con)
con.Open()
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("¬êں©ى کں©êë§ی ©ں یں©§ کëی§"))
ss.Clear()
da.Fill(ss, "Enter")
TextBox1.DataBindings.Add(New Binding("Text", ss, "enter.name"))
End Sub


این کد رو اصلاح کردم بازم همون پیغام رو میده

programmermp
سه شنبه 03 بهمن 1385, 12:20 عصر
PrivateSub q()
Dim strs AsString = "SELECT * From Enter" & " Where ( per_no = ?)"
Dim ss AsNew DataSet
Dim da AsNew SqlDataAdapter(strs, con)
con.Open()
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("¬êں©ى کں©êë§ی ©ں یں©§ کëی§"))
ss.Clear()
da.Fill(ss, "Enter")
TextBox1.DataBindings.Add(New Binding("Text", ss, "enter.name"))
EndSub


این کد رو اصلاح کردم بازم همون پیغام رو میده

دو بار کدهاتو اصلاح کرد ی ولی یک بار کاری که من گفتم رو انجام ندادی

متغیر pn باید بین single quotation یا همون ( 'مقدار ' ) قرار بگیره یعنی مثل زیر



select * from table1 where per_no= ' مقدار '

یا به عبارت دیگه

strsql="select * From table1 where per_no=" & "'" & pn &"'"

m_zamani
سه شنبه 03 بهمن 1385, 12:34 عصر
Private Sub q()
Dim strs As String = strsql = "select * From table1 where per_no=" & "'" & pn & "'"
Dim ss As New DataSet
Dim da As New SqlDataAdapter(strs, con)
con.Open()
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("¬êں©ى کں©êë§ی ©ں یں©§ کëی§"))
ss.Clear()
da.Fill(ss, "Enter")
TextBox1.DataBindings.Add(New Binding("Text", ss, "enter.name"))
End Sub


فکر کنم این دیگه درسته، اما بازم نمیشه
ایندفعه اینو میگه


Incorrect syntax near 'False'.

programmermp
سه شنبه 03 بهمن 1385, 12:41 عصر
ببین عزیز

نام جدولت enter هست ولی نوشتی table1

دوباره اصلاحش کن

iman_s52
سه شنبه 03 بهمن 1385, 12:43 عصر
فکر کنم بازم مشکل تایپی ایشونه؟

m_zamani
سه شنبه 03 بهمن 1385, 14:05 عصر
جدولو درست کردم اما بازم همین پیغام رو میده

m_zamani
سه شنبه 03 بهمن 1385, 14:06 عصر
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
que()
End Sub
Private Sub que()
Dim strs As String = strsql = "select * From enter where per_no=" & "'" & pn & "'"
Dim ss As New DataSet
Dim da As New SqlDataAdapter(strs, con)
'con.Open()
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("¬êں©ى کں©êë§ی ©ں یں©§ کëی§"))
ss.Clear()
da.Fill(ss, "Enter")
TextBox1.DataBindings.Add(New Binding("Text", ss, "enter.name"))
End Sub

m_zamani
سه شنبه 03 بهمن 1385, 14:07 عصر
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
que()
End Sub
Private Sub que()
Dim strs As String = strsql = "select * From enter where per_no=" & "'" & pn & "'"
Dim ss As New DataSet
Dim da As New SqlDataAdapter(strs, con)
'con.Open()
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("¬êں©ى کں©êë§ی ©ں یں©§ کëی§"))
ss.Clear()
da.Fill(ss, "Enter")
TextBox1.DataBindings.Add(New Binding("Text", ss, "enter.name"))
End Sub

dataset رو فقط همینجا باید تعریف میکردم دیگه،آره؟

m_zamani
سه شنبه 03 بهمن 1385, 14:08 عصر
connection قبلا فعال شده

m_zamani
سه شنبه 03 بهمن 1385, 14:26 عصر
اینبار هیچ کار خاصی انجام نمیده، پیغام هم نمیده

linux
سه شنبه 03 بهمن 1385, 15:00 عصر
شما چه احتیاجی به دیتاست دارید؟ از یک دیتاتیبل هم می توانید استفاده کنید

m_zamani
چهارشنبه 04 بهمن 1385, 07:25 صبح
میشه بیشتر توضیح بدین؟ ممنون میشم

Sharif Lotfi
چهارشنبه 04 بهمن 1385, 08:14 صبح
دوست عزیز . ببین با این تاپیک مشکلت حل میشه ؟
http://www.barnamenevis.org/forum/showthread.php?t=59798

Alireza_Salehi
چهارشنبه 04 بهمن 1385, 08:21 صبح
سلام به همگی

نحوه استفاده صحیح از پارامترها در شی Command ! (مثال های زیر همگی تست شده و بدون خطاست)
در ضمن الزاما لازم نیست شی connection رو همون جایی open کنی که در مثال انجام شده!

وقتی از پایگاه داده SQL استفاده می کنی باید پارامترها رو با نام در Query تعریف کنی مثلا

Select x,y,z From table1 WHERE x=@a AND y=@bدر این مثال دو تا پارامتر به نام a و b داریم و در هنگام اضافه کردن پارامتر به شی Command از این نام ها باید استفاده کنی!
مثال:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=""C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\WebSites\WebSite3\App_Data\Database.mdf"";Integrated Security=True;Connect Timeout=30;User Instance=True")
Dim da As New SqlDataAdapter("SELECT * FROM Table1 WHERE name=@pn", con)
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("نام خود را وارد کنید؟"))
Dim ds As New DataSet()
con.Open()
da.Fill(ds, "Table1")
Label1.DataBindings.Add("Text", ds, "Table1.name")
Label1.Refresh()
con.Close()
End Subاما اگر از پایگاه داده اکسس استفاده کنی می تونی در Query به جای نام پارامتر و @ از علامت سوال استفاده کنی و هنگام اضافه کردن پارامتر به شی Command باید از نام فیلد های جدولت استفاده کنی نه هر اسمی که خواستی!
مثال:

SELECT x,y,z FROM Table1 WHERE x=? AND y=?در این مثال هم دو تا پارامتر داریم که اسمشون همون اسم فیلد هاست یعنی x و y!
مثال:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=""J:\Alireza Files\db1.mdb""")
Dim da As New OleDbDataAdapter("SELECT * FROM Table1 WHERE name=?", con)
da.SelectCommand.Parameters.AddWithValue("name", InputBox("نام خود را وارد کنید؟"))
Dim ds As New DataSet()
con.Open()
da.Fill(ds, "Table1")
Label1.DataBindings.Add("Text", ds, "Table1.name")
Label1.Refresh()
con.Close()
End Sub

نکته دیگه اینکه برای این که دیگه هیچ رقمه خطا نبینی سعی کن همیشه نام فیلد ها و جدائل رو بین [] قرار بدی تا با کلمات همنام در SQl statement اشتباه نشه ، (این یه خطا واقعا فهمیدنش سخته)

Select [x],[y],[z] From [table1] WHERE [x]=@a AND [y]=@b
و نکته آخر این که هر نوع تامین کننده داده ای ویژگی های خاص خودش رو داره مثلا همه انواع Query هایی که در SQL نوشته می شوند در اکسس کار نمی کنند (که کم هم نیست) ، یا نحوه استفاده از پارامتر و تعریف آن در Syntax این دو فرق می کنه. (اصلا اگر قرار بود مثل هم باشند که همه می رفتن Access می خریدن هم ارزونتره هم پیچیدگیش کمتره - ولی امکانات و قابلیت های SQl و اکسس اصلا قابل مقایسه نیست حتی در Syntax برای Query ها)

m_zamani
چهارشنبه 04 بهمن 1385, 09:58 صبح
Dim da As New SqlDataAdapter("SELECT * FROM enter WHERE name=@pn", con)
da.SelectCommand.Parameters.AddWithValue("pn", InputBox("ëںê ¦ی§ ©ں یں©§ کëی§؟"))
Dim ds As New DataSet()
'con.Open()
da.Fill(ds, "enter")
TextBox1.DataBindings.Add("Text", ds, "enter.name")
TextBox1.Refresh()

ممنون از مثالتون ، اما من این کار رو انجام دادم اما باز هم هیچ کاری انجام نمیده

Alireza_Salehi
چهارشنبه 04 بهمن 1385, 11:00 صبح
یک متغیر Int32 تعریف کن و به صورت زیر استفاده کن

Dim x As Int32
x=da.Fill(ds,"Table1")ببین اصلا داده ای وجود داره یا نه؟
در صورتی که مقداری توسط دیتا آداپتر برگردادنده شود مقدار بزرگتر از صفر می گیرد!