2013-04-20 70 views
0

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

我遇到的问题是编写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年

任何帮助表示赞赏

+0

错误的文字是什么? – RichardTheKiwi 2013-04-20 11:34:42

+0

没有错误,只有第一组值被插入 – user2301960 2013-04-20 11:39:23

+0

在ExecuteNonQuery之前执行sqlstring的DEBUG.PRINT并尝试在SSMS中运行它。我认为它会显示语句2以后的错误。 – RichardTheKiwi 2013-04-20 11:58:02

回答

0

我可能是错的,但在第二个语句中的条款VALUES出现二两倍。 这可能是你的问题的来源。

+0

我已经尝试过没有第二个值,只是括号内的逗号,但没有运气 – user2301960 2013-04-20 11:29:46

+0

您是否尝试过终止您的TSQL语句; (分号)? 你也有权访问SQL Profiler,看看发生了什么? – 2013-04-20 11:32:45

+0

不会无法访问SQL Profiler不幸的是 – user2301960 2013-04-20 11:40:33

0

从SQL Server 2008起,您可以使用多值插入条款,看起来像这样

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

您已经构建了您这样的查询

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

我也将亲自已经构建字符串级联不是使用SELECT-CASE块:

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 

注意在该批次中的分号语句结束。

+0

我只是尝试了值(.....),(....)等,它似乎没有工作,我仍然只是得到第一个值。我虽然喜欢你,但我会用它! – user2301960 2013-04-20 11:37:51

+0

嗨理查德,我试图做INSERT ... VALUES(....); INSERT .... VALUES(...);仍然没有运气,只是第一套插入 – user2301960 2013-04-20 11:51:56

0

如上但是你要由第六届情况下一个可怕的长字符串,最终可能要重新设计它来检查> =每个值,如果前面的字符串是不可变

0

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

感谢您的所有帮助