“查询值和目标字段的数量不相同。”

时间:2019-10-18 15:59:55

标签: c# database ms-access

这是我的数据库类中的一段代码:

public static int ChangeTable(string strSql , string strFileName)
{
   OleDbConnection c = new OleDbConnection();
   c = MakeConnection(strFileName);
   OleDbCommand cmd = new OleDbCommand(strSql, c);
   int nAffectedRows = cmd.ExecuteNonQuery();
   c.Close();
   return nAffectedRows;
}

,它在我的用户类中的使用方式如下:

public int AddUser(string fname, string lname , string email, string password)
{
    string strSql = "INSERT INTO [users] ([email] , [password] , [fname] , [lname]) VALUES ('" + 
email + "''" + password + "''" + fname + "''" + lname + "');";
    string dbname = "DataBase.mdb";
    int didItWork = Dbase.ChangeTable(strSql, dbname);
return didItWork;

} 

每当我运行它时,都会弹出此错误:

  

“ System.Data.OleDb.OleDbException:'查询值和目标字段的数量不同。'”   并且总是使命令“ int nAffectedRows = cmd.ExecuteNonQuery();”变色

我不知道出了什么问题,这是我的第一个网站项目,我真的可以使用一些帮助。

p.s我正在使用asp.net(这是学校的作业)。

1 个答案:

答案 0 :(得分:1)

问题是插入内容的标题与此处传递的值数量不匹配:

 string strSql = "INSERT INTO [users] ([email] , [password] , [fname] , [lname]) VALUES ('" + 
    email + "''" + password + "''" + fname + "''" + lname + "');";

正确将在值之间添加逗号

 string strSql = "INSERT INTO [users] ([email] , [password] , [fname] , [lname]) VALUES ('" + 
    email + "','" + password + "','" + fname + "','" + lname + "');";

更好的是使用参数代替:

string strSql = "INSERT INTO [users]([email],[password],[fname],[lname]) 
                  VALUES (@email,@password,@fname,@lname);";

cmd.CommandText = strSql;

// add named parameters
cmd.Parameters.AddRange(new OleDbParameter[]
{
    new OleDbParameter("@email", ...),
    new OleDbParameter("@password", ...),
    ...
});

// execute
cmd.ExecuteNonQuery();