我在一个ASP.NET网站上使用MYSQL。我的SQLS脚本是表格的核心。对于UPDATE,我使用以下SQL命令:
UPDATE用户SET active = @ active,short = @ short,userimage = @ userimage,adminunit = @ adminunit,admincc = @ admincc WHERE(id = @ID);
在网站上,我获取SQL并将参数替换为网站上的控件(文本框,复选框,下拉列表...)。这对所有控件都很有效,因为它们总是有值。但USERIMAGE是一个图像,我从fileupload控件获取信息。只要我选择一个文件就可以了。
此代码从控件中读取值并将其保存在参数列表中:
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。任何想法如何 ELEGANT 忽略/删除未使用的参数?
谢谢你!答案 0 :(得分:0)
已修复:将SQL更改为:userimage = IF(@userimage IS NULL,userimage,@ userimage) -