【问题标题】:Number of query values and destination fields are not the same OLEDB查询值和目标字段的数量不相同 OLEDB
【发布时间】:2018-03-20 14:49:32
【问题描述】:

我在尝试将数据插入数据库时​​遇到错误。 这是错误。

“System.Data.OleDb.OleDbException:'查询值和目标字段的数量不同。'”。

    cmd.CommandText = "INSERT INTO [clients]([Firstname],[Lastname],[Email],[Phonenumber],[Address],[CNP],[SeriesCI],[NumberCI],[Sex],[CUI],[J],[Personaldescription],[Temperament],[Provenance],[Registerdata],[Idteam],[NumeAgent])" +
        "Select @f,@l,@e,@ph,@add,@cnp,@ser,@n,@sex,@cui,@j,@pd,@te,@prov,@reg,team.[id] from team where team.[Email]=@email,@agent";


    cmd.Parameters.AddWithValue("@f", materialSingleLineTextField16.Text);
    cmd.Parameters.AddWithValue("@l", materialSingleLineTextField15.Text);
    cmd.Parameters.AddWithValue("@e", materialSingleLineTextField14.Text);
    cmd.Parameters.AddWithValue("@ph", materialSingleLineTextField13.Text);
    cmd.Parameters.AddWithValue("@add", materialSingleLineTextField6.Text);
    cmd.Parameters.AddWithValue("@cnp", materialSingleLineTextField1.Text);
    cmd.Parameters.AddWithValue("@ser", materialSingleLineTextField3.Text);
    cmd.Parameters.AddWithValue("@n", materialSingleLineTextField2.Text);
    cmd.Parameters.AddWithValue("@sex", gender);
    cmd.Parameters.AddWithValue("@cui", materialSingleLineTextField4.Text);
    cmd.Parameters.AddWithValue("@j", materialSingleLineTextField5.Text);
    cmd.Parameters.AddWithValue("@pd", richTextBox2.Text);
    cmd.Parameters.AddWithValue("@te", bunifuDropdown1.selectedValue);
    cmd.Parameters.AddWithValue("@prov", bunifuDropdown2.selectedValue);
    cmd.Parameters.AddWithValue("@reg", DateTime.Now.ToString("dd-MM-yyyy HH: mm:ss"));
    cmd.Parameters.AddWithValue("@email", Form1.Email);
    cmd.Parameters.AddWithValue("@agent", NumeAgent);

在 DB(客户端)中,我有 17 列 + id(但 id 是自动递增的)。 我究竟做错了什么?

clients

team

cmd.CommandText = "INSERT INTO [clients]([Firstname],[Lastname],[Email],[Phonenumber],[Address],[CNP],[SeriesCI],[NumberCI],[Sex],[CUI],[J],[Personaldescription],[Temperament],[Provenance],[Registerdata],[NumeAgent],[Idteam])" + "Select @f,@l,@e,@ph,@add,@cnp,@ser,@n,@sex,@cui,@j,@pd,@te,@prov,@reg,[Firstname]+' '+[Lastname] from team where [Email]=@email,team.[id] from team where team.[Email]=@email";

【问题讨论】:

  • [NumeAgent] 没有对应的插入值。
  • Bug 在这里:team.[Email]=@email,@agent", @agent` 列值在WHERE 子句之后指定。
  • @AlexK。该值取自函数。
  • 您不能在 INSERT 语句中放置自动增量字段。这在 MSSQL 中很简单,不确定 MS Access 中的最佳方式。您可能需要使用带有新行的 DataTable,然后使用 DataAdapter 来 Update(),然后您的 DataTable 将填充新的 id。希望您可以使用 MS Access 搜索更好的方法。
  • 我没有将自动增量放入插入语句中。

标签: c# ms-access oledb oledbcommand


【解决方案1】:

尝试像这样更改您的 INSERT 语句:

cmd.CommandText = "INSERT INTO [clients]([Firstname],[Lastname],[Email],[Phonenumber],[Address],[CNP],[SeriesCI],[NumberCI],[Sex],[CUI],[J],[Personaldescription],[Temperament],[Provenance],[Registerdata],[Idteam],[NumeAgent])" +
    "Select @f,@l,@e,@ph,@add,@cnp,@ser,@n,@sex,@cui,@j,@pd,@te,@prov,@reg,team.[id],@agent from team where team.[Email]=@email";

注意,我已将 ,@agent 部分从 WHERE 子句的末尾移到 SELECT 字段列表的末尾。

但是,我不确定您的总体想法是否正确。如果您从team 表中选择要插入的值,为什么还要将它们指定为命令参数?

【讨论】:

  • 我正在尝试这样的事情,没有参数: cmd.CommandText = "INSERT INTO [clients]([Firstname],[Lastname],[Email],[Phonenumber],[Address],[ CNP],[SeriesCI],[NumberCI],[Sex],[CUI],[J],[Personaldescription],[Temperature],[Provenance],[Registerdata],[NumeAgent],[Idteam])" + "选择@f,@l,@e,@ph,@add,@cnp,@ser,@n,@sex,@cui,@j,@pd,@te,@prov,@reg,[名字]+ ' '+[Lastname] from team where [Email]=@email,team.[id] from team where team.[Email]=@email";
  • @Daniel,在您输入where [Email=@email] 之后,您不能指定任何其他列来选择,例如team.[id]
  • 我该怎么做.. 我的意思是解决错误。我必须将名字和姓氏从团队表中输入客户。如果我从选择中删除该姓名和姓氏并留下具有所选 ID 的名字和姓氏,它就可以工作。
  • @Daniel 请将您的数据库模式描述添加到问题中,并描述您想要实现的目标。所以,应该只从team 表中获取名字和姓氏列,而要插入clients 的其余列应该来自C# 代码,对吗?
  • 好的,我添加了一些图片,是的,c#代码是正确的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多