【发布时间】:2017-06-01 19:47:28
【问题描述】:
我正在尝试插入/更新多记录并在表中更改后返回记录,我正在使用以下代码,
Using cmd As New SqlCommand("TblRegJoinDynHdlr", con)
cmd.CommandType = CommandType.StoredProcedure
Dim Data = PtRegData(0).PartnerData
For i As Integer = 0 To Data.Count - 1
cmd.Parameters.Clear()
If (String.IsNullOrEmpty(Data(i).RecID)) Then
cmd.Parameters.Add("@RecID", SqlDbType.Int).Value = DBNull.Value
Else
cmd.Parameters.Add("@RecID", SqlDbType.Int).Value = Convert.ToInt32(Data(i).RecID)
End If
If (String.IsNullOrEmpty(Data(i).PtFilenum)) Then
cmd.Parameters.Add("@ptfilenum", SqlDbType.Int).Value = DBNull.Value
Else
cmd.Parameters.Add("@ptfilenum", SqlDbType.Int).Value = Convert.ToInt32(Data(i).PtFilenum)
End If
If (String.IsNullOrEmpty(Data(i).PrtFilenum)) Then
cmd.Parameters.Add("@prfilenum", SqlDbType.Int).Value = DBNull.Value
Else
cmd.Parameters.Add("@prfilenum", SqlDbType.Int).Value = Convert.ToInt32(Data(i).PrtFilenum)
End If
cmd.Parameters.Add("@PrtStatus", SqlDbType.Int).Value = (Data(i).PrtStatus)
con.Open()
Using sdr As SqlDataReader = cmd.ExecuteReader()
While sdr.Read()
Prtdata.Add(New PartnerData() With { _
.RecID = sdr("RecID").ToString(), _
.PrtFilenum = sdr("PrtFilenum").ToString(), _
.PtFilenum = sdr("PtFilenum").ToString(), _
.FullName = sdr("FullName").ToString(), _
.PrtStatus = sdr("PrtStatus").ToString(), _
.DOB = sdr("DOB").ToString() _
})
End While
End Using
con.Close()
Next
con.Dispose()
End Using
我的问题 如果我将 SqlDataReader 留在循环内,所有记录都会正确更新,但我会以 n x 2 的形式获取数据,如果我将其留在循环外,我会得到我的数据,但记录未正确更新/插入 请问有什么帮助吗?
【问题讨论】:
-
这有点令人困惑,但我认为在您的循环中,您正在将插入的返回添加到循环中使用的同一集合中,从而复制您的数据。 ExecuteReader 是必要的吗?你不能使用 ExecuteNonQuery 吗?至少,您不应该将结果添加到循环使用的同一集合中。
-
@DennesTorres,是的,我需要阅读器,我之前正在执行 ExecuteNonQuery,但后来我需要填充一个列表,所以我使用了阅读器
-
我不能使用循环来构建列表,我需要在数据插入时从服务器读取一些数据,,是否可以使用此示例解决它,因为我添加了一个新过程只是为了从循环函数中读取数据
-
您的代码有问题。如果您需要填充一个列表,它可以是一个不同的列表吗?似乎您正在将新项目添加到您在循环中使用的同一列表中,尽管我对此不确定
-
所以 Prtdata.Add(New PartnerData() ,,,, 中的“新”不会清理列表并从头开始添加?
标签: asp.net sql-server vb.net sqldatareader