错误:查询值的数目和目的地字段的数目不相同-我做错了什么

本文关键字:什么 错了 目的地 查询 字段 错误 | 更新日期: 2023-09-27 18:29:16

我一直在寻找这个错误的解决方案,但没有什么能解决我的问题。在下面的SQL代码中,我有和值一样多的项。我真的不知道我做错了什么?

我的访问数据库有以下列(除了和ID之外,每个都是"短文本")

  • ID
  • 电子邮件
  • 肯沃特
  • vorname
  • nachname
  • telefonnummer
  • strasse
  • ort
  • aktivierungscode

EDIT:我取了一个有日期的列,因为我不知道如何将其实现到sql代码中。。。尽管如此,我还是犯了同样的错误。我还按照别人的建议添加了参数

代码:

public class webUser
{
private string _vorname;
private string _nachname;
private string _eMail;
private string _kennwort;
private string _strasse;
private string _plz;
private string _ort;
private string _telefonnummer;
private string _aktivierungscode;

public webUser()
{
    //
    // TODO: Add constructor logic here
    //
}
 public string eMail
{
    get { return _eMail; }
    set { _eMail= value; }
}
public string kennwort
{
    get {return kennwort; }
    set { _kennwort = value; }
}
public string vorname
{
    get { return _vorname; }
    set { _vorname = value; }
}
public string nachname
{
    get { return _nachname; }
    set { _nachname = value; }
}

public string strasse
{
    get { return _strasse; }
    set { _strasse = value; }
}
public string plz
{
    get { return _plz; }
    set { _plz = value; }
}
public string ort
{
    get { return _ort; }
    set { _ort = value; }
}
public string telefonnummer
{
    get { return _telefonnummer; }
    set { _telefonnummer = value; }
}

public string aktivierungscode
{
    get { return _aktivierungscode; }
    set { _aktivierungscode = value; }
}
public bool checkUser(string eMail)
{
    string sql = "SELECT eMail, kennwort FROM Benutzerdatenbank WHERE eMail ='" + eMail + "'";
    string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Benutzerdatenbank.accdb");
    OleDbConnection con = new OleDbConnection(conStr);
    con.Open();
    OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();
    if (ds.Tables[0].Rows.Count == 1)
        return true;
    else
        return false;
}
public bool addUser(string eMail, string kennwort)
{
    //Hinzufügen eines neuen Benutzers in der Tabelle 'tblUser'
    //Ergebniswert: WAHR=Hinzufügen hat funktioniert
    //              FALSCH=Hinzufügen hat nicht funktioniert (eMail Adresse existiert bereits in der DB)
    //1. Prüfen, ob der Benutzer bereits in der DB existiert; wenn ja => Abbruch
    if (this.checkUser(eMail) == true)
    {
        return false; //eMail existiert bereits
    }
    else
    {
        //Datensatz anlegen: eMail, passwort, enabled, aktivierungscode
        //30-stelligen-Aktivierungscode erzeugen
        string zeichen = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghjiklmnopqrstuvwxyz0123456789";
        string aktivierungscode = "";
        Random rnd = new Random();
        for (int i = 1; i < 62; i++)
        {
            aktivierungscode = aktivierungscode + zeichen.Substring(rnd.Next(0, zeichen.Length - 1), 1);
        }
        string sql = "INSERT INTO Benutzerdatenbank (eMail, kennwort, vorname, nachname, telefonnummer, strasse, plz, ort, aktivierungscode) VALUES ('" +
        eMail + "','" + kennwort + "','" + vorname + "','" + nachname + "','" + telefonnummer + "','" + "','"+ strasse + "','" + plz + "','" + ort + "','" + aktivierungscode + "');";

        //Benutzer anlegen (Datensatz in DB anfügen = INSERT-Anweisung ausführen
        string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Benutzerdatenbank.accdb");
        OleDbConnection con = new OleDbConnection(conStr); //neues Verbindungsobjekt
        OleDbCommand cmd = new OleDbCommand(sql, con);
        con.Open();
        cmd.ExecuteNonQuery(); //Ausführen einer Datenmanipulationsanweisung (INSERT, UPDATE; DELETE)
        con.Close();
        //Versenden des Bestätigungslinks (erst später)
        return true;
    }
}
public void ReadUser(string eMail, string kennwort)
{
    string sql = "SELECT * FROM Benutzerdatenbank WHERE eMail='" + eMail + "' AND kennwort ='" + kennwort + "'";
    string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Benutzerdatenbank.accdb");
    OleDbConnection con = new OleDbConnection(conStr);
    con.Open();
    OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();
    if (ds.Tables[0].Rows.Count == 1)
    {
        this.eMail = (string)ds.Tables[0].Rows[0]["eMail"];
        this.vorname = (string)ds.Tables[0].Rows[0]["vorname"];
        this.nachname = (string)ds.Tables[0].Rows[0]["nachname"];
        this.strasse = (string)ds.Tables[0].Rows[0]["strasse"];
        this.plz = (string)ds.Tables[0].Rows[0]["plz"];
        this.ort = (string)ds.Tables[0].Rows[0]["ort"];
        this.telefonnummer = (string)ds.Tables[0].Rows[0]["telefonnummer"];
    }
    else
    {
        this.eMail = "";
        this.vorname = "";
        this.nachname = "";
    }
}

}

错误:查询值的数目和目的地字段的数目不相同-我做错了什么

INSERT子句中有10列,VALUES子句中有11个值。

我认为这是kennwort+"',0,'"+vorname中的'0'问题所在。