C# 使用SQL插入日期时间(转换为字符串时)
因此,基本上我使用两层,第一层称为“BL”(代表业务逻辑),另一层称为“DAL”C# 使用SQL插入日期时间(转换为字符串时),c#,mysql,datetime,C#,Mysql,Datetime,因此,基本上我使用两层,第一层称为“BL”(代表业务逻辑),另一层称为“DAL” 我有一个数据库,其中包含一个users表(在它的一个表中) BL通过引用(.dll)访问DAL,DAL访问数据库(BL不能直接访问数据库) 我想接收BL上的用户信息,将其发送给DAL,DAL将其插入数据库 我目前的方法: BL: public bool InsertUser(string userFName、string userLName、string userPass、DateTime userBirth、st
我有一个数据库,其中包含一个users表(在它的一个表中)
BL通过引用(.dll)访问DAL,DAL访问数据库(BL不能直接访问数据库) 我想接收BL上的用户信息,将其发送给DAL,DAL将其插入数据库 我目前的方法: BL:
public bool InsertUser(string userFName、string userLName、string userPass、DateTime userBirth、string userEmail、string userCountry)
{
if(UsersDAL.Insert(userFName、userLName、userPass、userBirth.ToString()、userEmail、userCountry))
{
返回true;
}
返回false;
}
DAL:
公共静态bool Insert(字符串userFName、字符串userLName、字符串userPass、字符串userBirth、字符串userEmail、字符串userCountry)
{
DateTime userBirth=DateTime.Parse(userBirth);
尝试
{
OleDbHelper.fill(“插入到UsersTable(userFName、userLName、userPass、userBirth、userEmail、userCountry、userActive)值(“+userFName+”、“+userLName+”、“+userPass+”、“+userBirth+”、“+userEmail+”、“+userCountry+”、true)、“UsersTable”);
}
抓住
{
返回false;
}
返回true;
}
问题发生在Datetime上,所以我找不到任何解决方案注意:在数据库中,“userBirth”是一个日期时间我相信您试图在数据库中的日期中插入字符串。您应该能够将字符串转换为适合数据库中日期格式的日期(甚至可以删除userBirth上的.toString()方法,并将Insert方法中的userBirth类型更改为DateTime) < >编辑:尝试这样做,而不是在查询的中间添加DATETIME作为字符串:
SqlCommand cmd = new SqlCommand("INSERT INTO <table> (<column>) VALUES (@value)", connection);
cmd.Parameters.AddWithValue("@value", dateTimeVariable);
SqlCommand cmd=newsqlcommand(“插入()值(@value)”,连接);
cmd.Parameters.AddWithValue(“@value”,dateTimeVariable);
我相信您试图在数据库中的日期中插入字符串。您应该能够将字符串转换为适合数据库中日期格式的日期(甚至可以删除userBirth上的.toString()方法,并将Insert方法中的userBirth类型更改为DateTime)
< >编辑:尝试这样做,而不是在查询的中间添加DATETIME作为字符串:
SqlCommand cmd = new SqlCommand("INSERT INTO <table> (<column>) VALUES (@value)", connection);
cmd.Parameters.AddWithValue("@value", dateTimeVariable);
SqlCommand cmd=newsqlcommand(“插入()值(@value)”,连接);
cmd.Parameters.AddWithValue(“@value”,dateTimeVariable);
基本上,这里的基本问题是首先将日期时间视为字符串。这是没有必要的,除了极少数情况。更重要的问题是将值连接到SQL中的常规做法,由于各种原因,这是不好的。其中一个原因——实际上是更次要的原因之一——是数字和日期的格式问题
基本上:使用sql参数。通过将该值作为参数而不是串联字符串添加,它将正常工作。您也不会受到如此严重的影响。基本上,这里的基本问题是首先将日期时间视为字符串。这是没有必要的,除了极少数情况。更重要的问题是将值连接到SQL中的常规做法,由于各种原因,这是不好的。其中一个原因——实际上是更次要的原因之一——是数字和日期的格式问题
基本上:使用sql参数。通过将该值作为参数而不是串联字符串添加,它将正常工作。您也不会受到如此严重的影响。在您的业务层中,不要使用
ToString()
将DateTime
值转换为string
:
现在在数据访问层中,对该参数使用DateTime
,而不是string
。现在,DateTime userBirthday=…
行是多余的:
public static bool Insert(string userFName, string userLName, string userPass, DateTime userBirth, string userEmail, string userCountry)
{
try
{
OleDbHelper.fill("INSERT INTO UsersTable(userFName, userLName, userPass, userBirth, userEmail, userCountry, userActive) VALUES('" + userFName + "', '" + userLName + "', '" + userPass + "', " + userBirth + ", '" + userEmail + "', '" + userCountry + "', true)", "UsersTable");
}
catch
{
return false;
}
return true;
}
作为旁注,你应该这样做。使用当前的字符串连接方法,您很容易受到SQL注入的影响。在您的业务层中,不要使用
ToString()将DateTime
值转换为string
:
现在在数据访问层中,对该参数使用DateTime
,而不是string
。现在,DateTime userBirthday=…
行是多余的:
public static bool Insert(string userFName, string userLName, string userPass, DateTime userBirth, string userEmail, string userCountry)
{
try
{
OleDbHelper.fill("INSERT INTO UsersTable(userFName, userLName, userPass, userBirth, userEmail, userCountry, userActive) VALUES('" + userFName + "', '" + userLName + "', '" + userPass + "', " + userBirth + ", '" + userEmail + "', '" + userCountry + "', true)", "UsersTable");
}
catch
{
return false;
}
return true;
}
作为旁注,你应该这样做。使用当前的字符串连接方法,您很容易受到SQL注入的影响。Gah!Sql注入啊。阿尔多:不要把约会时间当作一根绳子。什么问题?另外,为什么要将DateTime
转换为String
,以便在下一个方法中将其转换回DateTime
?使用上面提到的sql参数。当您尝试查找即将到来的生日时,您会后悔没有将其作为DateTime thingy
您确实需要对该查询进行参数化。它不仅可以解决日期时间问题,还可以帮助您抵御SQL注入攻击,甚至可以通过允许重用SQL执行计划来提高性能!Sql注入啊。阿尔多:不要把约会时间当作一根绳子。什么问题?另外,为什么要将DateTime
转换为String
,以便在下一个方法中将其转换回DateTime
?使用上面提到的sql参数。当您尝试查找即将到来的生日时,您会后悔没有将其作为DateTime thingy
您确实需要对该查询进行参数化。它不仅可以解决日期时间问题,还可以帮助保护您免受