让我解释一下为什么会出现错误。
你的 sql 命令是这样的:SqlCommand cmd = new SqlCommand("insert into Student(@RegNo,@Name,@Address,@CreatedTime) values(@RegNo,@Name,@Address,Getdate())");
这意味着您正在告诉 sql 执行与此等效的查询:
insert into Student(@RegNo,@Name,@Address,@CreatedTime) values(1234,'name value','address value',GetDate()) -- i've put some vlaues for example
如您所见,这是不正确的。
执行insert查询时,要指定列names和values,names进入第一个括号,values进入Values关键字之后的第二个,逻辑上如此没有列名 "@RegNo" 或 "@Name" 而是使用数据库中指定的真实列名 "RegNo", “名称”,因此查询应如下所示:
insert into Student(RegNo,Name,Address,CreatedTime) values(1234,'name value','address value',GetDate())
为什么会出现错误消息?
在 sql 中,变量以 @ 前缀声明,例如:declare @a int=5; 因此,当尝试执行查询时 insert into Student(@RegNo,....... sql 将 @RegNo 识别为变量,因为找不到声明,您会得到一个错误信息
必须声明标量变量@RegNo。
你应该只使用'@'来指定参数而不是列名
在你的 c# 代码中试试这个:
SqlCommand cmd = new SqlCommand("insert into Student(RegNo,Name,Address,CreatedTime) values(@RegNo,@Name,@Address,@CreatedTime)");
cmd.Parameters.AddWithValue("@RegNo", "object value");
cmd.Parameters.AddWithValue("@Name", "object value");
cmd.Parameters.AddWithValue("@Address", "object value");
cmd.Parameters.AddWithValue("@RegNo", "object value");
cmd.Parameters.AddWithValue("@CreatedTime", DateTime.Now); //replaced GetDate with DateTime.Now
!注意:使用SqlCommand的时候可以先在sql执行查询,看看是不是搞错了