我似乎這段代碼運行時得到一個OleDb的例外是未處理的,我真的不能明白爲什麼...OleDb的例外是未處理
代碼連接 謝謝! 詹姆斯
Module DataAccess
Private Builder As New OleDb.OleDbConnectionStringBuilder With
{
.Provider = "Microsoft.ACE.OLEDB.12.0",
.DataSource = IO.Path.Combine(Application.StartupPath, "Database1.accdb")
}
''' <summary>
''' Used to remove the current item selected in the txtFirstName text box.
''' </summary>
''' <param name="Name"></param>
''' <remarks></remarks>
Public Sub RemmoveFemale(ByVal Name As String)
Using cn As New OleDb.OleDbConnection With
{
.ConnectionString = Builder.ConnectionString
}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn}
cmd.CommandText =
<SQL>
DELETE FROMCustomerNames WHERE CustomerName = @CustomerName
</SQL>.Value
cmd.Parameters.Add(New OleDb.OleDbParameter With {.DbType = DbType.String, .ParameterName = "@CustomerName", .Value = Name})
cn.Open()
Dim Affected As Int32 = cmd.ExecuteNonQuery
End Using
End Using
End Sub
''' <summary>
''' Called in Form1 on FormClosing event to update the database table if
''' needed.
''' </summary>
''' <param name="sender"></param>
''' <remarks></remarks>
Public Sub UpdateFemaleNames(ByVal sender As AutoCompleteStringCollection)
Dim NewNames As New List(Of String)
Using cn As New OleDb.OleDbConnection With
{
.ConnectionString = Builder.ConnectionString
}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn}
cmd.CommandText =
<SQL>
SELECT CustomerName
FROM CustomerNames
WHERE CustomerName = @CustomerName
</SQL>.Value
cmd.Parameters.Add(New OleDb.OleDbParameter With {.DbType = DbType.String, .ParameterName = "@CustomerName"})
cn.Open()
For x As Int32 = 0 To sender.Count - 1
cmd.Parameters("@CustomerName").Value = sender.Item(x)
Dim Result As String = CStr(cmd.ExecuteScalar)
If String.IsNullOrWhiteSpace(Result) Then
NewNames.Add(sender.Item(x))
End If
Next
If NewNames.Count > 0 Then
cmd.CommandText =
<SQL>
INSERT INTO CustomerNames (CustomerName,Gender) VALUES (@CustomerNamee,@Gender)
</SQL>.Value
cmd.Parameters.Add(New OleDb.OleDbParameter With {.DbType = DbType.String, .ParameterName = "@Gender", .Value = "Female"})
For Each Item In NewNames
cmd.Parameters("@CustomerName").Value = Item
cmd.ExecuteReader()
Next
End If
End Using
End Using
End Sub
''' <summary>
''' Used in Form1 DataGridView1 for learning purposes only
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function AllFemaleNames() As DataTable
Dim dt As New DataTable
Using cn As New OleDb.OleDbConnection With
{
.ConnectionString = Builder.ConnectionString
}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn}
cmd.CommandText =
<SQL>
SELECT Identifier, CustomerName
FROM CustomerNames
WHERE Gender = 'Female'
ORDER BY CustomerName;
</SQL>.Value
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
End Using
Return dt
End Function
''' <summary>
''' Load only female first names into the auto complete source
''' </summary>
''' <returns></returns>
''' <remarks></remarks>
Public Function LoadFemaleNames() As AutoCompleteStringCollection
Dim TheNameList As New AutoCompleteStringCollection
Using cn As New OleDb.OleDbConnection With
{
.ConnectionString = Builder.ConnectionString
}
Using cmd As New OleDb.OleDbCommand With {.Connection = cn}
cmd.CommandText =
<SQL>
SELECT CustomerName
FROM CustomerNames
WHERE Gender = 'Female'
ORDER BY CustomerName;
</SQL>.Value
cn.Open()
Dim Reader As OleDb.OleDbDataReader = cmd.ExecuteReader
If Reader.HasRows Then
While Reader.Read
TheNameList.Add(Reader.GetString(0))
End While
Reader.Close()
End If
End Using
End Using
Return TheNameList
End Function
End Module
Module StringExtensions
<Runtime.CompilerServices.Extension()> _
Public Function ProperCase(ByVal sender As String) As String
Dim TI As System.Globalization.TextInfo = New System.Globalization.CultureInfo("en-US", False).TextInfo
Return TI.ToTitleCase(sender.ToLower)
End Function
End Module
''' <summary>
''' Simple demo for auto complete adding items that are not in the list when pressing ENTER in TextBox1.
''' </summary>
''' <remarks></remarks>
Public Class Form1
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
UpdateFemaleNames(txtFirstName.AutoCompleteCustomSource)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
txtFirstName.AutoCompleteMode = AutoCompleteMode.SuggestAppend
txtFirstName.AutoCompleteSource = AutoCompleteSource.CustomSource
txtFirstName.AutoCompleteCustomSource = LoadFemaleNames()
' The next two lines are for demo purposes only to see what is in the list for the TextBox with First names
DataGridView1.DataSource = AllFemaleNames()
DataGridView1.Columns("CustomerName").AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill
End Sub
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles txtFirstName.KeyDown
If e.KeyCode = Keys.Enter Then
If Not String.IsNullOrWhiteSpace(txtFirstName.Text) Then
If Not txtFirstName.AutoCompleteCustomSource.Contains(txtFirstName.Text.ToLower) Then
txtFirstName.AutoCompleteCustomSource.Add(txtFirstName.Text.ProperCase)
End If
txtFirstName.Text = txtFirstName.Text.ProperCase
e.SuppressKeyPress = True
End If
End If
End Sub
Private Sub cmdRemoveName_Click(sender As Object, e As EventArgs) Handles cmdRemoveName.Click
If Not String.IsNullOrWhiteSpace(txtFirstName.Text) Then
Dim CurrentName As String = txtFirstName.Text.Trim.ProperCase
If My.Dialogs.Question(String.Format("Remove '{0}'", CurrentName)) Then
RemmoveFemale(CurrentName)
txtFirstName.AutoCompleteCustomSource.Remove(txtFirstName.Text)
txtFirstName.Text = ""
End If
End If
End Sub
End Class
請說明你的要求。錯誤發生在哪裏?什麼是異常消息說?你已經發布了一段代碼,沒有任何真正的解釋,或者你試圖解決它。 – Kami
嗨它當我嘗試調試代碼我得到的錯誤,它運行1錯誤說:這是一個OleDb異常未處理。類型「System.Data.OleDb.OleDbException」的未處理的異常在System.Data.dll中發生 其它信息:沒有用於一個或多個必需參數給定值。我已經掃描了代碼並檢查了代碼 – James
上的客戶名字段的MDB的表和字段名稱。Visual Studio通常會自動停止在導致錯誤的行。你知道哪條線可能導致問題。代碼中有十多個實例可能導致此問題。看到這篇文章時 - http://www.codeproject.com/Articles/79508/Mastering-Debugging-in-Visual-Studio-2010-A-Beginn - 關於如何在Visual Studio調試的基本指南。如果可以,請確定該行和錯誤消息。 – Kami