1

値がDBに存在するかどうかを確認し、変数に「出力」しようとしています。それを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 にデータを入力しません..

4

1 に答える 1

0

その人の FirstName を Int32 に解析しようとしていますか? ID を照会し、それを iPerson に解析する必要があります。

于 2012-12-23T22:06:32.307 に答える