gpt4 book ai didi

c# - 如果在 ASP.NET 中不存在,sql server 的用法?

转载 作者:太空宇宙 更新时间:2023-11-03 18:51:40 25 4
gpt4 key购买 nike

我的 sql 查询有问题吗?我有一个错误:

Incorrect syntax near the keyword 'join'.

  protected void Button1_Click1(object sender, EventArgs e)
{
foreach (GridViewRow row in GridView1.Rows)
{
if ((row.FindControl("CheckBox1") as CheckBox).Checked)
{
//string prNB = Session["prnb"].ToString();
SqlCommand cmd = new SqlCommand("insert into PrescTest(Test, idPresc)select @Test, idPresc from Prescription where prNB = @prNB and not exists(select test from PrescTest pt,join Prescription p on pt.idPresc = p.idPresc where prNB = @prNB)", conn);
cmd.Parameters.Add("Test", SqlDbType.NVarChar, 50).Value = row.Cells[2].Text;
cmd.Parameters.Add("prNB", SqlDbType.NVarChar, 50).Value = Session["prnb"].ToString();
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
Response.Redirect("PrescForm.aspx");
}

SQL 表图:

enter image description here

最佳答案

你的sql语句有几处错误。

  • 使用字符串连接代替参数。
  • 隐式(旧式)连接的使用。显式连接作为 Ansi-Sql 的一部分已有 25 年多了(我相信接近 30 年),因此确实没有理由编写隐式连接。
  • 在 values 子句中使用子查询 - 而不是简单地 insert...select
  • 您对网格中的每一行都运行此查询,而不是将网格中的数据收集到集合中并运行单个 insert...select 语句
  • beginend 关键字定义一个代码块,很像 c# 中的 {} - begin 关键字后的左括号是多余的(我认为也是语法错误)。 end 关键字
  • 后的右括号也是如此

SQL 语句的快速修复是这样的:

insert into PrescTest (Test,idPresc) 
select @Test, idPresc
from Prescription
where prNB = @prNB
and not exists(
select test
from PrescTest pt
join Prescription p
on pt.idPresc = p.idPresc
where prNB = @prNB
)

请注意,not exists 已移至 where 子句中,因此实际上不需要 if

请注意,这并没有解决您正在为每一行单独运行此 sql 的事实 - 您应该查找表值参数来解决该问题。

关于c# - 如果在 ASP.NET 中不存在,sql server 的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56790859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com