Question

I have a problem when I want to save a row in my Access database. When I want to save it without Herinneringsmail is checked it works, when I check Herinneringsmail it doesn't work. So the fault is in the "If(ckbHerinneringsmail.Checked){...}" below. I get the OledbException data type mismatch in criteria expression. I get the Exception when I want to insert the row and when I want to update the row with Herinneringsmail. Please help.

private void btnOpslaan_Click(object sender, EventArgs e)
    {
        String status = cmbStatus.SelectedItem.ToString();
        String naam = txtNaam.Text;
        int merk = Convert.ToInt32(cmdMerken.SelectedValue);
        DateTime startdatumCamp = Convert.ToDateTime(dtpStartCamp.Text);
        DateTime einddatumCamp = Convert.ToDateTime(dtpEinddatCamp.Text);
        Boolean titel = ckbTitel.Checked;
        Boolean link = ckbLink.Checked;
        Boolean teasertekst = ckbTeasertekst.Checked;
        Boolean inhoudsopgave = ckbInhoudsopgave.Checked;
        Boolean praktischeInfo = ckbPraktischeInfo.Checked;
        String verzenduur = txtVerzenduur.Text;
        DateTime verzenddatum = Convert.ToDateTime(dtpVerzenddatum.Text);
        int frequentie = Convert.ToInt16(txtFrequentie.Text);
        DateTime startdatum = Convert.ToDateTime(dtpStartdatum.Text);
        DateTime einddatum = Convert.ToDateTime(dtpEinddatum.Text);
        Boolean herinneringsmail = ckbHerinneringsmail.Checked;
        if (ckbHerinneringsmail.Checked)
        { 
            Boolean geklikt = ckbGeklikt.Checked;
            Boolean nietGeklikt = ckbNietGeklikt.Checked;
            int atlDagen = Convert.ToInt32(txtAtlDagen.Text);
        }

        if (indexCamp == 0 || statusCamp == "kopieren")
        {
            if (ckbHerinneringsmail.Checked)
                query = "Insert into [E-mailcampagne] ([Status], [Naam], [MerkID],[StartdatumCamp], [EinddatumCamp], [Titel], [Link], [Teasertekst], [Inhoudsopgave], [PraktischeInfo], [Verzenduur], [Verzenddatum], [Frequentie], [StartdatumOpl], [EinddatumOpl], [Herinneringsmail], [Geklikt], [NietGeklikt], [Aantal dagen], [Commerciële Coördinator]) values(@status, @naam, @merk, @startdatumCamp, @einddatumCamp, @titel, @link, @teasertekst, @inhoudsopgave, @praktischeInfo, @verzenduur, @verzenddatum, @frequentie, @startdatum, @einddatum, @herinneringsmail, @geklikt, @nietGeklikt, @atlDagen, @commID)";
            else
                query = "Insert into [E-mailcampagne] ([Status], [Naam], [MerkID], [StartdatumCamp], [EinddatumCamp], [Titel], [Link], [Teasertekst], [Inhoudsopgave], [PraktischeInfo], [Verzenduur], [Verzenddatum], [Frequentie], [StartdatumOpl], [EinddatumOpl], [Herinneringsmail], [Commerciële Coördinator]) values(@status, @naam, @merk, @startdatumCamp, @einddatumCamp, @titel, @link, @teasertekst, @inhoudsopgave, @praktischeInfo, @verzenduur, @verzenddatum, @frequentie, @startdatum, @einddatum, @herinneringsmail, @commID)";
        }
        else
        {
            if (ckbHerinneringsmail.Checked)
                query = "Update [E-mailcampagne] set [Status] = @status, [Naam] = @naam, [MerkID] = @merk, [StartdatumCamp] = @startdatumCamp, [EinddatumCamp] = @einddautmCamp, [Titel] = @titel, [Link] = @link, [Teasertekst] = @teasertekst, [Inhoudsopgave] = @inhoudsopgave, [PraktischeInfo] = @praktischeInfo, [Verzenduur] = @verzenduur, [Verzenddatum] = @verzenddatum, [Frequentie] = @frequentie, [StartdatumOpl] = @startdatum, [EinddatumOpl] = @einddatum, [Herinneringsmail] = @herinneringsmail, [Geklikt] = @geklikt, [NietGeklikt] = @nietGeklikt, [Aantal dagen] = @altDagen, [Commerciële Coördinator] = @commID where [CampagneID] = @indexCamp";
            else
                query = "Update [E-mailcampagne] set [Status] = @status, [Naam] = @naam, [MerkID] = @merk, [StartdatumCamp] = @startdatumCamp, [EinddatumCamp] = @einddatumCamp, [Titel] = @titel, [Link] = @link, [Teasertekst] = @teasertekst, [Inhoudsopgave] = @inhoudsopgave, [PraktischeInfo] = @praktischeInfo, [Verzenduur] = @verzenduur, [Verzenddatum] = @verzenddatum, [Frequentie] = @frequentie, [StartdatumOpl] = @startdatum, [EinddatumOpl] = @einddatum, [Herinneringsmail] = @herinneringsmail, [Commerciële Coördinator] = @commID where [CampagneID] = @indexCamp";
        }

        using (OleDbConnection conn = new OleDbConnection(connstring))
        {
            OleDbCommand com = new OleDbCommand(query, conn);
            com.Parameters.Add("@status", OleDbType.VarChar, 15, "[Status]").Value = cmbStatus.SelectedItem.ToString();
            com.Parameters.Add("@naam", OleDbType.VarChar, 50, "[Naam]").Value = txtNaam.Text;
            com.Parameters.Add("@merk", OleDbType.Integer, 3, "[MerkID]").Value = Convert.ToInt32(cmdMerken.SelectedValue);
            com.Parameters.Add("@startdatumCamp", OleDbType.Date, 10, "[StartdatumCamp]").Value = Convert.ToDateTime(dtpStartCamp.Text);
            com.Parameters.Add("@einddatumCamp", OleDbType.Date, 10, "[EinddatumCamp]").Value = Convert.ToDateTime(dtpEinddatCamp.Text);
            com.Parameters.Add("@titel", OleDbType.Boolean, 1, "[Titel]").Value = ckbTitel.Checked;
            com.Parameters.Add("@link", OleDbType.Boolean, 1, "[Link]").Value = ckbLink.Checked;
            com.Parameters.Add("@teasertekst", OleDbType.Boolean, 1, "[Teasertekst]").Value = ckbTeasertekst.Checked;
            com.Parameters.Add("@inhoudsopgave", OleDbType.Boolean, 1, "[Inhoudsopgave]").Value = ckbInhoudsopgave.Checked;
            com.Parameters.Add("@praktischeInfo", OleDbType.Boolean, 1, "[PraktischeInfo]").Value = ckbPraktischeInfo.Checked;
            com.Parameters.Add("@verzenduur", OleDbType.VarChar, 5, "[Verzenduur]").Value = txtVerzenduur.Text;
            com.Parameters.Add("@verzenddatum", OleDbType.Date, 10, "[Verzenddatum]").Value = Convert.ToDateTime(dtpVerzenddatum.Text);
            com.Parameters.Add("@frequentie", OleDbType.Integer, 2, "[Frequentie]").Value = Convert.ToInt32(txtFrequentie.Text);
            com.Parameters.Add("@startdatum", OleDbType.Date, 10, "[Startdatum]").Value = Convert.ToDateTime(dtpStartdatum.Text);
            com.Parameters.Add("@einddatum", OleDbType.Date, 10, "[Einddatum]").Value = Convert.ToDateTime(dtpEinddatum.Text);
            com.Parameters.Add("@herinneringsmail", OleDbType.Boolean, 1, "[Herinneringsmail]").Value = ckbHerinneringsmail.Checked;
            com.Parameters.Add("@commID", OleDbType.VarChar, 50, "[Commerciële coördinator]").Value = commID;
            if (ckbHerinneringsmail.Checked)
            {
                    com.Parameters.Add("@geklikt", OleDbType.Boolean, 1, "[Geklikt]").Value = ckbGeklikt.Checked;
                    com.Parameters.Add("@nietGeklikt", OleDbType.Boolean, 1, "[NietGeklikt]").Value = ckbNietGeklikt.Checked;
                    com.Parameters.Add("@atlDagen", OleDbType.Integer, 2, "[Aantal dagen]").Value = Convert.ToInt32(txtAtlDagen.Text);
            }

            if (indexCamp != 0 && statusCamp == "wijzigen")
                com.Parameters.Add("@indexCamp", OleDbType.Integer, 2).Value = indexCamp;

            conn.Open();
            com.ExecuteNonQuery();
            conn.Close();
            MessageBox.Show("Succesvol opgeslagen");
            this.Close();

        }
    }
Was it helpful?

Solution

OleDb does not know anything about named parameters its just about the order (The Name parameter in the Parameter.Add call does nothing). So you need to add the parameters in the same order as they are defined in the used statement(s).

From what i see you need at least to add the @CommID parameter after the "if (ckbHerinneringsmail.Checked)" code to have the order correct.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top