在vb.net应用程序中的中,我将一些列的数据更新到sql,下面是代码
dim cnn = New SqlConnection(connetionString)
Dim q As New SqlCommand("UPDATE products SET rank=@rank,rankchange=@rankchange,PD=@PD,PDP=@PDP,TPD=@TPD where catalogid=@catalogid",cnn)
cnn.Open()
For i = 0 To mainDatatable.Rows.Count - 1
q.Parameters.Add(New SqlParameter("@rank", mainDatatable.Rows(i)("rank")))
q.Parameters.Add(New SqlParameter("@rankchange", mainDatatable.Rows(i)("rankchange")))
q.Parameters.Add(New SqlParameter("@PD", mainDatatable.Rows(i)("PD")))
q.Parameters.Add(New SqlParameter("@PDP", mainDatatable.Rows(i)("PDP")))
q.Parameters.Add(New SqlParameter("@TPD", mainDatatable.Rows(i)("TPD")))
q.ExecuteNonQuery()
q.Parameters.Clear()
Next我有两个问题
如果IsDBNull(mainDatatable.Rows(I)(“秩”))那么q.Parameters.Add(新SqlParameter(“@q.Parameters.Add”,"NULL"))或q.Parameters.Add(“@秩”,mainDatatable.Rows(I)(“秩”))结束
发布于 2013-01-21 13:33:02
为了回答(1)速度问题.
如果确实有60K+更改要处理,则不需要执行60K update语句。我会将60K记录上传到临时表中,并调用一个存储过程在真实表和临时表之间执行UPDATE FROM...INNER JOIN语句。如果您不想重写您拥有的内容,另一个可能的想法是过滤掉datatable中没有被污染的任何行。如果没有变化,那么就没有理由发送那些更新语句.
关于(2)这里是语法..。
对于将空值作为SqlParameters发送,这应该适用于您。
If mainDatatable.Rows(i)("rank") = DBNull.Value Then
q.Parameters.Add(New SqlParameter("@rankchange", SqlDbType.Int, 4) With { .Value = DBNull.Value })
Else
q.Parameters.Add(New SqlParameter("@rankchange", SqlDbType.Int, 4) With { .Value = mainDatatable.Rows(i)("rank") })
End If发布于 2013-01-21 13:32:33
编写下面的代码行q.Parameters.Add(New SqlParameter("@rank", "NULL"))不会使空项变为空项,相反,它会将Null视为字符串。
你可以试试这个。
q.Parameters.Add(new SqlParameter() {
ParameterName="@test",
IsNullable=true,
Value=DBNull.Value
});https://stackoverflow.com/questions/14439584
复制相似问题