c# - 手动迁移时 '00' 附近的语法不正确

标签 c# sql asp.net-mvc

我刚开始使用 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'

SqlParameter() 签名。 enter image description here

最佳答案

问题是您的 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/

相关文章:

c# - 像扩展名为 .csproj 的项目文件可以有除 XML 之外的其他格式吗?

sql - 合并两个或多个select语句的输出

sql - 如何检查列是否没有null约束?

asp.net-mvc - 在 MVC 中使用 Ajax 和 jQuery 通过 Post 调用传递 HTML

asp.net-mvc - 为什么 ASP.NET MVC 中的 SessionID 不断变化?

c# - 在代码合约中使用 Contract.ForAll

c# - 如何获取进程 “type”(应用程序,后台进程或Windows进程)

javascript - 是否可以在 Kendo Panelbar 标题上添加 Kendo 菜单?

c# - 多个提交按钮在 Controller 中获取空值?

mysql - 添加距离到查询结果