如何检查数据库中是否存在输入。 ASP.NET

时间:2016-02-03 12:54:01

标签: c# asp.net

我想检查数据库中是否存在输入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>");
        }
    }
}

4 个答案:

答案 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;