2017-12-24 14 views
1

私は小さな電話帳アプリケーションを構築していますが、フルネーム、ジョブ、Phone1、Phone2、Notes、SNプライマリのフィールドを持つ電話機キー。アクセスで受け入れられた入力に対してoledbexceptionがスローされました

fullnameとphone1を必須に設定し、fullnameの検証ルールをLen([FullName])>3に設定し、phone1とphone2の両方の検証ルールをLike "[0-9]*"に設定しました。検証ルールの検証メッセージも設定します。私は、データセットとTableAdapterのコードを生成するためのVisual Studioを使用してアクセスするデータベースを追加しましたWPFアプリケーションで

、これは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> 

これはハンドラをクリックして保存します:

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); 
    }   
} 

PhonesDataSetPhonesTableAdapterは次のように定義されています。

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

私はアプリケーションを起動してのphone1番号などのフルネームとジョブとしてprogrammer2137976としてJohnを置くときOleDbExceptionがあなたの電話番号は、文字が含まれている、それだけ含まれている必要があり

あるのphone1の検証メッセージと共にスローされます数字

しかし、それは何も手紙を含んでおらず、同じ入力をアクセスで試してみると、ここで何が起こっているのですか?どのように私はそれを動作させるのですか?

+0

注:ここでは

は、この問題に関するいくつかの背景です。他の文字は文字でもかまいません。 –

答えて

1

OleDbドライバでは、Likeステートメントに別のワイルドカード文字が必要です。 *の代わりに%(これはANSI-92です)が必要です。

私がMS Accessでアクセス規則をLike "[0-9]%"に変更した場合、そのテーブルアダプターにinsertを呼び出して電話番号 "123"の行を挿入できます。

これは、Accessでは1桁の数字の後にリテラル文字%が必要になるため、値を挿入できないという欠点があります。

アプリケーションとアクセスの両方を機能させたい場合は、Odbcドライバを使用すると機能します。あなたの式は唯一の電話番号の最初の文字を評価Microsoft Jet wildcards: asterisk or percentage sign?

関連する問題