所以我在完成学校项目时遇到了另一个问题。 仅供参考,我们不使用sql-parameters并且还没有学会如何使用它们。
我正在尝试在sql数据库中插入生日,但我尝试了所有内容,但总是存在数据类型不匹配。
你们可以帮助我(不改变代码的结构)吗? 你可以通过搜索"生日"来查找它。因为其他一切都有德国名字。
我非常感谢你的帮助,因为我非常绝望。 编辑:有一个文本框,用户应该在生日中输入。这就是我获取数据的地方。
编辑:我删除了所有其他不必要的字符串等。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
public class webUser
{
private DateTime _birthday;
public webUser()
{
//
// TODO: Add constructor logic here
//
public DateTime birthday
{
get { return _birhday; }
set { _birthday= 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, string vorname, string zuname, string telefonnummer, string strasse, string plz, string ort, string firma, string titel, DateTime birthday)
{
if (this.checkUser(eMail) == true)
{
return false;
}
else
{
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, Titel, Vorname, Zuname, Firma, birthday, Telefonnummer, Strasse, PLZ, Ort, aktivierungscode) VALUES ('" +
eMail + "','" + kennwort + "','" + titel + "','" + vorname + "','" + zuname + "','" + firma + "','" + birthday+ "','" + telefonnummer + "','" + strasse + "','" + plz + "','" + ort + "','" + aktivierungscode + "');";
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);
OleDbCommand cmd = new OleDbCommand(sql, con);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
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.zuname = (string)ds.Tables[0].Rows[0]["Zuname"];
this.telefonnummer = (string)ds.Tables[0].Rows[0]["Telefonnummer"];
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.titel = (string)ds.Tables[0].Rows[0]["Titel"];
this.firma = (string)ds.Tables[0].Rows[0]["Firma"];
this.birthday= Convert.ToDateTime(ds.Tables[0].Rows[0]["birthday"];
}
else
{
this.eMail = "";
this.vorname = "";
this.zuname = "";
}
}
}
答案 0 :(得分:2)
仅供参考,我们不使用sql-parameters,也没有学习如何使用它们。
然后学习如何使用它们。学习这么做是非常没有意义错误的方式。另外,使用不带参数的日期实际上比使用参数更复杂。
参数非常简单。以下问题包含入门所需的一切:
您需要注意的唯一区别是OleDbCommand使用?
而不是@parameterName
作为SQL语句中的参数占位符。将忽略参数名称,并按?
占位符显示的顺序添加参数。
在您的情况下,相关代码如下所示:
string sql = "INSERT INTO Benutzerdatenbank (eMail, kennwort, Titel, Vorname, Zuname, Firma, birthday, Telefonnummer, Strasse, PLZ, Ort, aktivierungscode) " +
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
OleDbCommand cmd = new OleDbCommand(sql, con);
// The parameter names (first argument) are ignored, the order is important
cmd.Parameters.AddWithValue("@eMail", eMail);
...
cmd.Parameters.AddWithValue("@birthday", birthday);
...
cmd.ExecuteNonQuery();
答案 1 :(得分:1)
将日期参数格式化为&#34;年日期&#34;使用&#34; yyyyMMdd&#34;,如:birthday.ToString(&#34; yyyyMMdd&#34;)。
否则,SQL Server会尝试将其转换为m / d / yyyy格式。
string sql = "INSERT INTO Benutzerdatenbank (eMail, kennwort, Titel, Vorname, Zuname, Firma, birthday, Telefonnummer, Strasse, PLZ, Ort, aktivierungscode) VALUES ('" +
eMail + "','" + kennwort + "','" + titel + "','" + vorname + "','" + zuname + "','" + firma + "','" + birthday.ToString("yyyyMMdd") + "','" + telefonnummer + "','" + strasse + "','" + plz + "','" + ort + "','" + aktivierungscode + "');";
答案 2 :(得分:0)
可能是您的DateTime对象的格式与SQL数据库所希望的格式不匹配。 datetime format to SQL format using C#
答案 3 :(得分:0)
这是使用SQL语言在SQL Server中插入的示例:
该表是PERSON,这是你的结构:
ID,int,主键,自动增量
NAME,nvarchar(50),not null
BIRTHDATE,datetime
现在,插入是:
插入人(姓名,生日)价值观('Jose Luis',DATETIMEFROMPARTS(1988,7,27,0,0,0,0));
并且选择是:
SELECT * FROM BERSON BERETHDATE = DATETIMEFROMPARTS(1988,7,27,0,0,0,0);
此代码正在SQL Server中进行测试。
这个想法是你改变代码的变量'sql'的值,例如push:
var bithdateformat = string.Format(“DATETIMEFROMPARTS({0},{1},{2},{3},{4},{5},{6})”,birthday.Year,birthday.Month ,birthday.Day,0,0,0,0);
string sql =“INSERT INTO Benutzerdatenbank(eMail,kennwort,Titel,Vorname,Zuname,Firma,birthday,Telefonnummer,Strasse,PLZ,Ort,aktivierungscode)VALUES('”+ 电子邮件+“','”+ kennwort +“','”+ titel +“','”+ vorname +“','”+ zuname +“','”+ firma +“','”+ bithdateformat + “','”+ telefonnummer +“','”+ strasse +“','”+ plz +“','”+ ort +“','”+ aktivierungscode +“');”;