C# 插入记录,自动添加日期时间getdate()

C# 插入记录,自动添加日期时间getdate(),c#,sql-server,C#,Sql Server,我有一个简单的sql insert C#语句,它可以工作!但是,当我为datetime getdate()添加一列时,如果没有空值,insert将失败。我试过看各种各样的文章,但我就是看不懂 这是我的密码 string constr = ConfigurationManager.ConnectionStrings[ "My_DatabaseConnectionString"].ConnectionString; using (SqlConnection con =

我有一个简单的sql insert C#语句,它可以工作!但是,当我为datetime getdate()添加一列时,如果没有空值,insert将失败。我试过看各种各样的文章,但我就是看不懂

这是我的密码

string constr = ConfigurationManager.ConnectionStrings[
                "My_DatabaseConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
    using (SqlCommand cmd = new SqlCommand(
                            "INSERT INTO TestTable1 VALUES(@FirstName, @Email)"))
    {
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@FirstName", user.FirstName);
        cmd.Parameters.AddWithValue("@Email", user.Email);                    
        cmd.Connection = con;
        con.Open();
        cmd.ExecuteNonQuery();
        con.Close();
    }
}
这是可行的,因此我使用SQL Server管理器添加了一个新的列Date,其中datetime和getdate()允许不选中空值

所以这会将日期和时间添加到任何现有记录中,但当我尝试从表单提交时,它不起作用

错误是:
提供的列名称或值数与表定义不匹配。

如果INSERT INTO语句中未提供列列表,则SQL Server要求所有列的值

如果值列表中的值的顺序与 表中的列或中的每一列都没有值 表,列_list必须用于显式指定 存储每个传入值

但是您的查询只提供两列

在“值”部分中为表中的所有列(除标识列(如果使用))添加值

插入TestTable1值(@FirstName、@Email、GETDATE())
或添加插入列的列表,默认值将用于其他列

插入TestTable1(FirstName,Email)值(@FirstName,@Email)

如果INSERT INTO语句中未提供列列表,则SQL Server要求所有列的值

如果值列表中的值的顺序与 表中的列或中的每一列都没有值 表,列_list必须用于显式指定 存储每个传入值

但是您的查询只提供两列

在“值”部分中为表中的所有列(除标识列(如果使用))添加值

插入TestTable1值(@FirstName、@Email、GETDATE())
或添加插入列的列表,默认值将用于其他列

插入TestTable1(FirstName,Email)值(@FirstName,@Email)
使用DateTime.Now获取时间和日期

将其作为参数添加到查询中

您的代码应该是这样的

使用DateTime.Now获取时间和日期

将其作为参数添加到查询中

您的代码应该是这样的


共享引发错误的代码。如果您清楚“with datetime and getdate()allow nulls not checked”是什么意思,那就更好了。不要让我们猜测。至少,在您发送的
插入中提供列名。永远不要让服务器猜你想要什么。@Alejandro告诉你在哪里,根据Fabio的回答。p共享引发错误的代码。如果您清楚“with datetime and getdate()allow nulls not checked”是什么意思,那就更好了。不要让我们猜测。至少,在您发送的
插入中提供列名。永远不要让服务器猜你想要什么。@Alejandro告诉你在哪里,根据Fabio的回答。p尝试将日期时间作为字符串传递从来都不是一个好主意。那么,更好的方法是什么?直接传递datetime实例。此外,您假设sql上的GETDATE()函数将返回与System.datetime.Now相同的datetime值。但是,这可能不正确,因为不同计算机上的程序经常使用sql server,因此,该程序很可能运行在与sql server完全不同的时区。尝试将日期时间作为字符串传递从来都不是一个好主意。那么,更好的方法是什么呢?直接传递datetime实例。此外,假设GETDATE()sql上的函数将返回与System.datetime.Now相同的datetime值。但是,这可能不正确,因为sql server通常由不同计算机上的程序使用,因此该程序很可能运行在与sql server完全不同的时区。
System.DateTime.Now.ToShortDateString();
    string constr = ConfigurationManager.ConnectionStrings["My_DatabaseConnectionString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(constr))
    {
        using (SqlCommand cmd = new SqlCommand("INSERT INTO TestTable1 VALUES (@FirstName,@Email,@DateTime)"))
        {
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@FirstName", user.FirstName);
            cmd.Parameters.AddWithValue("@Email", user.Email);                    
               cmd.Parameters.AddWithValue("@DateTime",System.DateTime.Now);                    
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            con.Close();
        }
    }