我有一个允许用户在数据库中插入“项目”的表单。一个字段询问他们想要插入多少项。相同的数据(除了它们的ID)在数据库中插入它们选择的次数。我发现了插入多个项目的不同方法,但是在动态完成时却没有。我正在使用.net 3.5和SQLServer 2005.我是否必须使用For ... Next语句或者还有其他方法吗?感谢
更新:我的简化插入代码如下:
Dim sqlCmd1 As String
sqlCmd1 = "INSERT INTO Table_Items (ItemType, ItemDescription, ContactName, ContactEmail) VALUES (@ItemType, @ItemDescription, @ContactName, @ContactEmail);"
'Dim ID As Integer
Dim connectionString As String = ConfigurationManager.ConnectionStrings("ConnectionString").ToString()
Dim conn As SqlConnection = New SqlConnection(connectionString)
Dim Cmd1 As SqlCommand = New SqlCommand(sqlCmd1, conn)
With Cmd1.Parameters
.Add(New SqlParameter("@ItemType", Textbox1.Text))
.Add(New SqlParameter("@ItemDescription", Textbox2.Text))
.Add(New SqlParameter("@ContactName", Textbox3.Text))
.Add(New SqlParameter("@ContactEmail", Textbox4.Text))
End With
Try
conn.Open()
ID = Cmd1.ExecuteScalar()
Server.Transfer("confirmation.aspx")
conn.Close()
Catch ex As SqlException
lblError.Text = ex.Message()
End Try
答案 0 :(得分:1)
由于这是相同的数据,并且考虑到最坏的情况,用户选择插入的数量(多少项)将相当多,为了避免不必要的有效负载到数据库,我会写一个存储过程,只是通过总和和项目数据。如果属性更多,则使用XML作为项目数据。
答案 1 :(得分:1)
使用您的样式的最简单方法是在循环中添加对Cmd1.ExecuteScalar()的调用
For i As Integer = 1 To Counter Cmd1.ExecuteScalar() Next
但请注意,对于一般用法,这肯定是不正确的方法。虽然你保持小,但没有那么多开销,否则最好去@anivas方式。
同时检查ASP.NET Data Access Tutorials我会建议切换到 LINQToSql (如果可能)。它会为你节省很多时间。查看Using LINQ to SQL Series,LINQ via C#和Using LINQ to SQL in Visual Basic