简体   繁体   中英

C# and Access database doesn't insert/save my data

I wrote an application with C# and MS Access. I have my form login which it works. OK. And I have an insert statement which does not throw any error, but everything I enter into my textbox doesn't get inserted into my database, and when I want to make an update, it returns the same as insert statement, I mean no error, but the row is not inserted or updated.

string stringcon = System.Configuration.ConfigurationManager.ConnectionStrings["rent"].ConnectionString;

private void validateaddmember_button_Click(object sender, EventArgs e)
{
    addmember.Visible = false;

    MemoryStream ms = new MemoryStream();
    pictureBox4.Image.Save(ms, pictureBox4.Image.RawFormat);
    byte[] a = ms.GetBuffer();
    ms.Close();

    OleDbConnection con = new OleDbConnection(stringcon);
    OleDbCommand cmd = new OleDbCommand();
    cmd.Connection = con;

    con.Open();
    cmd.CommandText = "INSERT INTO [team]([Firstname],[Lastname],[Email],[Password],[Function],[Role],[Registerdata],[Personaldescription],[Phonenumber],[Picture]) VALUES(@f,@l,@e,@p,@fu,@r,@reg,@per,@ph,@pic) ";

    cmd.Parameters.AddWithValue("@f", firstname_textbox.Text);
    cmd.Parameters.AddWithValue("@l", lastname_textbox.Text);
    cmd.Parameters.AddWithValue("@e", email_textbox.Text);
    cmd.Parameters.AddWithValue("@ph", phone_textbox.Text);
    cmd.Parameters.AddWithValue("@fu", function_textbox.Text);
    cmd.Parameters.AddWithValue("@r", role_dropbox.selectedValue);
    cmd.Parameters.AddWithValue("@reg", DateTime.Now.ToString("dd-MM-yyyy HH: mm:ss"));
    cmd.Parameters.AddWithValue("@per", richTextBox1.Text);
    cmd.Parameters.AddWithValue("@p", repeatpassword_textbox.Text);
    cmd.Parameters.AddWithValue("@pic", a);

    cmd.ExecuteNonQuery();
    con.Close();
}

And here I have in other form my update.

string stringcon = System.Configuration.ConfigurationManager.ConnectionStrings["rent"].ConnectionString;

private void bunifuFlatButton1_Click(object sender, EventArgs e)//login method
{
    OleDbConnection con = new OleDbConnection(stringcon);
    OleDbCommand cmd2 = new OleDbCommand();

    cmd2.Parameters.Clear();
    cmd2.Connection = con;

    cmd2.CommandText ="update [team] set [Numberoflogin] = [Numberoflogin] + 1 where [Email]=@LEMAIL";

    cmd2.Parameters.AddWithValue("@LEMAIL", materialSingleLineTextField1.Text);

    con.Open();
    cmd2.ExecuteNonQuery();
    con.Close();
}

Along with marc_s's important note -- you switched phone and password, make sure you fix that -- you only need @ in the sql string. So not

cmd.Parameters.AddWithValue("@f", firstname_textbox.Text);

but

cmd.Parameters.AddWithValue("Firstname", firstname_textbox.Text);

Use the field name (Firstname). @f is just a marker. With Access, you could write the sql string like so:

cmd.CommandText = "INSERT INTO [team]([Firstname],[Lastname],[Email],
    [Password],[Function],[Role],[Registerdata],[Personaldescription],
    [Phonenumber],[Picture]) VALUES(?,?,?,?,?,?,?,?,?,?)";

so when you add the parameter value, use the field name.

You could also open the connection right before cmd.ExecuteNonQuery(); , like your update form.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM