我想检查数据库中是否存在输入tbNRIC
。
protected void btnSubmit_Click(object sender, EventArgs e)
{
string strNric = tbNRIC.Text;
Session["nric"] = strNric;
{
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["EADPRJConnectionString"].ConnectionString))
{
con.Open();
SqlDataReader myReader = null;
SqlCommand myCommand = new SqlCommand("select PNRIC from Patient", con);
myReader = myCommand.ExecuteReader();
while (myReader.Read())
{
if (myReader[1].ToString() == tbNRIC.Text)
{
flag = true;
break;
}
}
if (flag == true)
Response.Write("<script>alert('Patient Profile Successfully Deleted');window.location ='ClientUpdate.aspx';</script>");
else
Response.Write("<script>alert('Patient Profile Unsuccessfully Updated');</script>");
}
}
}
答案 0 :(得分:3)
我强烈怀疑您在写myReader[1]
后尝试阅读第二列。读者索引是从零开始的。您可能需要将其更改为myReader[0]
。
此外,我更喜欢使用GetXXX
methods读者作为个人参考,我发现它更具可读性。
if (myReader.GetString(0) == tbNRIC.Text)
同样使用using
语句来处理您的命令和阅读器,就像您为连接所做的那样。
答案 1 :(得分:2)
您正在使用myReader[1]
访问第二列,但您只选择了一个。
使用Where
- 子句而不是从表中读取所有内容。您也可以使用ExecuteScalar
,因为您只需要一个bool值:
using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["EADPRJConnectionString"].ConnectionString))
{
string sql = @"SELECT CAST(CASE WHEN EXISTS(SELECT 1 FROM Patient
WHERE PNRIC = @PNRIC)
THEN 1 ELSE 0 END AS BIT)";
using (var myCommand = new SqlCommand(sql, con))
{
myCommand.Paramaters.Add("@PNRIC", SqlDbType.NVarChar).Value = tbNRIC.Text;
con.Open();
bool deleted = (bool)myCommand.ExecuteScalar();
// ...
}
}
答案 2 :(得分:1)
如果您在没有加载DB的所有记录的情况下检查患者是否会更好。
做这样的事情:
SqlCommand myCommand = new SqlCommand("select PNRIC from Patient where PNRIC = @PNRIC", con);
myCommand.Parameters.AddWithValue("@PNRIC", tbNRIC.Text);
并检查您是否可以阅读任何行。
答案 3 :(得分:0)
如果在命令文本中应用过滤器会更好。类似的东西:
var strsql = "select PNRIC from Patient where PNRIC='"+ tbNRIC.Text + "'";
SqlCommand myCommand = new SqlCommand(strsql , con);
....
var flag = false;
myReader = myCommand.ExecuteReader();
if(myReader .HasRows) flag = true;