You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#向Access插入日期时间报错,疑类型不匹配或SQL语法问题

问题排查与修复方案

核心问题分析

  1. SQL语法错误(字段与值数量不匹配)
    你的字段列表一共13个,但values里写了14个值——在kullanici后面多了一个空值占位(','),导致字段数和值数对应不上,这是直接触发报错的原因之一。

  2. 日期类型处理错误
    Access数据库的日期/时间类型需要用#包裹,而不是单引号'。你把日期转成字符串后用单引号包裹,会被识别为文本类型,和字段的日期类型不匹配,引发类型错误。

  3. 字符串拼接SQL的隐患
    直接拼接文本框内容等用户输入,不仅容易因为特殊字符(如单引号)导致SQL语法崩溃,还存在SQL注入风险。

修复后的代码(使用参数化查询)

using (var cmd = new OleDbCommand())
{
    con.Open();
    cmd.Connection = con;
    // 修正字段与值的对应关系,移除多余的空值占位
    cmd.CommandText = @"INSERT INTO kayit 
        (evraktarihi, evrakgelistarihi, gelissaati, geldigiyer, konusu, faturano, htfno, talepno, satınpersonel, teslimkisi, yapılanislem, açıklama, islemtarih)
        VALUES (@evrakTarihi, @evrakGelisTarihi, @gelisSaati, @geldigiYer, @konusu, @faturaNo, @htfNo, @talepNo, @satinPersonel, @teslimKisi, @yapilanIslem, @aciklama, @islemTarih)";
    
    // 添加参数,直接传入原生类型,无需手动格式转换
    cmd.Parameters.AddWithValue("@evrakTarihi", dateTimePicker1.Value);
    cmd.Parameters.AddWithValue("@evrakGelisTarihi", DateTime.Today);
    cmd.Parameters.AddWithValue("@gelisSaati", DateTime.Now); // 若gelissaati是纯时间字段,可改用DateTime.Now.TimeOfDay
    cmd.Parameters.AddWithValue("@geldigiYer", textBox2.Text);
    cmd.Parameters.AddWithValue("@konusu", textBox3.Text);
    cmd.Parameters.AddWithValue("@faturaNo", textBox4.Text);
    cmd.Parameters.AddWithValue("@htfNo", textBox5.Text);
    cmd.Parameters.AddWithValue("@talepNo", textBox6.Text);
    cmd.Parameters.AddWithValue("@satinPersonel", textBox7.Text);
    cmd.Parameters.AddWithValue("@teslimKisi", kullanici);
    cmd.Parameters.AddWithValue("@yapilanIslem", textBox8.Text); // 原代码此处为空,若字段允许空可替换为DBNull.Value
    cmd.Parameters.AddWithValue("@aciklama", textBox1.Text);
    cmd.Parameters.AddWithValue("@islemTarih", dateTimePicker3.Value);
    
    cmd.ExecuteNonQuery();
    con.Close();
}

额外说明

  • 参数化查询会自动处理日期类型的格式适配,彻底避免类型不匹配问题。
  • 注意gelissaati字段的类型:如果是纯时间字段,传DateTime.Now.TimeOfDay(TimeSpan类型);如果是日期时间字段,直接传DateTime.Now即可。
  • 若yapılanislem字段允许空值,可将对应参数值改为DBNull.Value。

内容的提问来源于stack exchange,提问作者ismail YANIK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 17:55:22