0

I'm trying to do an mysql statement to update a field to 'blank', but when I run the program the value that's posted to database is null. When I run the update statement directly in my DBMS, it works fine.

Here is the part of my code with the update statement.

else if (DropDownList1.SelectedItem.Value.Equals(0))
        {
            string sql =  "UPDATE bruker SET stemme = 'blank' WHERE bruker.epost = '" + user + "';";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            conn.Close();
        }  

And here is the (almost) rest of the code:

    String user = "ekstrabruker@epost.no";
    DataSet ds;
    int i;

    protected void Page_Load(object sender, EventArgs e)
    {

        if (Page.IsPostBack == false)
        {
            DataSet ds = new DataSet();
            String connStr = ("Data Source=localhost;Port=3311;Database=valgapp2000;User ID=root;Password=");
            MySqlConnection conn = new MySqlConnection(connStr);
            conn.Open();
            string sql = "SELECT bruker.fnavn, bruker.enavn FROM kandidat, bruker WHERE kandidat.bruker = bruker.epost";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);
            da.Fill(ds);
            conn.Close();

            ds.Tables[0].Columns.Add("kandidatnavn", typeof(string), "fnavn + ' ' + enavn");
            DropDownList1.DataTextField = "kandidatnavn";
            DropDownList1.DataValueField = "kandidatnavn";
            DropDownList1.DataSource = ds;
            DropDownList1.DataBind();



            if (gittStemme(user) !="")
            {
                Label6.Text = "Du har gitt din stemme til " + gittStemme(user)+ "<br/><br/>";
                Label1.Text = "Velg en annen kandidat dersom du ønsker å endre din stemme";
                Label5.Text = "Eller trykk på knappen dersom du ønsker å stemme blankt.";
                Button1.Visible = true;
                Button1.Text = "Stem blankt";
            }else if (gittStemme(user) != "")
            {
                Label6.Text = "Du har gitt din stemme til " + gittStemme(user) + "<br/><br/>";
                Label1.Text = "Velg en annen kandidat dersom du ønsker å endre din stemme";
                Label5.Text = "Eller trykk på knappen dersom du ønsker å stemme blankt.";
                Button1.Visible = true;
                Button1.Text = "Stem blankt";
            }

            else if(DropDownList1.SelectedIndex == 0)
            {

                Label6.Text = "Velg en kandidat for å avgi din stemme<br/><br/>";
                Label5.Text = "Eller trykk på knappen dersom du ønsker å stemme blankt.";
                Button1.Visible = true;
                Button1.Text = "Stem blankt";
            } 
        } else
        {
            if (DropDownList1.SelectedIndex == 0)
            {
               if (gittStemme(user) != "")
                {
                    Label1.Text = "Velg en annen kandidat dersom du ønsker å endre din stemme";
                    Label2.Text = "";
                    Label3.Text = "";
                    Label4.Text = "";
                    Label5.Text = "";
                    Label6.Text = "Du har gitt din stemme til " + gittStemme(user) + "<br/><br/>";
                    Button1.Visible = false;
                } else
                {
                    Label6.Text = "Velg en kandidat for å avgi din stemme<br/><br/>";
                    Label1.Text = "";
                    Label2.Text = "";
                    Label3.Text = "";
                    Label4.Text = "";
                    Label5.Text = "Eller trykk på knappen dersom du ønsker å stemme blankt.";
                    Button1.Visible = true;
                    Button1.Text = "Stem blankt";
                } 
            }
            else
            {
                DataSet ds = new DataSet();
                String connStr = ("Data Source=localhost;Port=3311;Database=valgapp2000;User ID=root;Password=");
                MySqlConnection conn = new MySqlConnection(connStr);
                conn.Open();
                string sql = "SELECT kandidat.*, bruker.fnavn, bruker.enavn FROM kandidat, bruker WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + DropDownList1.SelectedItem.Value + "' AND kandidat.bruker = bruker.epost;";
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                da.Fill(ds);
                conn.Close();
              
                ds.Tables[0].Columns.Add("kandidatnavn", typeof(string), "fnavn + ' ' + enavn");
                Label1.Text = "Navn: " + ds.Tables[0].Rows[i]["kandidatnavn"].ToString();
                Label2.Text = "Fakultet: " + ds.Tables[0].Rows[i]["fakultet"].ToString();
                Label3.Text = "Institutt: " + ds.Tables[0].Rows[i]["institutt"].ToString();
                Label4.Text = "Informasjon: " + ds.Tables[0].Rows[i]["informasjon"].ToString();


                if (gittStemme(user).Equals(DropDownList1.SelectedItem.Value))
                {
                    gittStemme(user);
                    Button1.Visible = true;
                    Button1.Text = "Trekk stemme";
                    Label5.Text = "Trykk på knappen dersom du ønsker å trekke din stemme";
                    Label6.Text = "Du har gitt din stemme til denne kandidaten<br/><br/>";
                } else if(gittStemme(user) == "") {
                    gittStemme(user);
                    Button1.Visible = true;
                    Button1.Text = "Stem på denne kandidaten";
                }
                else
                {
                    gittStemme(user);
                    Button1.Visible = true;
                    Button1.Text = "Endre stemme";
                    Label6.Text = "Du har gitt din stemme til " + gittStemme(user) + "<br/><br/>";
                    Label5.Text = "Trykk på knappen dersom du ønsker å endre din stemme";
                }
                


            }
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
            String connStr = ("Data Source=localhost;Port=3311;Database=valgapp2000;User ID=root;Password=");
            MySqlConnection conn = new MySqlConnection(connStr);
            conn.Open();

             if (gittStemme(user) == "")
              {
                    string sql = "UPDATE kandidat, bruker SET kandidat.stemmer = kandidat.stemmer + 1 WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + DropDownList1.SelectedItem.Value + "' AND kandidat.bruker = bruker.epost;" +
                  "UPDATE bruker SET stemme = (SELECT bruker.epost FROM bruker, kandidat WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + DropDownList1.SelectedItem.Value + "' AND kandidat.bruker = bruker.epost) WHERE bruker.epost = '" + user + "'";
                     MySqlCommand cmd = new MySqlCommand(sql, conn);
                     cmd.Prepare();
                     cmd.ExecuteNonQuery();
                     Button1.Visible = true;
                     Button1.Text = "Trekk stemme";
                     Label5.Text = "Trykk på knappen dersom du ønsker å trekke din stemme";
                     Label6.Text = "Du har gitt din stemme til denne kandidaten <br/><br/>";
        }
             else if (gittStemme(user).Equals(DropDownList1.SelectedItem.Value))
        {
            string sql = "UPDATE kandidat, bruker SET kandidat.stemmer = kandidat.stemmer - 1 WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + gittStemme(user) + "' AND kandidat.bruker = bruker.epost;" +
                         "UPDATE bruker SET stemme = '' WHERE bruker.epost = '" + user + "';";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            conn.Close();
            Label5.Text = "Du har trekt din stemme";
            Label6.Text = "Ønsker du å stemme på denne kandidaten?<br/><br/>";
            Button1.Visible = true;
            Button1.Text = "Stem på denne kandidaten"; 
        } else if (DropDownList1.SelectedItem.Value.Equals(0))
        {
            string sql =  "UPDATE bruker SET stemme = 'blank' WHERE bruker.epost = '" + user + "';";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            conn.Close();
        } 
        else
        {
            string sql = "UPDATE kandidat, bruker SET kandidat.stemmer = kandidat.stemmer + 1 WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + DropDownList1.SelectedItem.Value + "' AND kandidat.bruker = bruker.epost;" +
                         "UPDATE kandidat, bruker SET kandidat.stemmer = kandidat.stemmer - 1 WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + gittStemme(user) + "' AND kandidat.bruker = bruker.epost;" +
                         "UPDATE bruker SET stemme = (SELECT bruker.epost FROM bruker, kandidat WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + DropDownList1.SelectedItem.Value + "' AND kandidat.bruker = bruker.epost) WHERE bruker.epost = '"+user+"';";
            MySqlCommand cmd = new MySqlCommand(sql, conn);
            cmd.Prepare();
            cmd.ExecuteNonQuery();
            conn.Close();
            Button1.Visible = false;
            Label6.Text = "Du har gitt din stemme til denne kandidaten <br/><br/>";
            Label5.Text = "Du har endret din stemme";
            Button1.Visible = true;
            Button1.Text = "Trekk stemme";
        }
    }
    public static string gittStemme(string user)
    {
        String connStr = ("Data Source=localhost;Port=3311;Database=valgapp2000;User ID=root;Password=");
        MySqlConnection conn = new MySqlConnection(connStr);
        conn.Open();
        string sql = "SELECT (SELECT (CONCAT(fnavn, ' ', enavn)) AS stemmemottaker FROM bruker WHERE epost = (SELECT stemme FROM bruker WHERE epost = '" + user + "')) AS stemme";
        MySqlCommand cmd = new MySqlCommand(sql, conn);
        MySqlDataReader rdr = cmd.ExecuteReader();
        rdr.Read();

        if (rdr[0].ToString() == "")
        {
            return "";
        } else {
            return rdr[0].ToString();
        }
        conn.Close();
    }

  /*  public void trekkStemme()
    {
        String connStr = ("Data Source=localhost;Port=3311;Database=valgapp2000;User ID=root;Password=");
        MySqlConnection conn = new MySqlConnection(connStr);
        conn.Open();
        string sql = "UPDATE kandidat, bruker SET kandidat.stemmer = kandidat.stemmer - 1 WHERE(CONCAT(bruker.fnavn, ' ', bruker.enavn)) = '" + gittStemme(user) + "' AND kandidat.bruker = bruker.epost;";
        Label5.Text = "Du har trekt din stemme";
        Label6.Text = "Ønsker du å stemme på denne kandidaten?<br/><br/>";
        conn.Close();
    } */
}
}

Sorry guys, I couldn't get the first part of my code to be formatted properly into codeblocks, so I'll leave it out. (it's just the part that includes using System, etc) Also sorry if I don't ask the question in a good and detailed way. I'm new to this, so I lack the technical terms to explain everything in a good way.

Markus Mo
  • 17
  • 2
  • 2
    _"when I run the program the value that's posted to database is null"_ - nope, can't happen, you send the string `'blank'` and that will be updated in the column you specify. How do you determine that a null gets sent? Also, there are quite some (maybe related) problems with your code, SQL injection being the biggest. – CodeCaster Feb 17 '21 at 12:23
  • Check the return value for : int rowsChanged = cmd.ExecuteNonQuery();. When you get zero for the return value for an Update that it normally indicates the primary key is not in the database and you have to use Insert. When Insert returns zero it mean the key is already in the database and you have to use Update. – jdweng Feb 17 '21 at 12:27
  • Are you sure the isolated codepath you show is actually used and not some other codepath that also changes that column? – Ralf Feb 17 '21 at 12:27
  • 1
    https://stackoverflow.com/questions/14376473/what-are-good-ways-to-prevent-sql-injection – mjwills Feb 17 '21 at 13:01
  • @mjwills of course I closed that five years ago :p – CodeCaster Feb 17 '21 at 13:59
  • @CodeCaster Haha. Closed or not, I love the link. – mjwills Feb 17 '21 at 20:39

0 Answers0