删除操作函数如下所示:
protected void btnDlt_Click(object sender, EventArgs e)
{
//if (this.txtPID.Text == "")
//{
// SqlConnection con = personOperate.createCon();
// con.Open();
// SqlCommand cmd = new SqlCommand("delete from person where pID=''", con);
// cmd.ExecuteNonQuery();
// Response.Write("字段为空");
// return;
//}
if (!this.CustomValidator1.IsValid)
{
if (personOperate.delOperate(this.txtPID.Text))
{
Response.Write("删除成功");
this.fillDg();
}
else
{
Response.Write("删除失败");
}
}
}
public static bool delOperate(string pID)
{
try
{ SqlConnection con = personOperate.createCon();
con.Open();
SqlCommand cmd = new SqlCommand("delete from person where pID='"+pID+"'", con);
cmd.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
}程序实现的功能就是在VS中可以实现对数据库中person表中记录的操作。
现在的问题是在程序运行时,如果我在this.txtPID这个文本控件中输入要删除记录的pID号,那么程序正常运行。
可现在数据库表中有个记录的pID为空值。
当我在该文本框中不填任何内容时点删除的话,该记录是删除不掉的。
可如果我增加了如程序代码中那段注释掉的内容,就可以成功删除。
请高手解释一下这是为什么,实在想不通。
数据库表的结构如下:
pID varchar no 10
personName varchar no 20
personSex varchar no 2
protected void btnDlt_Click(object sender, EventArgs e)
{
//if (this.txtPID.Text == "")
//{
// SqlConnection con = personOperate.createCon();
// con.Open();
// SqlCommand cmd = new SqlCommand("delete from person where pID=''", con);
// cmd.ExecuteNonQuery();
// Response.Write("字段为空");
// return;
//}
if (!this.CustomValidator1.IsValid)
{
if (personOperate.delOperate(this.txtPID.Text))
{
Response.Write("删除成功");
this.fillDg();
}
else
{
Response.Write("删除失败");
}
}
}
public static bool delOperate(string pID)
{
try
{ SqlConnection con = personOperate.createCon();
con.Open();
SqlCommand cmd = new SqlCommand("delete from person where pID='"+pID+"'", con);
cmd.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
}程序实现的功能就是在VS中可以实现对数据库中person表中记录的操作。
现在的问题是在程序运行时,如果我在this.txtPID这个文本控件中输入要删除记录的pID号,那么程序正常运行。
可现在数据库表中有个记录的pID为空值。
当我在该文本框中不填任何内容时点删除的话,该记录是删除不掉的。
可如果我增加了如程序代码中那段注释掉的内容,就可以成功删除。
请高手解释一下这是为什么,实在想不通。
数据库表的结构如下:
pID varchar no 10
personName varchar no 20
personSex varchar no 2
解决方案 »
- 导出Excel 出错InteropServices.COMException (0x800A03EC): 无法访问文件。请尝试下列方法之一
- 问个有关创建文件夹上传附件的设计问题
- 通过某一节点名称展开其父节点
- 如何使用onclientclick里的回调结果控制onclientclick的反回值
- 一个奇怪的问题...................................
- 请问思归,关于emf格式文件缩小后图形抗锯齿的问题
- 在线等!!
- 关于asp.net做平面坐标的问题
- 使用smtp邮件发送错误
- 如何在TextBox中按Enter键就直接执行某段程序,(如各种论坛中输入密码后按Enter键后就登临)
- 初学者:热点的问题
- datalist 嵌套checkbox 问题.没有value 属性 怎么办??
CustomValidator1对pID文本框加的一个自定义验证控件
它的服务器端程序为
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
string pID = args.Value;
if (personOperate.findPerson(pID))
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
}
public static bool findPerson(string pID)
{ SqlConnection con = personOperate.createCon();
con.Open();
SqlCommand cmd = new SqlCommand("select count(*) from person where pID='" + pID + "'", con);
int count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
{
return true;
}
else
{
return false;
} }
personOperate是自己定义的一个操作类,实现对表中数据的操作。
加个trim()试试
不行就用参数操作
我没有把pID设置为主键我现在的目的就是要删除pID为空的那条记录
{
if (personOperate.delOperate(this.txtPID.Text))
{
Response.Write("删除成功");
this.fillDg();
}
else
{
Response.Write("删除失败");
}
}
我估计是这个地方的错误
我在if (!this.CustomValidator1.IsValid)和 if (personOperate.delOperate(this.txtPID.Text))设置两个断点
调试时执行完if (!this.CustomValidator1.IsValid)就直接跳到最后面了
不执行
if (personOperate.delOperate(this.txtPID.Text))
{
Response.Write("删除成功");
this.fillDg();
}
else
{
Response.Write("删除失败");
}
这段代码。
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
string pID = args.Value;
if (personOperate.findPerson(pID))
{
args.IsValid = false;
}
else
{
args.IsValid = true;
}
}
即这段代码不会执行,而如果我在pID文本框中输入一个特定的pID的话就会执行到这里。请问是不是自定义验证控件不验证空值啊??
而如果把那段代码注释掉则才是不能删除pID为空的记录。