PDA

View Full Version : مشکل با دستور INSERT



melika-leyla
جمعه 24 خرداد 1387, 09:20 صبح
من یک بانک اکسس دارم با نام mojod واین بانک دارای سه فیلد به نام mojodi,dateاست می خواهم یک سطر به این بانک اضافه کنم ولی وقتی از دستورinsert sql استفاده میکنم ارور زیر را می دهد
system.null refrence Excptiom



Imports System.Data
Imports System.Data.OleDb
PublicClass Form1
Inherits System.Windows.Forms.Form
Dim da As OleDbDataAdapter
Dim con As OleDbConnection
Dim cmd As OleDbCommand
Dim ds As New DataSet
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

con = New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=d:\database\behnosh.mdb")
da = New OleDbDataAdapter("select * from mojod", con)
ds.Clear()
con.Open()
da.Fill(ds, "mojod")
TextBox2.DataBindings.Add(New Binding("text", ds, "mojod.mojodi"))
da.Update(ds, "mojod")
con.Close()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim cmdclasf As OleDbCommand
Dim strsql As String
Call empty()
Me.BindingContext(ds, "mojod").AddNew()
strsql = "insert into mojod(mojodi,date,radif) values ('" & TextBox2.Text & "','" & TextBox3.Text & "','" & TextBox1.Text & "')"
ds.Clear()
con.Open()
cmdclasf = New OleDbCommand(strsql, con)
cmdclasf.ExecuteNonQuery()
MsgBox("ي©ي§ کںêé ¬§")
ds.Clear()
da.Fill(ds, "mojod")
con.Close()
End Sub
EndClass



وقتی از روش ds.tables("mojod").rows.add(new row) برای اضافه کردن استفاده می کنم ارورزیر رامیدهد


object refrence notset to an istance of an object

Amateur_G
جمعه 24 خرداد 1387, 11:35 صبح
سلام.
من براي شما چند مورد را توضيح مي دهم اميدوارم مشكلتان حل شود:
اولا شما فرموديد داراي 2 فيلد است اما بنظر مي آيد داراي 3 فيلد باشد.
دوما شما از نام date براي فيلد خود نمي توانيد استفاده كنيد چون از نام هاي رزرو شده در اكسس مي باشد.
سوما من از شما خواهش مي كنم كه از آبجكت dataview براي binding استفاده كنيد كه من يه نمونه كد برايتان ميگزارم:




Dim objDataAdapter As New OleDbDataAdapter
Dim objDataSet As New DataSet

Dim objDataView As DataView

Dim objCurrencyManager As CurrencyManager

objDataSet.Clear()
objDataAdapter.SelectCommand = New OleDbCommand
objDataAdapter.SelectCommand.Connection = objconnection
objDataAdapter.SelectCommand.CommandText = "select * from TableName"

objDataAdapter.SelectCommand.CommandType = CommandType.Text

objconnection.Open()

objDataSet = New DataSet
objDataAdapter.Fill(objDataSet, "TableName")
objDataView = New DataView(objDataSet.Tables("TableName"))
objCurrencyManager = CType(Me.BindingContext(objDataView), CurrencyManager)

objconnection.Close()

TextBox1.DataBindings.Clear()
TextBox1.DataBindings.Add("text", objDataView, "FiledName")
TextBox1.Text=
objDataView(objCurrencyManager.Position)("FiledName")

خط آخر طريقه دسترسي به filed ها در dataview است.
ودر آخر اينكه براي دستور insert از Parameters استفاده كنيد.اينم كدش:




Dim objCommand As New OleDbCommand
objconnection.Open()
objCommand.Connection = objconnection
objCommand.CommandText = "INSERT INTO TableName" & _
"(FiledName1,FiledName2,FiledName3)" & _
"VALUES(@ParameterName1,@ParameterName2,@ParameterN ame3);"

objCommand.Parameters.AddWithValue("@ParameterName2", Trim(TextBox1.Text))
objCommand.Parameters.AddWithValue("@ParameterName2", Trim(TextBox2.Text))
objCommand.Parameters.AddWithValue("@ParameterName3", Trim(TextBox3.Text))

Try

objCommand.ExecuteNonQuery()
Catch sqlexceptionerr As OleDbException
MessageBox.Show(sqlexceptionerr.Message)
End Try

objconnection.Close()



اميدوارم جسارت منو ببخشيد.در حد سوادم گفتم.(آخه آماتورم:لبخندساده:)
موفق و پيروز باشيد.:تشویق:

melika-leyla
جمعه 24 خرداد 1387, 13:19 عصر
سلام.
من براي شما چند مورد را توضيح مي دهم اميدوارم مشكلتان حل شود:
اولا شما فرموديد داراي 2 فيلد است اما بنظر مي آيد داراي 3 فيلد باشد.
دوما شما از نام date براي فيلد خود نمي توانيد استفاده كنيد چون از نام هاي رزرو شده در اكسس مي باشد.
سوما من از شما خواهش مي كنم كه از آبجكت dataview براي binding استفاده كنيد كه من يه نمونه كد برايتان ميگزارم:



Dim objDataAdapter AsNew OleDbDataAdapter
Dim objDataSet AsNew DataSet
Dim objDataView As DataView

Dim

objCurrencyManager As CurrencyManager

objDataSet.Clear()
objDataAdapter.SelectCommand = New OleDbCommand
objDataAdapter.SelectCommand.Connection = objconnection
objDataAdapter.SelectCommand.CommandText = "select * from TableName"
objDataAdapter.SelectCommand.CommandType = CommandType.Text
objconnection.Open()
objDataSet =


New DataSet

objDataAdapter.Fill(objDataSet, "TableName")
objDataView = New DataView(objDataSet.Tables("TableName"))
objCurrencyManager = CType(Me.BindingContext(objDataView), CurrencyManager)
objconnection.Close()
TextBox1.DataBindings.Clear()
TextBox1.DataBindings.Add("text", objDataView, "FiledName")
TextBox1.Text=
objDataView(objCurrencyManager.Position)("FiledName")

خط آخر طريقه دسترسي به filed ها در dataview است.
ودر آخر اينكه براي دستور insert از Parameters استفاده كنيد.اينم كدش:



Dim


objCommand AsNew OleDbCommand

objconnection.Open()
objCommand.Connection = objconnection
objCommand.CommandText = "INSERT INTO TableName" & _
"(FiledName1,FiledName2,FiledName3)" & _
"VALUES(@ParameterName1,@ParameterName2,@ParameterN ame3);"
objCommand.Parameters.AddWithValue("@ParameterName2", Trim(TextBox1.Text))
objCommand.Parameters.AddWithValue("@ParameterName2", Trim(TextBox2.Text))
objCommand.Parameters.AddWithValue("@ParameterName3", Trim(TextBox3.Text))
Try
objCommand.ExecuteNonQuery()
Catch sqlexceptionerr As OleDbException
MessageBox.Show(sqlexceptionerr.Message)
EndTry
objconnection.Close()


اميدوارم جسارت منو ببخشيد.در حد سوادم گفتم.(آخه آماتورم:لبخندساده:)

موفق و پيروز باشيد.:تشویق:


ممنون از راهنماییهاتون ندانستن عیب نیست ..
ولی من میخواهم اشکال این برنامه را بدونم

Amateur_G
دوشنبه 27 خرداد 1387, 16:07 عصر
سلام.
عرض كردم كه Date نميتونه اسم filed باشه چون تو اكسس جزو كلمات كليديه.
از متد addrow هم در dataview استفاده كنيد نه در dataTable .
موفق باشيد.