我有一个简单的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()允许空值未选中。
因此,这会为任何现有记录添加日期和时间,但是当我尝试从表单提交时,它不起作用。
错误是: 列名或提供的值数与表定义不匹配。
答案 0 :(得分:5)
如果INSERT INTO语句中未提供列的列表,则SQL Server期望所有列的值
如果值列表中的值与...的顺序不同 表中的列或者没有每个列的值 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();
}
}