尝试添加行时,标准表达式Exception中的数据类型不匹配

本文关键字:Exception 数据类型 不匹配 表达式 标准 添加行 | 更新日期: 2023-09-27 18:13:44

当我想在Access数据库中保存一行时,我遇到了一个问题。当我想保存它而不选中herinneringsmall时,它工作了,当我选中herinneringsmall时,它不工作了。所以错误在"If(ckbherinneringsmall . checked){…下面}"。我在标准表达式中得到oledbeexception数据类型不匹配。当我想插入行和当我想用herinneringsmall更新行时,我会得到异常。请帮助。

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();
        }
    }

尝试添加行时,标准表达式Exception中的数据类型不匹配

OleDb不知道任何关于命名参数它只是关于顺序(参数中的Name参数)。Add调用不做任何事情)。因此,您需要按照在使用的语句中定义参数的顺序添加参数。

从我看到你至少需要添加@CommID参数后的"if (ckbherinneringsmall . checked)"代码有正确的顺序。