Моя функция удаления не удаляет записи и игнорируется - PullRequest
0 голосов
/ 21 ноября 2018

У меня проблемы с тем, чтобы заставить мою функцию удаления работать в моем веб-приложении ASP.net (C #), и я действительно не знаю, куда идти дальше.

Функция вызывается при нажатии кнопки, но все равно, что метод Page_Load полностью игнорирует команду.Я новичок в этом и был бы признателен за помощь.Спасибо.

Вот Page_load, метод DisplayData, метод Count и метод delete, который вызывается нажатием кнопки.

public partial class WebForm1 : System.Web.UI.Page
{
    SqlConnection cn;
    static int count = 1;
    static int max = 2;
    static String sqlQuery = "Select * from Footballer";
    static bool firstTime = true;

    protected void Page_Load(object sender, EventArgs e)
    {
        string str = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\David\\Desktop\\WebApplication5\\WebApplication5\\App_Data\\Database2.mdf\";Integrated Security=True";
        cn = new SqlConnection(str);
        SqlCommand command = cn.CreateCommand();

        cn.Open();
        mycount();

        if (firstTime == true)
        {
            displayData();
           firstTime = false;
        }
    }

    protected void mycount()
    {   // count no of els in table
        max = 0;
        var cmd = cn.CreateCommand();

        cmd.CommandText = sqlQuery;
        var reader = cmd.ExecuteReader();
        while (reader.Read()) max++;
        reader.Close();
    }

    protected void displayData()
    {
        var cmd = cn.CreateCommand();

        cmd.CommandText = sqlQuery;
        var reader = cmd.ExecuteReader();

        for (int i = 0; i < count; i++) 
            reader.Read();

        TextBox1.Text = "" + reader[0];
        TextBox2.Text = "" + reader[1];
        TextBox5.Text = "" + reader[2];
        TextBox6.Text = "" + reader[3];
        TextBox7.Text = "" + reader[4];
        TextBox8.Text = "" + reader[5];

        reader.Close();
    }

    protected void deleteData()
    {
        var cmd = cn.CreateCommand();
        string query = "DELETE FROM [Footballer] WHERE [PlayerName] = @name";
        cmd.CommandText = query;

        string name = TextBox4.Text;

        cmd.Parameters.AddWithValue("@name", name);

        cmd.ExecuteNonQuery();
    }
}

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Не открывайте соединение в Page_Load, открывайте его только там, где это необходимо.Также используйте using для правильной утилизации ваших ресурсов.

public partial class WebForm1 : System.Web.UI.Page
{
    //You should really pull this from your web.config
    string connectionString = "(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\David\\Desktop\\WebApplication5\\WebApplication5\\App_Data\\Database2.mdf\";Integrated Security=True";;
    static int count = 1;
    static int max = 2;
    static String sqlQuery = "Select * from Footballer";
    static bool firstTime = true;

    protected void Page_Load(object sender, EventArgs e)
    {            
        mycount();

        if (firstTime == true)
        {
            displayData();
           firstTime = false;
        }
    }

    protected void mycount()
    {   // count no of els in table
        max = 0;
        using(SqlConnection con = new SqlConnection(connectionString))
        {
            con.open();
            using(var cmd = cn.CreateCommand())
            {
               cmd.CommandText = sqlQuery;
               var reader = cmd.ExecuteReader();
               while (reader.Read()) max++;
               reader.Close();
            }
        }
    }

    protected void displayData()
    {
        using(SqlConnection con = new SqlConnection(connectionString))
        {
            con.open();
            using(var cmd = cn.CreateCommand())
            {  
               cmd.CommandText = sqlQuery;
               var reader = cmd.ExecuteReader();
               for (int i = 0; i < count; i++) reader.Read();
                 TextBox1.Text = "" + reader[0];
                 TextBox2.Text = "" + reader[1];
                 TextBox5.Text = "" + reader[2];
                 TextBox6.Text = "" + reader[3];
                 TextBox7.Text = "" + reader[4];
                 TextBox8.Text = "" + reader[5];
               reader.Close();
         }
       }
    }

    protected void deleteData()
    {
        //Add A break point here to ensure the method is hit
        using(SqlConnection con = new SqlConnection(connectionString))
        {
            con.open();
            using(var cmd = cn.CreateCommand())
            {            

              string query = "DELETE from [Footballer] where [PlayerName] = @name";
              cmd.CommandText = query;

              string name = TextBox4.Text;    
              //When stepping through in debug mode, make sure
              //name is what you expect.
              cmd.Parameters.AddWithValue("@name", name);

             cmd.ExecuteNonQuery(); 
            }
       }
    }

Обратите внимание, я сделал все это в редакторе SO, поэтому я мог пропустить некоторые закрывающие }

0 голосов
/ 21 ноября 2018

Из кода похоже, что значение Textbox4 перезаписывается перед удалением, Page_load будет вызываться для каждой обратной передачи, включая событие нажатия кнопки.Флаг bool firstTime = true не работает для цели, которую вы пытаетесь достичь.Я считаю, что вы хотите загружать данные текстового поля только тогда, когда страница загружается в первый раз.поэтому вы должны изменить событие Page_load, чтобы использовать свойство IsPostBack вместо флага firstTime, как показано ниже.

protected void Page_Load(object sender, EventArgs e)
{
    string str = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=\"C:\\Users\\David\\Desktop\\WebApplication5\\WebApplication5\\App_Data\\Database2.mdf\";Integrated Security=True";
    cn = new SqlConnection(str);
    SqlCommand command = cn.CreateCommand();

    cn.Open();
    mycount();

    if(!IsPostBack)
    {
        displayData();             
    }
}

Это гарантирует, что значение TextBox4, введенное вами в пользовательском интерфейсе, не будет перезаписано, когда вы нажмете кнопку «Удалить» и код удаления будет работать должным образом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...