条件表达式中的数据类型不匹配尝试添加行时出现异常

时间:2013-05-16 07:54:41

标签: c# oledb oledbexception

当我想在Access数据库中保存一行时,我遇到了问题。 当我想保存它而没有Herinnerings邮件被检查它是有效的,当我检查Herinneringsmail它不起作用。 所以错误在下面的“If(ckbHerinneringsmail.Checked){...}”中。 我在条件表达式中得到OledbException数据类型不匹配。 当我想插入行时以及当我想用Herinneringsmail更新行时,我得到了Exception。 请帮忙。

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

        }
    }

1 个答案:

答案 0 :(得分:0)

OleDb对命名参数一无所知,只关于命令(Parameter.Add调用中的Name参数什么都不做)。因此,您需要按照在used语句中定义的顺序添加参数。

从我看到你至少需要在“if(ckbHerinneringsmail.Checked)”代码之后添加@CommID参数才能使订单正确。