插入记录,自动添加datetime getdate()

时间:2015-06-07 03:29:42

标签: c# sql-server

我有一个简单的sql insert C#语句,有效!但是,当我为datetime getdate()添加一列时,没有空值,插入失败。我试过并查看了各种文章,但我无法得到它。

这是我的代码!

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()允许空值未选中。

因此,这会为任何现有记录添加日期和时间,但是当我尝试从表单提交时,它不起作用。

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

2 个答案:

答案 0 :(得分:5)

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

From MSDN

  

如果值列表中的值与...的顺序不同   表中的列或者没有每个列的值   table,column_list必须用于显式指定列   存储每个传入值

但您的查询只提供两列

在VALUES部分中为表格中的所有列添加值(如果使用了IDENTITY列除外)

employee_id      name                val
4                maternity leave     9
4                Medical leave       5
4                Casual Leave        4

或添加插入列的列表,默认值将用于其他列

INSERT INTO TestTable1 VALUES (@FirstName, @Email, GETDATE())

答案 1 :(得分:-1)

  

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

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();
        }
    }