2016-07-25 123 views
0

在我的for循环中,我写的插入和删除查询其执行以下插入:删除,如果存在记录,如果记录不存在

在这种情况下,如果该复选框不检查再检查,如果该记录存在&如果存在则删除。如果它不存在,那么不要做任何事情。

如果复选框被选中,那么还要检查记录是否存在&如果存在,则不做任何事情,但如果它不存在,则插入它。

我需要检查我的查询,尤其是我的子查询是否会正确执行,否则会返回一个错误,因为我现在正在编写它而不想更改我的数据库。

For Each oDataGridItem In valgrid2.Items 
     chk = oDataGridItem.FindControl("CheckBox1") 
     rn = oDataGridItem.FindControl("lblrptName") 
     rid = oDataGridItem.FindControl("lblReportID") 
     If chk.Checked = True Then 
      rpti = CType(oDataGridItem.FindControl("lblReportID"), Label).Text 

      'valsql2 = "INSERT INTO CompanyReportListTable(CompanyID, ReportID) Values (valCompanyId, rpti) WHERE NOT EXISTS(SELECT * FROM CompanyReportListTable WHERE ReportID <> rpti and companyid <> valCompanyId and " & chk.Checked & "= 1)" 
      'if it exists then don’t do anything 
      'valsql2 = valsq2 & ";IF ReportID = rpti and companyid = valCompanyId BEGIN WHERE CompanyID = CompanyID AND ReportID = ReportID END" 
      'To do nothing, i'd equal the parameter's value to the column name 

      count += 1 
      rptn = CType(oDataGridItem.FindControl("lblrptName"), Label).Text 
      oExArgs.Add(rptn) 
      Response.Write(rpti + " - " + rptn + "<br/>") 
     Else 
      'valsql2 = valsq2 & ";DELETE FROM CompanyReportListTable WHERE EXISTS(Select * FROM CompanyReportListTable WHERE ReportID = rpti and companyid = valCompanyId and" & chk.Checked & " = 0)" 
      'if it doesn't exist then don’t do anything 
      'valsql2 = valsq2 & ";IF ReportID <> rpti and companyid <> valCompanyId BEGIN WHERE CompanyID = CompanyID AND ReportID = ReportID END" 

     End If 
+0

你试过运行它们吗?怎么了?你有错误吗?它会改变正确的数据吗? –

+0

我从其中一个子查询中得到一个错误,但是我只运行了一次,因为在那个时候我不想改变我的数据库,直到我写了正确的语句。 –

+0

如果用户同时检查两个盒子会怎么样? – Plutonix

回答

1
valsql2 = "INSERT INTO CompanyReportListTable(CompanyID, ReportID) Values (valCompanyId, rpti) WHERE NOT EXISTS(SELECT * FROM CompanyReportListTable WHERE ReportID <> rpti and companyid <> valCompanyId and " & chk.Checked & "= 1)" 

在这段代码" & chk.Checked & "= 1)"会给错误。 True = 1不支持sql。

+0

谢谢Karthick。 chk位于前端,不在任何列或值内,因此不需要。 –

0

如果您不希望代码执行任何操作,那么CASE语句就不需要了,因为CASE可以使用SELECT语句。由于查询在If-Else语句下,因此valsql2 = whatever,而不是valsql2 = valsql2 &“;”因为这是一个条件语句,无论条件如何,查询都是如此。查询是相当好的,只是摆脱chk.Checked = 0和chk.Checked = 1

相关问题