我刚开始使用 Asp .Net 并尝试手动将数据添加到我的数据库中。
我进行了以下迁移,将 dateTime
添加到数据库中的相关字段,但出现错误,'00' 附近的语法不正确
。
不确定这意味着什么,据我所知我正在将正确的数据类型传递给数据库。
有什么想法吗?
namespace VidlyNew.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddBirthDateValues : DbMigration
{
public override void Up()
{
Sql($"UPDATE Customers SET CustomerBirthDate = {DateTime.Parse("19-12-1990")} WHERE Id = 1");
}
public override void Down()
{
}
}
}
模型
using System;
using System.ComponentModel.DataAnnotations;
namespace VidlyNew.Models
{
public class Customers
{
public int Id { get; set; }
[Required]
[StringLength(255)]
public string Name { get; set; }
public bool IsSubscribedToNewsletter { get; set; }
public MembershipType MembershipType { get; set; }
public byte MembershipTypeId { get; set; }
public DateTime? CustomerBirthdate { get; set; }
}
}
更新了以下输入:
SqlParameter DateParam1 = new SqlParameter("@CustomerBirthDate_1", new DateTime(1990,12,01));
Sql("UPDATE Customers SET CustomerBirthDate = @CustomerBirthDate_1 WHERE Id = 1", DateParam1);
但是现在我有以下错误:
Cannot convert from 'System.Data.Sqlclient.Sqlparameter' to 'bool'
最佳答案
问题是您的 SQL 语句最终会像 ...SET CustomerBirthDate = 1990/12/19 00:00:00 ...
取决于您的文化,这是无效的SQL 语法(作为字符串提供的日期值必须用引号括起来)。
您应该使用参数而不是内联 SQL 来提供值。由于您用 Sql
调用包装它,它可能意味着重构它以允许传递一个或多个参数:
SqlParameter p = new SqlParameter("@CustomerBirthDate",new DateTime(1990,12,19));
Sql("UPDATE Customers SET CustomerBirthDate = @CustomerBirthDate WHERE Id = 1", p);
虽然您可以只用单引号将值括起来 (SET CustomerBirthDate = '1990-12-19'
),但我会养成使用参数的习惯传递值。这将意味着更少的格式问题(尤其是日期/时间)和更少的 SQL 注入(inject)漏洞。
关于c# - 手动迁移时 '00' 附近的语法不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41232421/