C# 靠近'的语法不正确;00';论人工迁移

C# 靠近'的语法不正确;00';论人工迁移,c#,sql,asp.net-mvc,C#,Sql,Asp.net Mvc,我刚开始使用Asp.Net,正在尝试手动将数据添加到我的数据库中。 我进行了以下迁移,将dateTime添加到数据库中的相关字段中,但我得到了一个错误,在“00”附近的语法不正确 不确定这意味着什么,据我所知,我正在向数据库传递正确的数据类型 有什么想法吗 namespace VidlyNew.Migrations { using System; using System.Data.Entity.Migrations; public partial class AddB

我刚开始使用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()
        {
        }
    }
}
模型

更新了以下输入:

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()
签名。

您不能在查询中直接将c#datetime分配给SQL Server datetime。

问题出在查询部分,您试图将c#datetime分配给sql server列。你可以这样做

Sql("UPDATE Customers SET CustomerBirthDate = '12-19-1990' WHERE Id = 1");

SQL Server尝试根据目标类型将字符串转换为日期时间(或日期)。如果您的日期是SQL Server可接受的格式,则转换将隐式完成。

问题是,您的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注入漏洞。

您的查询生成如下:

UPDATE Customers SET CustomerBirthDate = 19/12/1990 12:00:00 AM WHERE Id = 1
取决于你的文化。这对于SQL Server是无效的日期

您可以简单地编写如下内容:

UPDATE Customers SET CustomerBirthDate = '1990/12/19' WHERE Id = 1

因为你的约会是硬编码的。如果不是硬编码的,请使用预先准备好的语句。

我以前确实尝试过,但SQL Server仍然将日期解释为字符串,因此与db存在冲突,db需要
DateTime
@RichC这取决于SQL Server使用的区域设置。您也可以尝试
“1990-12-20”
似乎已将错误更改为,
无法从“system.data.sqlclient.sqlparameter”转换为“bool”
。请参见上面的编辑发布
Sql
函数的声明。它可能已经有了一个重载,它接受一个
bool
-您可能需要添加另一个接受
SqlParameter
的重载,发布了上面的参数,只有一个接受
bool
isNullable
,我的模型中的日期字段可以为Null。我说的是您正在调用的
Sql
函数,不是
SqlParameter
构造函数。现在听起来可能很愚蠢,不知道你的确切意思,这个函数不是我帖子中的
Sql
吗?
UPDATE Customers SET CustomerBirthDate = '1990/12/19' WHERE Id = 1