我正在构建一个小型电话簿应用程序,并且我将电话存储在名为phone的表中的访问数据库中,其字段为:FullName,Job,Phone1,Phone2,Notes和SN主键。
我已将fullname和phone1设置为必需,并将fullname的验证规则设置为Len([FullName])>3
,将phone1和phone2的验证规则设置为Like "[0-9]*"
,我还为验证规则设置了验证消息。
在wpf应用程序中,我使用visual studio添加了访问数据库来生成数据集和tableadapter代码,这是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();
当我启动应用程序并将John
作为全名而programmer
作为作业而2137976
作为phone1号时,将抛出OleDbException并附带phone1的验证消息
您的电话号码包含字母,只应包含数字
但它不包含任何字母,当我通过访问尝试相同的输入时,它会接受它,这里发生了什么?以及如何使其发挥作用。
答案 0 :(得分:1)
OleDb驱动程序在其Like
语句中需要不同的通配符。而不是*
它现在需要%
(即ANSI-92)。
如果我在MS Access中将验证规则更改为Like "[0-9]%"
,我可以插入带有电话号码的行&#34; 123&#34;通过在tableadapter上调用insert。
这样做的缺点是在Access中你不能再插入值,因为Access现在需要一个数字后的文字字符%。
如果您希望应用程序和访问权限都能正常工作,那么使用Odbc驱动程序将会起作用。
以下是该问题的背景知识:Microsoft Jet wildcards: asterisk or percentage sign?