我在ASP.NET网站上使用MYSQL。我的SQLS脚本在表的中央。对于更新,我使用以下SQL命令:

更新用户SET active = @ active,short = @ short,userimage = @ userimage,adminunit = @ adminunit,admincc = @ admincc WHERE(id = @ID);

在网站上,我获得了SQL,并用网站上的控件(文本框,复选框,下拉列表...)替换了参数。这对于所有控件都很有效,因为它们始终具有值。但是USERIMAGE是图像,我从文件上传控件中获取信息。只要选择一个文件,它就可以正常工作。

这段代码从控件中读取值并将它们保存在参数列表中:

                        Case "GET"
                            If TypeOf control Is TextBox Then myParameterList.Add(New cParameter("@" + sField, CType(control, TextBox).Text))
                            If TypeOf control Is CheckBox Then myParameterList.Add(New cParameter("@" + sField, CType(control, CheckBox).Checked))
                            If TypeOf control Is DropDownList Then myParameterList.Add(New cParameter("@" + sField, CType(control, DropDownList).SelectedValue))
                            If TypeOf control Is Image Then
                            End If
                            If TypeOf control Is FileUpload Then
                                If CType(control, FileUpload).HasFile Then
                                    Dim filename As String = Path.GetFileName(CType(control, FileUpload).PostedFile.FileName)
                                    Dim contentType As String = CType(control, FileUpload).PostedFile.ContentType
                                    Using fs As Stream = CType(control, FileUpload).PostedFile.InputStream
                                        Using br As New BinaryReader(fs)
                                            Dim bytes As Byte() = br.ReadBytes(fs.Length)
                                            myParameterList.Add(New cParameter("@" + sField.Replace("FileUploadControl".ToLower, ""), bytes))
                                        End Using
                                    End Using
                                End If
                            End If


这段代码构建了SQL:

                With cmd
                    .Connection = Connection
                    .CommandType = CommandType.Text
                    For Each sParameter As cParameter In myParameterList
                        .Parameters.AddWithValue(sParameter.Name, sParameter.Value)
                    Next
                    .CommandText = sSQL
                End With


因此,通常SQL如下所示:

UPDATE用户SET active = True,short = testname,userimage = System.Byte [],adminunit = True,admincc = False WHERE(id = 12);

但是,如果未选择任何图像,则SQL如下所示:

UPDATE用户SET active = True,short = testname,userimage = @ userimage,adminunit = True,admincc = False WHERE(id = 12);

在这种情况下,旧映像将丢失并且databasefield userimage为null。任何想法如何优雅地忽略/删除不使用的参数?

谢谢!

最佳答案

固定:将SQL更改为:userimage = IF(@userimage IS NULL,userimage,@userimage)–

09-10 18:04