C#和Access:查询输入必须至少包含一个表或查询

时间:2018-03-17 22:19:29

标签: c# ms-access

我试图从表TEAM中获取id并在插入一些客户端时放入客户端..但是... 我应该在插入我的数据库时出现此错误。

     System.Data.OleDb.OleDbException' occurred in System.Data.dll
    Query input must contain at least one table or query. 
   OleDbConnection con = new OleDbConnection(stringcon);
                OleDbCommand cmd = new OleDbCommand();

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

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


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


                con.Open();

                cmd.ExecuteNonQuery();
                con.Close();

所以..我用SQL尝试了类似的东西,但它有效,但是这种格式不起作用。我真的需要使用Olebd

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

1 个答案:

答案 0 :(得分:0)

您无法在INSERT INTO ... VALUES ...查询中使用子查询。您需要使用INSERT INTO .. SELECT。由于您没有使用主查询进行选择,因此您可以这样做,而不是使用子查询。

使用以下SQL而不是当前的SQL字符串

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

请注意,如果电子邮件不是唯一的,则会插入每team.idteam.Email的多行。