首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Insert Into语法错误

问C# Insert Into语法错误
EN

Stack Overflow用户
提问于 2016-06-23 02:37:37
回答 4查看 88关注 0票数 0

我正在尝试在MS Access中将数据插入到表中。我一直收到SQL语句末尾缺少分号(;)的错误。或者一个不同的错误,说明我的Insert查询需要包含一个值或表。以下是我的代码

代码语言:javascript
复制
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;



namespace MiddleWare
{
public partial class Sales : Form
{
    public Sales()
    {
        InitializeComponent();
    }

    private void btnUpdate_Click(object sender, EventArgs e)
    {
        int empId = int.Parse(txtEmpID.Text);
        string cmdText = @"INSERT INTO [Sales] 
                        ([Printers], [Ink], [Paper])
               VALUES (@Printers,@Ink,@Paper)
               SELECT @EmpID FROM (Emplopyee)";

        using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\cp-stud-nas1\users\mat72462\Documents\SalesData.accdb"))
        using (OleDbCommand cmd = new OleDbCommand(cmdText, con))
        {
            con.Open();
            cmd.Parameters.AddWithValue("@Printers", OleDbType.VarWChar).Value = txtPrinters.Text;
            cmd.Parameters.AddWithValue("@Ink", OleDbType.VarWChar).Value = txtInk.Text;
            cmd.Parameters.AddWithValue("@Paper", OleDbType.VarWChar).Value = txtPaper.Text;
            cmd.Parameters.AddWithValue("@EmpID", OleDbType.VarWChar).Value = txtEmpID.Text;
            cmd.ExecuteNonQuery();

            cmd.Parameters.Clear();
            cmd.Parameters.AddWithValue("@EmpID", txtEmpID.Text);

            cmd.CommandText = "SELECT [Total Sales] FROM Sales WHERE EmpID=@EmpID";
            string result = cmd.ExecuteScalar().ToString();
            MessageBox.Show(result);

        }
    }

    private void Sales_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'DataSet1.DataTable1' table. You can move, or remove it, as needed.
        this.DataTable1TableAdapter.Fill(this.DataSet1.DataTable1);






    }

    private void btnReport_Click(object sender, EventArgs e)
    {
        OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\cp-stud-nas1\users\mat72462\Documents\SalesData.accdb");

        {
            this.DataTable1TableAdapter.Fill(this.DataSet1.DataTable1);

            this.reportViewer1.RefreshReport();
        }
    }
}
}
EN

回答 4

Stack Overflow用户

发布于 2016-06-23 02:40:55

您应该用分号分隔查询

代码语言:javascript
复制
string cmdText = @"INSERT INTO [Sales] 
                ([Printers], [Ink], [Paper])
       VALUES (@Printers,@Ink,@Paper);
       SELECT @EmpID FROM (Emplopyee)";

此外,您不能将列名作为参数传递。在这种情况下使用动态查询。

票数 0
EN

Stack Overflow用户

发布于 2016-06-23 02:41:51

您应该将查询更改为:

代码语言:javascript
复制
 string cmdText = @"INSERT INTO [Sales] 
                    ([Printers], [Ink], [Paper], [EmpID])
           VALUES (@Printers,@Ink,@Paper,
                   SELECT EmpID FROM (Employee) )";
票数 0
EN

Stack Overflow用户

发布于 2016-06-23 05:00:54

它最有可能是这样的:

代码语言:javascript
复制
string cmdText = @"INSERT INTO [Sales] 
    ([Printers], [Ink], [Paper], [EmpID])
    VALUES (@Printers, @Ink, @Paper, @EmpID)";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37975875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档