PDA

View Full Version : اشکال اين کد در چيست؟(درج در ديتابيس)



Hossis
چهارشنبه 12 خرداد 1389, 11:54 صبح
من اين کد رو نوشتم ولي يک جاش اشکال داره که پيغام مي ده اين مقادير درست نيست

Dim CnnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\db.accdb"
Dim da As OleDbDataAdapter
Dim ds As New DataSet
' Dim cr As New CrystalReport1
Dim cnn As OleDbConnection
cnn = New OleDbConnection(CnnStr)
Dim sql As String = "Insert INTO Pro (Nam,Famil,Age)VALUES (Hosein," & Me.Text & ",25)"
Dim cmd As New OleDbCommand(sql, cnn)
' cmd.

cnn.Open()
da = New OleDbDataAdapter(sql, cnn)

cmd.ExecuteNonQuery()
cnn.Close()

Shahram_Shobeiri
چهارشنبه 12 خرداد 1389, 12:11 عصر
برای مقادیر غیر عددی در کوئری سینگل کت قرار بده


Insert INTO Pro (Nam,Famil,Age)VALUES ('Hosein','" & Me.Text & "',25)

Hossis
چهارشنبه 12 خرداد 1389, 17:35 عصر
اون مشکل حل شد ولي من کدي براي آپديت گذاشتم که هر کار مي کنم خطا ميده و ميگه جمله بندي آپديت اشتباهه

اين هم کدش


cnn.Open()
Dim sql As String = "Update Pro Set(Nam,Famil,Age)=('" & _
tx1.Text & "','" & tx2.Text & "'," & tx3.Text & ") Where Id=" & txId.Text
Dim cmd As New OleDbCommand(sql, cnn)
ra = cmd.ExecuteNonQuery()
cnn.Close()

b.mahsa
چهارشنبه 12 خرداد 1389, 18:12 عصر
این طوری بنویسش




cnn.Open()
Dim sql As String = "Update Pro Set Nam='"& tx1.Text & "',Famil='" & tx2.Text & "',Age=" & tx3.Text &" Where Id=" & txId.Text
Dim cmd As New OleDbCommand(sql, cnn)
ra = cmd.ExecuteNonQuery()
cnn.Close()

ashkan209
چهارشنبه 12 خرداد 1389, 19:56 عصر
کد b.mahsa درسته ، اما بهتره که در شیوه کدنویسی Insert و Update از تکنیک SqlParameter و یا OleDbParameter استفاده کنید . این شیوه کد نویسی حرفه ای هست و زمانی تفاوت آن با کدنویسی غیر پارامتری بشدت نمایان می شود که شما میخواهید یک رکورد با ستونهای زیاد (مثلا 20 تا و یا بیشتر) را Insert یا Update کنید . بجای اینکه مقادیر را در یک خط و با کوتیشن و یا بدون کوتیشن به ستونها نسبت دهیم ،و بجای اینکه احتمال بروز خطای فراوان ناشی از سینتکس را بپذیریم ،میتوان مقادیرانواع دیتاتایپها را در این روش به راحتی Update و یا Insert نمود .

Dim com As New SqlCommand("Update Pro Set Nam=@Nam1,Famil=@Famil1 ,Age=@Age1 Where Id=" & txId.Text, con)
Dim N As New SQLParameter("@Nam1", tx1.Text)
Dim F As New SQLParameter("@Famil1", tx2.Text)
Dim A As New SQLParameter("@Age1", tx3.Text)
com.Parameters.AddRange(New SQLParameter() {N, F, A})

Con.Open()
com.ExecuteNonQuery()
Con.close()

Hossis
چهارشنبه 12 خرداد 1389, 22:16 عصر
کد b.mahsa درسته ، اما بهتره که در شیوه کدنویسی Insert و Update از تکنیک SqlParameter و یا OleDbParameter استفاده کنید ....[/source][/ltr]
اين تکنيک خوبي هست ولي فکر کنم با بانک اکسس کار نکنه ؟ ولي امتحان مي کنم ببينم چي ميشه چون تو يک پروژه ديگه نزديک 24 فيلد رو بايد يک جا ويرايش و اضافه کنم ،‌اين راه حل خوبيه اگه به اکسس بخوره !
اما يک سؤال ديگه هم دارم و اون اينه که : چطور بعد از درج و اضافه يک رکود، شماره اختصاصي اون يعني Id که اتونامبر هست رو بدست بياريم؟؟

Open-Source
چهارشنبه 12 خرداد 1389, 22:24 عصر
اين تکنيک خوبي هست ولي فکر کنم با بانک اکسس کار نکنه ؟ ولي امتحان مي کنم ببينم چي ميشه چون تو يک پروژه ديگه نزديک 24 فيلد رو بايد يک جا ويرايش و اضافه کنم ،‌اين راه حل خوبيه اگه به اکسس بخوره !
اما يک سؤال ديگه هم دارم و اون اينه که : چطور بعد از درج و اضافه يک رکود، شماره اختصاصي اون يعني Id که اتونامبر هست رو بدست بياريم؟؟

بوسیله SELECT @@IDENTITY میشه.

Hossis
چهارشنبه 12 خرداد 1389, 22:39 عصر
بوسیله SELECT @@IDENTITY میشه.
کاش مي‌شد يک مثالي مي زديد! حتي به يک خط

b.mahsa
چهارشنبه 12 خرداد 1389, 22:42 عصر
آقای Ashkan209 به نکته ی خوبی اشاره کردن.
فکر میکنم برای استفاده از متد addparametr کد زیر بهتر باشه.



Dim com As New SqlCommand("Update Pro Set Nam=?,Famil=? ,Age=? Where Id=" & txId.Text, con)

com.Parameters.AddWithValue("?Nam", TextBox1.Text)
com.Parameters.AddWithValue("?Famil", TextBox2.Text)
com.Parameters.AddWithValue("?Age", TextBox3.Text )
con.Open()
com.ExecuteNonQuery()
con.Close()

Hossis
چهارشنبه 12 خرداد 1389, 22:48 عصر
آقای Ashkan209 به نکته ی خوبی اشاره کردن.
فکر میکنم برای استفاده از متد addparametr کد زیر بهتر باشه.

ظاهرا SQLCommand با بانک اکسس کار نمي کنه بلکه با پايگاه MDF کار مي کند

Open-Source
چهارشنبه 12 خرداد 1389, 22:51 عصر
میتونی به این صورت بزرگترین مقدار ور بدست بیاری:

SELECT MAX(ID) AS Max
FROM Table1


اینم یه روش دیگه (از روش بالایی بهتره؛ آخه اگه افرادی همزمان هم با جدول کار کنند به مشکل بر نمو خورند):

SELECT SCOPE_IDENTITY() AS Last_Id


اینم یه روش دیگه:

select @@identity from Table1

b.mahsa
چهارشنبه 12 خرداد 1389, 22:51 عصر
شما چون بانکتون accesse باید از OleDb.OleDbCommand به جای sqlcommand استفاده کنید.