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

标签 c# asp.net sql-server

我的 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/

相关文章:

c# - 如何通过 System.Diagnostics.Process() 将参数传递给已经打开的终端

c# - 使用 ODBC 连接在代码隐藏中加载 Crystal Report

c# - 在 windows 中使用 java + php

.net - 共享SqlConnection

java - 在java中更新SQL镜像

c# - 如何使用 C# 验证 SSL 证书

c# - 调用了单元测试 ThrowIfCancellationRequested()

c# - 在 C# 中,将成员变量复制到本地堆栈变量是否会提高性能?

c# - 如何与用户控件关联的只读文本框?

sql - 表类型存储在 sql server 中的什么位置?我们如何改变它?