【问题标题】:Asp.net Sql Insert rows using select caseAsp.net Sql 使用选择案例插入行
【发布时间】:2013-04-20 11:23:52
【问题描述】:

我正在设计一个允许用户使用信息更新数据库的网站。我遇到的问题是我创建了在页面加载时隐藏的各种控件,但用户可以单击取消隐藏以添加其他信息。

我遇到的问题是编写 sql 语句来处理识别使用的控件。我有一个视图状态计数,让我知道哪些面板可见或不可见。

ViewState("count") = CInt(ViewState("count")) + 1
    Label1.Text = ViewState("count").ToString()

然后我编写 SQL 查询的代码如下所示

    Protected Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Dim myConn As SqlConnection
    Dim cmd As SqlCommand
    Dim sqlstring As String
    Dim dd As String
    Dim mm As String
    Dim yy As String


    dd = Left(TextBox1.Text, 2)
    mm = Mid(TextBox1.Text, 4, 2)
    yy = Right(TextBox1.Text, 4)


    myConn = New SqlConnection("xxx")

    myConn.Open()

    Select Case Label1.Text
        Case Is = "0"
            sqlstring = "INSERT INTO Transactions (Date, Account, Payee, Chq_Num, Reference, GST_Rate, Amount, Document_Number, Bank_Account) VALUES ('" & yy & "-" & mm & "-" & dd & "','" & DropDownList3.SelectedValue & "','" & TextBox3.Text & "','" & TextBox5.Text & "','" & TextBox4.Text & "'," & DropDownList2.SelectedValue & "," & TextBox6.Text & "," & TextBox27.Text & ",'" & DropDownList1.SelectedValue & "')"
        Case Is = "1"
            sqlstring = "INSERT INTO Transactions (Date, Account, Payee, Chq_Num, Reference, GST_Rate, Amount, Document_Number, Bank_Account) VALUES ('" & yy & "-" & mm & "-" & dd & "','" & DropDownList3.SelectedValue & "','" & TextBox3.Text & "','" & TextBox5.Text & "','" & TextBox4.Text & "'," & DropDownList2.SelectedValue & "," & TextBox6.Text & "," & TextBox27.Text & ",'" & DropDownList1.SelectedValue & "') VALUES ('" & yy & "-" & mm & "-" & dd & "','" & DropDownList4.SelectedValue & "','" & TextBox7.Text & "','" & TextBox9.Text & "','" & TextBox8.Text & "'," & DropDownList5.SelectedValue & "," & TextBox10.Text & "," & TextBox27.Text & ",'" & DropDownList1.SelectedValue & "')"
    End Select


    cmd = New SqlCommand(sqlstring, myConn)
    cmd.ExecuteNonQuery()

    myConn.Close()

    Response.Redirect(Request.RawUrl, True)

End Sub

我的问题在于选择案例,因为当案例为 1 时,它只插入第一个值而不是第二个集合。我最多有 6 个“案例”可供选择,每次都添加一组额外的值。 sql server是2008

感谢任何帮助

【问题讨论】:

  • 错误内容是什么?
  • 没有错误,只有第一组值被插入
  • 在 ExecuteNonQuery 之前执行 sqlstring 的 DEBUG.PRINT 并尝试在 SSMS 中运行它。我认为它会显示语句 2 以后的错误。
  • 对,所以问题是当我单击我的发布按钮将事务插入我的 SQL 数据库时,标签文本仍然是 0,但在我的页面上清楚地显示 1 或 2 等任何想法为什么它没有拾取真正的价值?
  • 现在全部排序,我将 label.text 传递给一个隐藏的文本框,现在它可以工作了,感谢 Richard 的帮助

标签: asp.net sql sql-server-2008


【解决方案1】:

我可能错了,但在第二个语句中,子句VALUES 出现了两次两次。 这可能是您的问题的根源。

【讨论】:

  • 我试过没有第二个值,只有括号之间的逗号,但没有运气
  • 你试过用 ; 终止你的 TSQL 语句吗? (分号)?您还可以访问 SQL Profiler,看看发生了什么?
【解决方案2】:

如上所述,但是在第 6 种情况下,您最终会得到一个非常长的字符串,如果之前的字符串是不可变的,您可能需要重新设计它以检查 >= 每个值

【讨论】:

    【解决方案3】:

    从 SQL Server 2008 开始,您可以使用如下所示的多值插入子句

    INSERT [INTO] tbl [(...columns...)]
    VALUES (....),(....),(....);
    

    您已经像这样构建了查询

    INSERT [INTO] tbl [(...columns...)]
    VALUES (....)
    VALUES (....)
    VALUES (....)
    

    我个人也会使用 SELECT-CASE 块构造字符串连接 not:

    If Label1.Text >= "0" Then
            sqlstring = "('" & yy & "-" & mm & "-" & dd & "','" & DropDownList3.SelectedValue & "','" & TextBox3.Text & "','" & TextBox5.Text & "','" & TextBox4.Text & "'," & DropDownList2.SelectedValue & "," & TextBox6.Text & "," & TextBox27.Text & ",'" & DropDownList1.SelectedValue & "')"
    End If
    If Label1.Text >= "1" Then
            sqlstring = sqlstring + "," + "('" & yy & "-" & mm & "-" & dd & "','" & DropDownList4.SelectedValue & "','" & TextBox7.Text & "','" & TextBox9.Text & "','" & TextBox8.Text & "'," & DropDownList5.SelectedValue & "," & TextBox10.Text & "," & TextBox27.Text & ",'" & DropDownList1.SelectedValue & "')"
    End If
    ' etc
    

    如果由于某种神秘的原因,多值语句不起作用,您始终可以依赖久经考验的真实多语句批处理,即

    If Label1.Text >= "0" Then
        sqlstring = "INSERT ... VALUES (...);"
    End If
    If Label1.Text >= "1" Then
        sqlstring = sqlstring + "INSERT ... VALUES (...);"
    End If
    If Label1.Text >= "2" Then
        sqlstring = sqlstring + "INSERT ... VALUES (...);"
    End If
    ' etc
    

    注意批处理中的分号语句终止符。

    【讨论】:

    • 我刚刚尝试了值 (.....)、(....) 等,但它似乎不起作用,我仍然只是得到第一个值。不过,我确实喜欢你的 if 语句,我会使用它!
    • 嗨,理查德,我已经尝试过 INSERT... VALUES (....);插入....值(...);仍然没有运气,只是插入了第一组
    【解决方案4】:

    问题不在于选择案例,而是视图状态没有正确传递给 sql 字符串,我知道可能不是最好的解决方案,但将 label.text 传递给隐藏的文本框,sql 字符串能够正确读取该文本框。 Richard 建议使用串联的 IF 语句而不是 Select Case,这是一个好主意!

    感谢大家的帮助

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2012-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 1970-01-01
      相关资源
      最近更新 更多