检查数据库中是否存在值

时间:2012-12-23 21:59:30

标签: asp.net stored-procedures

我正在尝试检查数据库中是否存在值并尝试将其“输出”到var。 并且不能让它变成1 ...

这是我要检查的代码。

      if(!sqlUtil.Check_Person_Exists(txt_FirstName.Text.Trim(),txt_Surname.Text.Trim()))
                        {
                            // Insert
                            // ======
                            sqlUtil.Insert_person(obj);

                            // Redirect
                            // ========
                            Response.Redirect("Default.aspx");

                        }
                        else
                        {
                            txt_FirstName.BackColor = Color.FromName(ConfigurationManager.AppSettings["ErrorColour"]);
                            txt_Surname.BackColor = Color.FromName(ConfigurationManager.AppSettings["ErrorColour"]);
                            lbl_message.Text = " * '" + txt_FirstName.Text + " " + txt_Surname.Text +
                                               "' already Exists!";
                        }

这是检查方法。

        public Boolean Check_Person_Exists(String Fname, String Lname)
    {
        // Init()
        // ======
        SqlConnection conn = null;
        SqlDataReader rdr = null;
        SqlCommand cmd = null;
        var iPerson = 0;
        var bPerson = false;

        try
        {
            //  Config
            //  -------
            conn = new SqlConnection(ConfigurationManager.ConnectionStrings["conn"].ConnectionString);
            conn.Open();
            cmd = new SqlCommand("[sp_Check_Person_Exists]", conn);
            cmd.CommandType = CommandType.StoredProcedure;

            //  Param(s)?
            //  ---------
            cmd.Parameters.Add("@s_FirstName", SqlDbType.NVarChar, 50).Value = Fname;
            cmd.Parameters.Add("@s_Surname", SqlDbType.NVarChar, 50).Value = Lname;

            //  Execute
            //  -------
            rdr = cmd.ExecuteReader();

            //  Row(s)?
            //  -------
            if (rdr.HasRows)
            {
                //  Read
                //  ----
                while (rdr.Read())
                {
                    //  Something there?
                    //  ----------------
                    if (rdr["FirstName"].ToString() !=string.Empty)
                    {
                        //  Valid?
                        //  ------
                        Int32.TryParse(rdr["FirstName"].ToString(), out iPerson);
                        if(iPerson > 0)
                        {
                            //  Exists
                            //  ------
                            bPerson = true;
                        }
                    }
                }

            }
            //  Clean up / close down
            //  ---------------------
            cmd.Dispose();
            rdr.Dispose();
            rdr.Close();
            conn.Dispose();
            conn.Close();
        }
        catch (SqlException ex)
        {

            throw ex;
        }
        finally
        {
            //  Clean up / close down
            //  ---------------------
            if (cmd != null)
            {
                cmd.Dispose();
            }
            if ((rdr != null) && (!rdr.IsClosed))
            {
                rdr.Close();
            }
            if ((conn != null) && (conn.State != ConnectionState.Closed))
            {
                conn.Dispose();
                conn.Close();
            }
        }
        // Return
        // ======
        return bPerson;
    }
}

在//有效吗? 检查我是否正在尝试访问iPerson,这是它失败的地方,并且不会填充iPerson。

这是我的存储过程。

ALTER PROCEDURE [dbo].[sp_Check_Person_Exists]
    @s_FirstName nvarchar(50),
    @s_Surname nvarchar(50) 
AS
BEGIN
SELECT        FirstName, Surname
FROM            tbl_person
WHERE        (FirstName = @s_FirstName) AND (Surname = @s_Surname)
END

我正在分配我的变量,所有这些都可以,但只是不会填充iPerson ..

1 个答案:

答案 0 :(得分:0)

您是否正在尝试将此人的FirstName解析为Int32?您必须查询ID并将其解析为iPerson。