在操作DataTable时,调用一个find()时提示如下错误:
异常详细信息:System.Data.MissingPrimaryKeyException:表没有主键
最后在MSDN上找到了解决办法.具体是因为调用这个方法前提是其主体DataTable必须手动设置主键.过程如下:
private void button1_Click(object sender, EventArgs e)
{
string UserName = this.txt_UserName.Text;
string UserPwd = this.txt_UserPwd.Text;
string strsql = "select * from tb_User where UserName='"+UserName+"'";
DBCon dbcULogin = new DBCon();
DataTable dt= dbcULogin.GetDataTable(strsql);
if (dt.Rows.Count > 0)
{
//DataColumn[] keys = new DataColumn[1];
//keys[0] = dt.Columns[1];//这里表的第一列为UserName
// dt.PrimaryKey = keys;
DataRow dr = dt.Rows.Find(UserName);
if (dr[2].Equals(UserPwd))
{
//MessageBox.Show(dr[1].ToString(), "提示");
this.Close();
UserManage UserM = new UserManage();
UserM.ShowDialog();
}
else
{
string ShowStr = "请输入正确的密码!";
CommonClass.MessageShow(ShowStr);
}
}
else
{
string ShowStr = "你输入的用户名不存在!";
CommonClass.MessageShow(ShowStr);
}
}
直接运行这段代码会出现如上所提示的错误,原因在上面已经说了.因此只需将上面注释去掉就可以了.这里只设置了一个主键,因为在使用时只需要一个主键,这个主键是查询表的主键,与DataBase中的表tb_User的主键是没有直接关系的,也就是你所设置的主键可以与表tb_user的不同,但上面红色注明的两个地方必须保持一致才行.有关表的主键设置的详细资料参加MSDN.
以上是我对这个问题的看法,各位同仁,多多指教.