将 DataRow foundRow 与 DataTable 一起使用时出现未处理的异常
Unhandled Exception When Using DataRow foundRow With DataTable
同样,这是关于 DataTable
,而不是数据库。
几件事:
- 这是 WPF 应用程序的一部分
- 搜索是按钮事件的结果
DataTable
包含在它自己的 class (MainDataTable.cs
)
- 数据Table 由文本输入填充 ('Page1.xaml.cs')
- 按钮和搜索方法包含在它们自己的 class(Page2.xaml.cs)
中
- 我遗漏了 XAML 以及数据的存储方式。有需要我可以展示一下
MainDataTable.cs(其中包含 DataTable
)
public class MainDataTable
{
public static DataTable dataMain = new DataTable("Customer Info Database");
public static void CreateTable1()
{
dataMain.Columns.Add("CustID", typeof(int));
dataMain.PrimaryKey = new DataColumn[] { dataMain.Columns["ID"] };
dataMain.Columns.Add("CustName", typeof(string));
dataMain.Columns.Add("CustAge", typeof(int));
dataMain.Columns.Add("CustAlign", typeof(string));
}
public static void EnterNewRows(int CustID, string CustName, int CustAge, string CustAlign)
{
dataMain.Rows.Add(CustID, CustName, CustAge, CustAlign);
}
}
Page1.xaml.cs
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}
private void Finished_Button(object sender, RoutedEventArgs e)
{
int ParseID;
int ParseAge;
bool Parse1 = int.TryParse(txtID.Text, out ParseID);
bool Parse2 = int.TryParse(txtAge.Text, out ParseAge);
MainDataTable.CreateTable1();
MainDataTable.EnterNewRows(ParseID, txtName.Text, ParseAge, txtAlignment.Text);
this.NavigationService.Navigate(new Page0());
Page2.xaml.cs
public partial class Page2 : Page
{
public Page2()
{
InitializeComponent();
}
private void SearchBtn1Clk(object sender, RoutedEventArgs e)
{
int IDFind = Convert.ToInt32(searchIdTxtBox.Text);
DataRow foundRow = MainDataTable.dataMain.Rows.Find(IDFind);
if (foundRow != null)
{
MessageBox.Show(foundRow[0].ToString());
}
else
{
MessageBox.Show("No Customer Found with ID:" + IDFind);
}
}
}
这些值从 Page1.xaml.cs 文本输入正确地存储在 table 中(我知道这一点是因为我检查了它后面的行 运行),但是当点击搜索时,这个错误发生:
System.Data.dll 中发生了 'System.Data.MissingPrimaryKeyException' 类型的未处理异常
附加信息:Table 没有主键。
您没有名为 ID
的列。它叫做 CustID
。不是吗?更新此行并重试。
dataMain.PrimaryKey = new DataColumn[] { dataMain.Columns["CustID"] };
除非你想完成其他事情。
同样,这是关于 DataTable
,而不是数据库。
几件事:
- 这是 WPF 应用程序的一部分
- 搜索是按钮事件的结果
DataTable
包含在它自己的 class (MainDataTable.cs
)- 数据Table 由文本输入填充 ('Page1.xaml.cs')
- 按钮和搜索方法包含在它们自己的 class(Page2.xaml.cs) 中
- 我遗漏了 XAML 以及数据的存储方式。有需要我可以展示一下
MainDataTable.cs(其中包含 DataTable
)
public class MainDataTable
{
public static DataTable dataMain = new DataTable("Customer Info Database");
public static void CreateTable1()
{
dataMain.Columns.Add("CustID", typeof(int));
dataMain.PrimaryKey = new DataColumn[] { dataMain.Columns["ID"] };
dataMain.Columns.Add("CustName", typeof(string));
dataMain.Columns.Add("CustAge", typeof(int));
dataMain.Columns.Add("CustAlign", typeof(string));
}
public static void EnterNewRows(int CustID, string CustName, int CustAge, string CustAlign)
{
dataMain.Rows.Add(CustID, CustName, CustAge, CustAlign);
}
}
Page1.xaml.cs
public partial class Page1 : Page
{
public Page1()
{
InitializeComponent();
}
private void Finished_Button(object sender, RoutedEventArgs e)
{
int ParseID;
int ParseAge;
bool Parse1 = int.TryParse(txtID.Text, out ParseID);
bool Parse2 = int.TryParse(txtAge.Text, out ParseAge);
MainDataTable.CreateTable1();
MainDataTable.EnterNewRows(ParseID, txtName.Text, ParseAge, txtAlignment.Text);
this.NavigationService.Navigate(new Page0());
Page2.xaml.cs
public partial class Page2 : Page
{
public Page2()
{
InitializeComponent();
}
private void SearchBtn1Clk(object sender, RoutedEventArgs e)
{
int IDFind = Convert.ToInt32(searchIdTxtBox.Text);
DataRow foundRow = MainDataTable.dataMain.Rows.Find(IDFind);
if (foundRow != null)
{
MessageBox.Show(foundRow[0].ToString());
}
else
{
MessageBox.Show("No Customer Found with ID:" + IDFind);
}
}
}
这些值从 Page1.xaml.cs 文本输入正确地存储在 table 中(我知道这一点是因为我检查了它后面的行 运行),但是当点击搜索时,这个错误发生:
System.Data.dll 中发生了 'System.Data.MissingPrimaryKeyException' 类型的未处理异常 附加信息:Table 没有主键。
您没有名为 ID
的列。它叫做 CustID
。不是吗?更新此行并重试。
dataMain.PrimaryKey = new DataColumn[] { dataMain.Columns["CustID"] };
除非你想完成其他事情。