System.Data.SqlClient.SqlException: 关键字 'where' 附近有语法错误

时间:2021-07-14 17:01:40
      我是新手一枚,在使用SQL 语句的时候出现了错误:System.Data.SqlClient.SqlException: 关键字 'where' 附近有语法错误
        SqlConnection con = new SqlConnection(@"Server=.\SQLEXPRESS;Integrated Security = True;database=SJKDB");
        string insertsgrade = "insert into grade(Sscore) values(@Sscore) where studentID = @studentID and ExamDate = @ExamDate";
        SqlCommand insert = new SqlCommand(insertsgrade, con);
        insert.Parameters.AddWithValue("@Sscore", int.Parse(subjectscore));
        insert.Parameters.AddWithValue("@studentID", Session["SstudentID"].ToString());
        insert.Parameters.AddWithValue("@ExamDate", (DateTime.Parse(Session["SExamDate"].ToString())).ToShortDateString());
        con.Open();
        insert.ExecuteNonQuery();
        con.Close()


Session的部分我用LABEL观察到了都没有问题,不知道insert语句哪个地方写错了,请大家指教,谢谢!

14 个解决方案

#1


sql不对,你干嘛要where?

#2


引用 1 楼 starfd 的回复:
sql不对,你干嘛要where?


突然发现insert后面不能接where,但是我如何选取特定的一行来进行插入呢?

#3


不懂你的意思,什么叫选取特定的一行呢……

#4


引用 3 楼 starfd 的回复:
不懂你的意思,什么叫选取特定的一行呢……

就是取满足studentid和ExamDate的值的条件的一行,然后把分数给插入进去

#5


后面跟select语句啊

#6


insert into table
select a,b,c from anothertable where 1=1

你是要这种sql吗?

#7


引用 2 楼 yyl_wsx 的回复:
Quote: 引用 1 楼 starfd 的回复:

sql不对,你干嘛要where?


突然发现insert后面不能接where,但是我如何选取特定的一行来进行插入呢?


没有什么“选择某行中间插入”的概念,插入记录的位置永远都是由数据库底层随机——按照磁盘块空闲或者聚簇索引数据结构顺序等等——排序的。不是你想放在哪个记录后边就放在哪个记录后边的。

#8


如果你插入完记录,希望相近内容的记录列表时显示在一起,就要写 order by 语句,例如
  sleect * from grade order by studentID,ExamDate 
之类的。

插入时根本不是按照你想象的“位置”去插入的,数据记录具体插入在哪里不是你能决定的。

#9


引用 4 楼 yyl_wsx 的回复:
Quote: 引用 3 楼 starfd 的回复:

不懂你的意思,什么叫选取特定的一行呢……

就是取满足studentid和ExamDate的值的条件的一行,然后把分数给插入进去

我怎么感觉你这个不是要insert,而是要update……

#10


update grade set Sscore=@Sscore where studentID = @studentID and ExamDate = @ExamDate

#11


你那个是要更新操作,不是插入,楼上已经给出答案了

#12


刚把数据保存在 Session 集合而已,还没有保存到数据库里边,哪来的更新操作呢?

这个还是应该根据实际的程序需求的分析出发的,而不是根据英文字儿更接近哪个东西来猜测的。

#13


为了撸主这40分,大牛们操透了心 System.Data.SqlClient.SqlException: 关键字 'where' 附近有语法错误
开玩笑:)

答案上面都差不多了

--插入
insert into table values(xxx,xxx,xx)
--从其他表取数据插入
insert into table(xxx,xxx,xxx,xxx)
select xxx,xxx,xxx,xxx from tableother where clause
--更新
update table set expression where clause

#14


该回复于2016-04-30 23:42:15被版主删除

#1


sql不对,你干嘛要where?

#2


引用 1 楼 starfd 的回复:
sql不对,你干嘛要where?


突然发现insert后面不能接where,但是我如何选取特定的一行来进行插入呢?

#3


不懂你的意思,什么叫选取特定的一行呢……

#4


引用 3 楼 starfd 的回复:
不懂你的意思,什么叫选取特定的一行呢……

就是取满足studentid和ExamDate的值的条件的一行,然后把分数给插入进去

#5


后面跟select语句啊

#6


insert into table
select a,b,c from anothertable where 1=1

你是要这种sql吗?

#7


引用 2 楼 yyl_wsx 的回复:
Quote: 引用 1 楼 starfd 的回复:

sql不对,你干嘛要where?


突然发现insert后面不能接where,但是我如何选取特定的一行来进行插入呢?


没有什么“选择某行中间插入”的概念,插入记录的位置永远都是由数据库底层随机——按照磁盘块空闲或者聚簇索引数据结构顺序等等——排序的。不是你想放在哪个记录后边就放在哪个记录后边的。

#8


如果你插入完记录,希望相近内容的记录列表时显示在一起,就要写 order by 语句,例如
  sleect * from grade order by studentID,ExamDate 
之类的。

插入时根本不是按照你想象的“位置”去插入的,数据记录具体插入在哪里不是你能决定的。

#9


引用 4 楼 yyl_wsx 的回复:
Quote: 引用 3 楼 starfd 的回复:

不懂你的意思,什么叫选取特定的一行呢……

就是取满足studentid和ExamDate的值的条件的一行,然后把分数给插入进去

我怎么感觉你这个不是要insert,而是要update……

#10


update grade set Sscore=@Sscore where studentID = @studentID and ExamDate = @ExamDate

#11


你那个是要更新操作,不是插入,楼上已经给出答案了

#12


刚把数据保存在 Session 集合而已,还没有保存到数据库里边,哪来的更新操作呢?

这个还是应该根据实际的程序需求的分析出发的,而不是根据英文字儿更接近哪个东西来猜测的。

#13


为了撸主这40分,大牛们操透了心 System.Data.SqlClient.SqlException: 关键字 'where' 附近有语法错误
开玩笑:)

答案上面都差不多了

--插入
insert into table values(xxx,xxx,xx)
--从其他表取数据插入
insert into table(xxx,xxx,xxx,xxx)
select xxx,xxx,xxx,xxx from tableother where clause
--更新
update table set expression where clause

#14


该回复于2016-04-30 23:42:15被版主删除