2014-06-26 44 views
0

再次在代碼中的錯誤。請幫幫我。ExecuteReader需要一個開放且可用的Connection。連接的當前狀態已關閉。在vb.net請幫我

'Private Sub btn_Issue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Issue.Click 
     Dim con111 As New OleDbConnection 
     con111.ConnectionString = "Provider=microsoft.jet.oledb.4.0;data source=..\library.mdb" 
     Dim theQuery As String = "SELECT * FROM NormalTransaction WHERE [email protected]" 
     Dim cmd11 As OleDbCommand = New OleDbCommand(theQuery, con111) 
     cmd11.Parameters.AddWithValue("@barcode", txt_BarcodeNo.Text) 


     Using reader11 As OleDbDataReader = cmd11.ExecuteReader() 

      If reader11.HasRows Then 
       ' Book Already Exists 
       MsgBox("Book Already Exists!", MsgBoxStyle.Exclamation, "SIMS Library") 
      Else 
       ' User does not exist, add them 
       Dim cmd12 As New OleDb.OleDbCommand 

       If Not con111.State = ConnectionState.Open Then 
        con111.Open() 
       End If  

       cmd12.Connection = con111  

       cmd12.CommandText = "INSERT INTO NormalTransaction([RegNo],[Name],[MemType],[Department],[BarCodeNo],[Title],[Author],[AccNo],[BookType],[CallNo],[Subject],[IssueDate],[DueDate]) VALUES (@a1,@a2,@a3,@a4,@a5,@a6,@a7,@a8,@a9,@a10,@a11,@a12,@a13)" 
       cmd12.Parameters.AddWithValue("@a1", txt_RegisterNo.Text) 
       cmd12.Parameters.AddWithValue("@a2", txt_Name.Text) 
       cmd12.Parameters.AddWithValue("@a3", txt_MemberType.Text) 
       cmd12.Parameters.AddWithValue("@a4", txt_Department.Text) 
       cmd12.Parameters.AddWithValue("@a5", txt_BarcodeNo.Text) 
       cmd12.Parameters.AddWithValue("@a6", txt_Title.Text) 
       cmd12.Parameters.AddWithValue("@a7", txt_Author.Text) 
       cmd12.Parameters.AddWithValue("@a8", txt_Accession.Text) 
       cmd12.Parameters.AddWithValue("@a9", txt_BookType.Text) 
       cmd12.Parameters.AddWithValue("@a10", txt_CallNo.Text) 
       cmd12.Parameters.AddWithValue("@a11", txt_Subject.Text) 
       cmd12.Parameters.AddWithValue("@a12", DateTimePicker1.Value) 
       cmd12.Parameters.AddWithValue("@a13", DateTimePicker2.Value) 

       cmd12.ExecuteNonQuery() 

       con111.Close() 

       MsgBox("Records Successfully Added!", MsgBoxStyle.Information, "Add New Customer!") 

      End If 
     End Using 

     con111.Close() 
    End Sub' 

回答

0

你只是打開連接太晚了,它需要的ExecuteReader調用之前被打開:

'Private Sub btn_Issue_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Issue.Click 
     Dim con111 As New OleDbConnection 
     con111.ConnectionString = "Provider=microsoft.jet.oledb.4.0;data source=..\library.mdb" 
     Dim theQuery As String = "SELECT * FROM NormalTransaction WHERE [email protected]" 
     Dim cmd11 As OleDbCommand = New OleDbCommand(theQuery, con111) 
     cmd11.Parameters.AddWithValue("@barcode", txt_BarcodeNo.Text) 

     con111.Open() 

     Using reader11 As OleDbDataReader = cmd11.ExecuteReader() 

      If reader11.HasRows Then 
       ' Book Already Exists 
       MsgBox("Book Already Exists!", MsgBoxStyle.Exclamation, "SIMS Library") 
      Else 
       ' User does not exist, add them 
       Dim cmd12 As New OleDb.OleDbCommand 

       cmd12.Connection = con111  

       cmd12.CommandText = "INSERT INTO NormalTransaction([RegNo],[Name],[MemType],[Department],[BarCodeNo],[Title],[Author],[AccNo],[BookType],[CallNo],[Subject],[IssueDate],[DueDate]) VALUES (@a1,@a2,@a3,@a4,@a5,@a6,@a7,@a8,@a9,@a10,@a11,@a12,@a13)" 
       cmd12.Parameters.AddWithValue("@a1", txt_RegisterNo.Text) 
       cmd12.Parameters.AddWithValue("@a2", txt_Name.Text) 
       cmd12.Parameters.AddWithValue("@a3", txt_MemberType.Text) 
       cmd12.Parameters.AddWithValue("@a4", txt_Department.Text) 
       cmd12.Parameters.AddWithValue("@a5", txt_BarcodeNo.Text) 
       cmd12.Parameters.AddWithValue("@a6", txt_Title.Text) 
       cmd12.Parameters.AddWithValue("@a7", txt_Author.Text) 
       cmd12.Parameters.AddWithValue("@a8", txt_Accession.Text) 
       cmd12.Parameters.AddWithValue("@a9", txt_BookType.Text) 
       cmd12.Parameters.AddWithValue("@a10", txt_CallNo.Text) 
       cmd12.Parameters.AddWithValue("@a11", txt_Subject.Text) 
       cmd12.Parameters.AddWithValue("@a12", DateTimePicker1.Value) 
       cmd12.Parameters.AddWithValue("@a13", DateTimePicker2.Value) 

       cmd12.ExecuteNonQuery() 

       con111.Close() 

       MsgBox("Records Successfully Added!", MsgBoxStyle.Information, "Add New Customer!") 

      End If 
     End Using 

     con111.Close() 
    End Sub' 
+0

現在,新的錯誤出現數據類型不匹配的條件表達式。只有BarCodeNo是Number,datetimepicker1, datetimepicker2是所有文本的剩餘日期 –

+0

如果barcodeno是一個數字,則將其作爲數字參數傳遞給cmd11.Parameters.AddWithValue(「@ barcode」,Convert.ToInt32(txt_BarcodeNo.Text)) – Esko

+0

仍然同樣的錯誤:( –

相關問題