مشكل در اجراي دستورات sql در VB.NET

emad4000

Member
سلام
من 3 تا مشكل توي برنامه ام دارم كه اگه ميشه كمكم كنيد
در برنامه ام يه ديتاگريد دارم و 3 تا دكمه . دكمه اول بايد يه رديف از ديتاگريد رو پاك كنه كه دستوراتش اينه
کد:
        rowi = DataGrid1.CurrentRowIndex.ToString
        Dim WorkerDelCmd As OleDbCommand
        Dim DelSqlStr As String
        DelSqlStr = "Delete From WorkerList Where ID = " & rowi
        Conn.Open()
        WorkerDelCmd.CommandText = DelSqlStr
        WorkerDelCmd.Connection = Conn
        WorkerDelCmd.ExecuteNonQuery()
        Conn.Close()
ولي كار نمي كنه و اين پيغام رو ميده
Object reference not set to an instance of an object
---------------------------------------------------------------------------------------------------------
دكمه دوم بايد با يه ديالوگ باكس به اسم AddWorkerDialog چندتا متغير بگيره و به ديتاست اضافه كنه
کد:
        Dim AddWorkerDialog As New AddWorker
        Dim AddWorkerCmd As OleDbCommand
        Dim AddSqlStr, fnv, lnv, fav, idv, adv As String
        AddWorkerDialog.ShowDialog()
        If AddWorkerDialog.DialogResult = DialogResult.OK Then
            Me.BindingContext(WorkerDSName, "WorkerList").AddNew()
            fnv = AddWorkerDialog.FNameBox.Text.ToString
            lnv = AddWorkerDialog.LNameBox.Text.ToString
            fav = AddWorkerDialog.FatherBox.Text.ToString
            idv = AddWorkerDialog.IDBox.Text.ToString
            adv = AddWorkerDialog.AddressBox.Text.ToString
            AddSqlStr = "Insert Into WorkerList(FirstName,LastName,FatherName,CardID,Address) Values ( " & fnv & " , " & lnv & " , " & fav & " , " & idv & " , " & adv & " );"
            Conn.Open()
            AddWorkerCmd = New OleDbCommand(AddSqlStr, Conn)
            AddWorkerCmd.ExecuteNonQuery()
            WorkerDSName.Clear()
            WorkerAdName.Fill(WorkerDSName, "WorkerList")
            Conn.Close()
        End If
اين يكي هم اين پيغام رو ميده
No value given for one or more required parameters
---------------------------------------------------------------------------------------------------------
سومي هم بايد تغيرات ديتاگريد رو كه به ديتاست وصله آپديت كنه تو ديتابيس
کد:
        Dim WorkerCB As OleDbCommandBuilder
        WorkerCB = New OleDbCommandBuilder(WorkerAdName)
        WorkerAdName.Update(WorkerDSName, "WorkerList")
ولي اين پيغام رو ميده
Dynamic generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information

خلاصه اينكه هيچ كدومشون كار نمي كنن . ممنون ميشم اگه كمكم كنيد
 

emad4000

Member
ضمنا بگم كه من ديتاست و آداپتر و كانكشن رو ابتداي برنامه هنگام لود تعريف كردم
کد:
        Dim WorkerDSName As New DataSet
        Dim WorkerAdName As OleDbDataAdapter
        Dim Conn As OleDbConnection
        Dim connStr, sqlStr1, sqlStr2 As String
        connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database.mdb"
        sqlStr1 = "SELECT ID as [شماره کارگر],FirstName as نام,LastName as [نام خانوادگي],FatherName as [نام پدر],CardID as [شماره شناسنامه],Address as آدرس FROM WorkerList"
        Conn = New OleDbConnection(connStr)
        Conn.Open()
        WorkerAdName = New OleDbDataAdapter(sqlStr1, Conn)
        WorkerDSName.Clear()
        WorkerAdName.Fill(WorkerDSName, "WorkerList")
        DataGrid1.DataSource = WorkerDSName.Tables("WorkerList")
        Conn.Close()
و اينا رو به صورت عمومي تعريف كردم كه توي توابع ديگه هم كار كنن
 

emad4000

Member
می بینم که اینجا همه اوضاعشون از من بدتره :eek:
خودم دوتاشو فهمیدم . می گم که شما هم یاد بگیرین . آره قربونش :lol:
و حالا اصل مطلب
توي اولي من به جاي
کد:
Dim WorkerDelCmd As OleDbCommand
نوشتم
کد:
Dim WorkerDelCmd As New OleDbCommand
همين . البته هنوز نمي دونم فرقشون چيه . اگه مي دونين به منم بگین :-?
----------------------------------------------------------------
دومي رو هم فهميدم.مي باست براي هر كدوم از value ها دوتا كوتيشن ' ' مي ذاشتم كه يادم رفته بود :cry:
-----------------------------------------------------------------
و اما سومي
هرکارش می کنم همون ارور رو می ده :razz:
نكته جالبش اينه كه از اين كد سومي توي دوتا برنامه ديگه استفاده كردم
يكيش عين همين بود اما ارور نمي داد
يكي ديگشم به جاي ديتاگريد از فيلد متني استفاده كردم كاملا درست كار مي كنه
كمكم كنيد . حسابي علاف شدم :sad: :cry: :mad: :neutral: :-? :razz: :eek:
 

MnavidM

Active Member
سلام.

آقا عماد لطف کن این کد هایی که می نویسی در بین تگ
کد:
  قرار بدی تا بهتر بشه خوندش .

نوشته های قبلیت رو ویرایش کردم , تا بهتر خونده بشه :wink:

موفق باشی.
نوید.
 

جدیدترین ارسال ها

بالا