2017-12-24 1 views
1

Ich bin ein kleines Telefonbuch-Anwendung erstellen und ich speichern Telefone in einer Access-Datenbank in Tabelle namens Telefone, deren Felder sind: FullName, Job, Phone1, Phone2, Notizen und SN primäre Schlüssel.oledbexception wird für Eingabe, die von Zugriff akzeptiert wird

Ich habe gesetzt Fullname und phone1 auf erforderlich und stellen Gültigkeitsregel für Fullname zu Len([FullName])>3 und Gültigkeitsregel für beide phone1 und phone2 zu Like "[0-9]*", habe ich auch Prüfungsmeldungen für die Validierungsregeln festgelegt.

in einer WPF-Anwendung, die ich die Access-Datenbank unter Verwendung von Visual Studio hinzugefügt habe den Datensatz und Tableadapter-Code zu generieren, ist dies MainWindow.xaml:

<Window x:Class="MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="MainWindow" Height="253" Width="685"> 
<Grid Height="206" Width="658"> 
    <Label Content="FullName" Height="28" HorizontalAlignment="Left" Margin="12,12,0,0" Name="Label1" VerticalAlignment="Top" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="78,16,0,0" Name="FullName" VerticalAlignment="Top" Width="185" /> 
    <Label Content="Job" Height="28" HorizontalAlignment="Left" Margin="29,46,0,0" Name="Label2" VerticalAlignment="Top" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="78,46,0,0" Name="Job" VerticalAlignment="Top" Width="185" /> 
    <Label Content="Phone1" Height="28" HorizontalAlignment="Left" Margin="22,75,0,0" Name="Label3" VerticalAlignment="Top" /> 
    <Label Content="Phone2" Height="28" HorizontalAlignment="Left" Margin="269,16,0,0" Name="Label4" VerticalAlignment="Top" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="78,75,0,0" Name="Phone1" VerticalAlignment="Top" Width="110" /> 
    <TextBox Height="23" HorizontalAlignment="Left" Margin="325,21,0,0" Name="Phone2" VerticalAlignment="Top" Width="110" /> 
    <Label Content="Notes" Height="28" HorizontalAlignment="Left" Margin="274,56,0,0" Name="Label5" VerticalAlignment="Top" /> 
    <TextBox Height="95" HorizontalAlignment="Left" Margin="325,60,0,0" Name="Notes" VerticalAlignment="Top" Width="328" AcceptsReturn="True" AcceptsTab="True" /> 
    <Button Content="Save" Height="37" HorizontalAlignment="Left" Margin="274,161,0,0" Name="Button2" VerticalAlignment="Top" Width="135" /> 
</Grid> 

dies Handler speichern klicken:

private button2_Click(object sender , RoutedEventArgs e) 
{ 
    try 
    { 
     PhonesDataSetPhonesTableAdapter.Insert(FullName.Text, Job.Text, Phone1.Text, Phone2.Text, Notes.Text); 
    } catch(OleDbException ex) { 
     MessageBox.Show(ex.Message); 
    }   
} 

die PhonesDataSetPhonesTableAdapter ist wie folgt definiert:

Global.projectName.PhonesDataSetTableAdapters.PhonesTableAdapter PhonesDataSetPhonesTableAdapter = new Global.projectName.PhonesDataSetTableAdapters.PhonesTableAdapter(); 

Wenn ich starten Anwendung und setzen John als Fullname und programmer als Job und 2137976 als phone1 Nummer ein OleDbException mit der Validierungsnachricht für phone1 geworfen wird, die

Ihre Telefonnummer enthält Briefe, sollte es nur enthalten Zahlen

aber es enthält keinen Brief und wenn ich den gleichen Eingang durch Zugang versuche, akzeptiert es, was ist hier los? und wie kann ich es funktionieren lassen?

+0

Beachten Sie, dass Ihr Ausdruck wertet nur das erste Zeichen der Telefonnummer. Alle anderen Zeichen können Buchstaben sein. –

Antwort

1

Der OleDb-Treiber erfordert ein anderes Platzhalterzeichen in seiner Like-Anweisung. Anstelle von * will es jetzt eine % (die ANSI-92 ist).

Wenn ich in MS Access die Validierungsregel zu Like "[0-9]%" ändern, kann ich Zeilen mit einer Telefonnummer "123" einfügen, indem Sie auf diesen Tableadapter einfügen.

Der Nachteil davon ist, dass in Access Sie nicht mehr Werte einfügen können, da Access nun das Literalzeichen% nach einer einzelnen Ziffer erwartet.

Wenn Sie möchten, dass sowohl Ihre Anwendung als auch Ihr Zugriff funktioniert, funktioniert der Odbc-Treiber.

Hier einige Hintergrundinformationen zu diesem Thema: Microsoft Jet wildcards: asterisk or percentage sign?

Verwandte Themen