Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';查询值和目标字段的数量不相同;_C#_Database_Ms Access - Fatal编程技术网

C# ';查询值和目标字段的数量不相同;

C# ';查询值和目标字段的数量不相同;,c#,database,ms-access,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.Execut

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

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.OLEDBEException:'查询值和目标字段的数目不相同。” 而且它总是将命令“int naffectrows=cmd.ExecuteNonQuery();”的背景色设置为

我不知道怎么了,这是我的第一个网站项目,我真的需要一些帮助


p、 我正在使用asp.net(这是一个学校作业)。

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

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

值之间缺少逗号。最好的选择是使用参数来防止Sql注入