这是我的数据库类中的一段代码:
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(这是学校的作业)。
答案 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();