C# 带有参数化查询的INSERT INTO语句中出现语法错误

C# 带有参数化查询的INSERT INTO语句中出现语法错误,c#,ms-access,C#,Ms Access,我正在用.NET和MS Access编写一个桌面软件,但是当我创建代码插入数据时,它抛出了一个异常,我尝试到处搜索,但仍然没有修复 NomorNota (AutoNumber, PrimaryKey), Tanggal (Date/Time), NamaPelanggan (Long Text), Alamat (Long Text), NoHP(Long Text), TipeHP (Long Text), Keluhan (Long Text), Kerusakan (Long Text),

我正在用.NET和MS Access编写一个桌面软件,但是当我创建代码插入数据时,它抛出了一个异常,我尝试到处搜索,但仍然没有修复

NomorNota (AutoNumber, PrimaryKey), Tanggal (Date/Time),
NamaPelanggan (Long Text), Alamat (Long Text), NoHP(Long Text),
TipeHP (Long Text), Keluhan (Long Text), Kerusakan (Long Text),
KondisiHP (Long Text), Kelengkapan (Long Text), Warna (Long Text),
KataSandi/Pola (Number), DP (Currency), Teknisi (Long Text), Status (Long Text), 
TanggalKonfirmasi (Date/Time), IsiKonfirmasi (Long Text),
Biaya (Currency), TambahanBiaya (Currency), TotalBiaya (Currency),
HargaSparepart (Currency), Laba/Rugi (Currency)
以下是我所有的专栏,忽略了不同的语言:

NomorNota (AutoNumber, PrimaryKey), Tanggal (Date/Time),
NamaPelanggan (Long Text), Alamat (Long Text), NoHP(Long Text),
TipeHP (Long Text), Keluhan (Long Text), Kerusakan (Long Text),
KondisiHP (Long Text), Kelengkapan (Long Text), Warna (Long Text),
KataSandi/Pola (Number), DP (Currency), Teknisi (Long Text), Status (Long Text), 
TanggalKonfirmasi (Date/Time), IsiKonfirmasi (Long Text),
Biaya (Currency), TambahanBiaya (Currency), TotalBiaya (Currency),
HargaSparepart (Currency), Laba/Rugi (Currency)
这是我的c代码:

NomorNota (AutoNumber, PrimaryKey), Tanggal (Date/Time),
NamaPelanggan (Long Text), Alamat (Long Text), NoHP(Long Text),
TipeHP (Long Text), Keluhan (Long Text), Kerusakan (Long Text),
KondisiHP (Long Text), Kelengkapan (Long Text), Warna (Long Text),
KataSandi/Pola (Number), DP (Currency), Teknisi (Long Text), Status (Long Text), 
TanggalKonfirmasi (Date/Time), IsiKonfirmasi (Long Text),
Biaya (Currency), TambahanBiaya (Currency), TotalBiaya (Currency),
HargaSparepart (Currency), Laba/Rugi (Currency)
private void btnSave_Click(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection();
    conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;
                Data Source=Databases/database.accdb;
                Persist Security Info=False";

    try
    {
        OleDbCommand cmd = conn.CreateCommand();
        conn.Open();

        string kelengkapan = "";
        string status = "";

        int totalBiaya = int.Parse(txtBiaya.Text) + int.Parse(txtTambahanBiaya.Text);
        int labaRugi = totalBiaya - int.Parse(txtHargaSparepart.Text);

        if (chckSIM.Checked)
            kelengkapan += "SIM ";

        if (chckMemory.Checked)
            kelengkapan += "Memory ";

        if (chckKondom.Checked)
            kelengkapan += "Kondom ";

        if (chckBaterai.Checked)
            kelengkapan += "Baterai";

        if (comboStatus.SelectedItem != null)
            status = comboStatus.SelectedItem.ToString();
        else
            status = "BELUM DISETTING";

        string cmdText = @"INSERT INTO DataServisan (Tanggal, NamaPelanggan, Alamat,
                    NoHP, TipeHP, Keluhan,
                    Kerusakan, KondisiHP, Kelengkapan,
                    Warna, KataSandi/Pola, DP,
                    Teknisi, Status, TanggalKonfirmasi,
                    IsiKonfirmasi, Biaya, TambahanBiaya,
                    TotalBiaya, HargaSparepart, Laba/Rugi) 
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        cmd.CommandText = cmdText;

        cmd.Parameters.Add(new OleDbParameter { Value = DateTime.Now.ToString("dd-MM-yyyy") });
        cmd.Parameters.Add(new OleDbParameter { Value = txtNamaPelanggan.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = txtAlamat.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = txtNoHP.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = txtTipeHP.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = txtKeluhan.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = txtKerusakan.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = txtKondisiHP.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = kelengkapan });
        cmd.Parameters.Add(new OleDbParameter { Value = txtWarna.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = int.Parse(txtKataSandiPola.Text) });
        cmd.Parameters.Add(new OleDbParameter { Value = int.Parse(txtDP.Text) });
        cmd.Parameters.Add(new OleDbParameter { Value = txtTeknisi.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = status });
        cmd.Parameters.Add(new OleDbParameter { Value = dateKonfirmasi.Value.ToString("dd-MM-yyyy") });
        cmd.Parameters.Add(new OleDbParameter { Value = txtIsiKonfirmasi.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = int.Parse(txtBiaya.Text) });
        cmd.Parameters.Add(new OleDbParameter { Value = int.Parse(txtTambahanBiaya.Text) });
        cmd.Parameters.Add(new OleDbParameter { Value = totalBiaya });
        cmd.Parameters.Add(new OleDbParameter { Value = txtHargaSparepart.Text });
        cmd.Parameters.Add(new OleDbParameter { Value = labaRugi });

        cmd.ExecuteNonQuery();

        MessageBox.Show("Berhasil!", "Transaksi Servis");

        this.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("An error has occurred: " + ex);
    }
    finally
    {
        conn.Close();
    }
}

您需要引用包含斜杠的列,因此在insert语句中,更改:

NomorNota (AutoNumber, PrimaryKey), Tanggal (Date/Time),
NamaPelanggan (Long Text), Alamat (Long Text), NoHP(Long Text),
TipeHP (Long Text), Keluhan (Long Text), Kerusakan (Long Text),
KondisiHP (Long Text), Kelengkapan (Long Text), Warna (Long Text),
KataSandi/Pola (Number), DP (Currency), Teknisi (Long Text), Status (Long Text), 
TanggalKonfirmasi (Date/Time), IsiKonfirmasi (Long Text),
Biaya (Currency), TambahanBiaya (Currency), TotalBiaya (Currency),
HargaSparepart (Currency), Laba/Rugi (Currency)
KataSandi/Pola to[KataSandi/Pola] 拉巴/鲁吉至[拉巴/鲁吉] 通常应避免在列名中使用此类字符。这会使代码更难阅读。在阅读时,你的头脑可能首先认为它是一个划分,然后才意识到它是一个列名

NomorNota (AutoNumber, PrimaryKey), Tanggal (Date/Time),
NamaPelanggan (Long Text), Alamat (Long Text), NoHP(Long Text),
TipeHP (Long Text), Keluhan (Long Text), Kerusakan (Long Text),
KondisiHP (Long Text), Kelengkapan (Long Text), Warna (Long Text),
KataSandi/Pola (Number), DP (Currency), Teknisi (Long Text), Status (Long Text), 
TanggalKonfirmasi (Date/Time), IsiKonfirmasi (Long Text),
Biaya (Currency), TambahanBiaya (Currency), TotalBiaya (Currency),
HargaSparepart (Currency), Laba/Rugi (Currency)

如果没有显式引用,解析器也会遇到同样的问题,除非它抛出了一个语法错误,而没有意识到它毕竟是一个列名。

您遇到了什么异常?我得到的是System.Data.OleDb.OLEDBEException 0x80040E14:INSERT INTO语句中的语法错误。+1 thx我更改了名称,使其没有斜杠,并在代码中设置,使datagridview有斜杠。
NomorNota (AutoNumber, PrimaryKey), Tanggal (Date/Time),
NamaPelanggan (Long Text), Alamat (Long Text), NoHP(Long Text),
TipeHP (Long Text), Keluhan (Long Text), Kerusakan (Long Text),
KondisiHP (Long Text), Kelengkapan (Long Text), Warna (Long Text),
KataSandi/Pola (Number), DP (Currency), Teknisi (Long Text), Status (Long Text), 
TanggalKonfirmasi (Date/Time), IsiKonfirmasi (Long Text),
Biaya (Currency), TambahanBiaya (Currency), TotalBiaya (Currency),
HargaSparepart (Currency), Laba/Rugi (Currency)