【发布时间】:2015-04-29 16:21:48
【问题描述】:
我正在使用一种将数据库内容显示为 Json 数组的方法。有时它有效但它给了我很多次这个错误:
超时。在获得一个之前的超时时间 来自池的连接。这可能是因为所有汇集的 正在使用连接并且已达到最大池大小
顺便说一句,其他方法可以完美运行,但这个方法是这样的
这是 WebMethod 代码:
<WebMethod>
Public Sub AfterOrdersInsert(JSONString As [String])
Try
Dim context As HttpContext = Me.Context
Dim strJson As String = ""
Dim OrderItems As JArray = JArray.Parse(JSONString)
'Dim IncrementalConnection As New SqlConnection()
Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("MyCString").ConnectionString)
For Each OrderItem As JObject In OrderItems
conn.Open()
Dim SelectQuery As String = "SELECT * FROM Orders WHERE OrderId = @a AND Name = @b"
Dim SelectCommand As New SqlCommand(SelectQuery, conn)
SelectCommand.Parameters.AddWithValue("@a", OrderItem.Item("OrderId").ToString())
SelectCommand.Parameters.AddWithValue("@b", OrderItem.Item("Name").ToString())
Dim reader = SelectCommand.ExecuteReader()
Dim isExist = reader.HasRows
Dim OrderQuantity As Integer = 0
If isExist Then
reader.Read()
OrderQuantity = Convert.ToInt32(reader.GetString(reader.GetOrdinal("ProductQuantity"))) + Convert.ToInt32(OrderItem.Item("ProductQuantity").ToString())
End If
conn.Close()
'Using reader = SelectCommand.ExecuteReader()
If isExist Then
'If reader.Read() Then
conn.Open()
Dim Price = OrderQuantity * Convert.ToDouble(OrderItem.Item("Price").ToString())
Dim UpdateQuery As String = "UPDATE Orders SET ProductQuantity = @c, Price = @d WHERE OrderId = @e AND Name = @f"
Dim UpdateCommand As New SqlCommand(UpdateQuery, conn)
UpdateCommand.Parameters.AddWithValue("@c", OrderQuantity.ToString())
UpdateCommand.Parameters.AddWithValue("@d", Price.ToString())
UpdateCommand.Parameters.AddWithValue("@e", OrderItem.Item("OrderId").ToString())
UpdateCommand.Parameters.AddWithValue("@f", OrderItem.Item("Name").ToString())
UpdateCommand.ExecuteNonQuery()
conn.Close()
Else
Dim strSQL As String = "insert into Orders(ProductNumber,Name,Category,Price,OrderId,TableNumber,WaiterName,CashierName,DateAndTime,isActive,isCoocked,isPaid,isYesCanceled,ProductQuantity) values(@x,@y,@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l)"
conn.Open()
Dim cmd As New SqlCommand(strSQL, conn)
cmd.Parameters.AddWithValue("@x", OrderItem.Item("ProductNumber").ToString())
cmd.Parameters.AddWithValue("@y", OrderItem.Item("Name").ToString())
cmd.Parameters.AddWithValue("@a", OrderItem.Item("Category").ToString())
cmd.Parameters.AddWithValue("@b", Convert.ToDouble(OrderItem.Item("Price").ToString()) * Convert.ToInt32(OrderItem.Item("ProductQuantity").ToString()))
cmd.Parameters.AddWithValue("@c", OrderItem.Item("OrderId").ToString())
cmd.Parameters.AddWithValue("@d", OrderItem.Item("TableNumber").ToString())
cmd.Parameters.AddWithValue("@e", OrderItem.Item("WaiterName").ToString())
cmd.Parameters.AddWithValue("@f", OrderItem.Item("CashierName").ToString())
cmd.Parameters.AddWithValue("@g", OrderItem.Item("DateAndTime").ToString())
cmd.Parameters.AddWithValue("@h", OrderItem.Item("isActive").ToString())
cmd.Parameters.AddWithValue("@i", OrderItem.Item("isCoocked").ToString())
cmd.Parameters.AddWithValue("@j", OrderItem.Item("isPaid").ToString())
cmd.Parameters.AddWithValue("@k", OrderItem.Item("isYesCanceled").ToString())
cmd.Parameters.AddWithValue("@l", OrderItem.Item("ProductQuantity").ToString())
cmd.ExecuteNonQuery()
conn.Close()
End If
'End Using
Next
'ProductNumber As [String], Name As [String], Category As [String], Price As [String], OrderId As [String]'
'this is the bridge to database\
strJson = "{" + "" + "contact" + "" + ":" + "[" + "{" + "result" + "" + ":" + serializer.Serialize("1") + "}" + "]" + "}"
context.Response.Write(strJson)
Catch ex As Exception
Dim strJson As String
strJson = "{" + "" + "contact" + "" + ":" + "[" + "{" + "result" + "" + ":" + serializer.Serialize("0") + ex.Message + "}" + "]" + "}"
Context.Response.Write(strJson)
End Try
End Sub
【问题讨论】:
-
欢迎来到 Stack Overflow! ASMX 是一项遗留技术,不应用于新开发。 WCF 或 ASP.NET Web API 应用于 Web 服务客户端和服务器的所有新开发。一个提示:微软已经在 MSDN 上停用了ASMX Forum。
标签: json database vb.net web-services asmx