将日期插入 SQL 数据库

本文关键字:数据库 SQL 插入 日期 | 更新日期: 2023-09-27 18:30:46

所以我在做我的学校项目时遇到了另一个问题。仅供参考,我们不使用 sql 参数,并且还没有学习如何使用它们。

我正在尝试将生日插入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 = "";
    }
}

}

将日期插入 SQL 数据库

仅供参考,我们不使用 sql 参数,并且还没有学习如何使用它们。

然后学习如何使用它们。学习以错误的方式做这件事真的没有意义。另外,使用不带参数的日期实际上比使用参数更复杂

参数非常简单。以下问题包含入门所需的一切:

  • 为什么我们总是喜欢在 SQL 语句中使用参数?

您需要注意的唯一区别是 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(); 

将日期参数的格式设置为"年日期月"和"yyyyMMdd",例如:生日。ToString("yyyyMMdd").
否则,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 + "');";
可能是

DateTime 对象的格式与 SQL 数据库希望的格式不匹配。 使用 C# 的日期时间格式为 SQL 格式

下面是使用 SQL 语言在 SQL Server 中插入的示例:

该表是 PERSON,这是您的结构:

ID、整数、主键、自动增量

NAME, nvarchar(50), not null

出生日期、日期时间

现在,插入是:

插入人(姓名,出生日期)值("何塞·路易斯",日期时间来自零件(1988,7,27,0,0,0,0));

对于选择是:

选择 * 从 PERSON 其中出生日期 = 日期时间来自部分(1988, 7, 27, 0,0,0,0);

此代码正在 SQL Server 中进行测试。

这个想法是你改变代码的变量'sql'的值,例如push:

var bithdateformat = string。格式("DATETIMEFROMPARTS({0}, {1}, {2}, {3}, {4}, {5}, {6})", 生日.年,生日。月份,生日。日, 0, 0, 0, 0);

字符串 sql = "INSERT INTO Benutzerdatenbank (eMail, kennwort, Titel, Vorname, Zuname, Firma, birthday, Telefonnummer, Strasse, PLZ, Ort, aktivierungscode) VALUES ('" + 电子邮件

+ "','" + Kennwort + "','" + 标题 + "','" + vorname + "','" + zuname + "','" + firma + "','" + bithdateformat + "','" + telefonnummer + "','" + strasse + "','" + 请 + "','" + ort + "','" + aktivierungscode + "');";