C# 错误:查询值和目标字段的数量不相同-我做错了什么?
我一直在寻找解决这个错误的方法,但什么也解决不了我的问题。在下面的SQL代码中,我有和值一样多的项。我真的不知道我做错了什么 我的access数据库有以下列,除和ID外,所有内容都是短文本 身份证件 电子邮件 甘草 沃名称 纳希纳姆 电传打字机 斯特拉斯 请 奥特 aktivierungscode 编辑:我选择了有日期的专栏,因为我不知道如何在sql代码中实现它。。。不过,我还是犯了同样的错误。我还按照某人的建议添加了参数 代码: }INSERT子句中有10列,values子句中有11个值C# 错误:查询值和目标字段的数量不相同-我做错了什么?,c#,sql,asp.net,C#,Sql,Asp.net,我一直在寻找解决这个错误的方法,但什么也解决不了我的问题。在下面的SQL代码中,我有和值一样多的项。我真的不知道我做错了什么 我的access数据库有以下列,除和ID外,所有内容都是短文本 身份证件 电子邮件 甘草 沃名称 纳希纳姆 电传打字机 斯特拉斯 请 奥特 aktivierungscode 编辑:我选择了有日期的专栏,因为我不知道如何在sql代码中实现它。。。不过,我还是犯了同样的错误。我还按照某人的建议添加了参数 代码: }INSERT子句中有10列,values子句中有11个值 我认
我认为这是kennwort+中的“0”,0,+vorname是问题所在。请使用参数化查询。您能解释一下您的确切意思吗?我们在学校就是这么做的。。。我不太明白链接tbh:/上的解释。通过在您喜爱的搜索引擎上搜索bobby表或SQL注入,您应该能够找到有关使用字符串连接构建SQL查询问题的详细解释。您必须使用参数,否则Stackoverflow.com填充将受到影响aneurysms@Alexei列文科夫,好吧,我去看看。谢谢!非常感谢,但现在我发现条件表达式中的数据类型不匹配。您需要根据数据值验证所有列数据类型。如果问题未解决,请打开另一个问题,并提供详细信息。如果对你有用,请接受我的回答。嗯,对不起,我只是在学校,还没有很多知识。根据数据值验证所有列数据类型到底意味着什么?很抱歉,如果我被打扰了,例如,如果一个字段类型是number,并且如果您试图插入字符串值,那么它是数据类型不匹配。您可以转到表定义,获取所有10个字段的数据类型,然后与要传递的值进行比较,看看是否存在这种不匹配。哦,好的,我现在就知道了。我想问题在于我将日期声明为私有字符串geburtsdatum而不是私有日期时间geburtsdatum。。。是这样吗?如果是这样,我如何将其实现到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 = "";
}
}