我是编码的新手,对于任何滥用条款和我缺乏理解感到抱歉。
因此,更新查询中的ISNULL可能不是问题,正如我所说,我是新手。
基本上,我正在为作业创建一个简报网站。作者可以上传文章,但编辑者必须授权上传。这是我遇到麻烦的页面。除Image对象外,每个字段都更新。它保存了由作者上传的图像的路径。如果我要编辑任何字段,例如标题字段并更新数据库,则Image字段中的数据将被删除并替换为“NULL”。现在我显然不想要这个。如果在编辑页面中没有上传图像,我希望保留该值。如果我要选择一个新图像,它会完全更新,问题在于没有选择图像。我希望有人可以帮助我解决这个问题,因为它一直困扰着我,这可能是一件简单的事情,并希望得到任何帮助。
下面是我的UPDATE语句背后的代码,我相信这就是问题所在。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Web.Configuration;
public partial class admin_updatenews : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void displayedit_ItemUpdated(object sender, ListViewUpdatedEventArgs e)
{
info.Text = "Item Updated";
FileUpload fileupdate = displayedit.EditItem.FindControl("imageupdate") as FileUpload;
Label recordid = displayedit.EditItem.FindControl("idlabel1") as Label;
Int32 id = Convert.ToInt32(recordid.Text);
if (fileupdate.HasFile)
{
String fupload = fileupdate.FileName;
Random r = new Random();
int rInt = r.Next(0, 10000);
String imgpath = "../images/" + rInt + fupload;
fileupdate.SaveAs(Server.MapPath(imgpath));
String newimage = rInt + fupload;
string newsconnection = WebConfigurationManager.ConnectionStrings["newsconnection"].ConnectionString;
SqlConnection myConnection = new SqlConnection(newsconnection);
//myConnection.ConnectionString is now set to connectionString.
myConnection.Open();
String query = "UPDATE News SET postimage = ISNULL('" + newimage + "', postimage), Image = ISNULL('" + newimage + "', Image) WHERE id='" + id + "'";
SqlCommand myCommand = new SqlCommand(query, myConnection);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
}
protected void displayedit_ItemEditing(object sender, ListViewEditEventArgs e)
{
info.Text = "I am editing";
}
protected void displayedit_ItemCanceling(object sender, ListViewCancelEventArgs e)
{
info.Text = "Not Updating";
}
}
由于我不善于解释所有条款,因此我会提供我的流程图片,希望能让事情变得清晰。
Update Inserted Data (No image)
答案 0 :(得分:1)
ISNULL('" + newimage + "', NULL)
毫无意义 - 你总是看到一个字符串常量是NULL
,它永远不会是真的。
我怀疑你想要:
"UPDATE News SET postimage = " + newImage == null ? "null" : "'" + newimage + "'," ...
但是出于几个原因,您应该使用参数:
String query = "UPDATE News SET postimage = @postImage, Image = @Image WHERE id=@id";
SqlCommand myCommand = new SqlCommand(query, myConnection);
myCommand.Parameters.AddWithValue("@postImage",postImage ?? DBNull.Value);
myCommand.Parameters.AddWithValue("@Image",Image ?? DBNull.Value);
myCommand.Parameters.AddWithValue("@id",id);
myCommand.ExecuteNonQuery();
myConnection.Close();
请注意,如果postImage
或Image
为null
,则使用DBNull.Value
代替null
。
答案 1 :(得分:0)
在你的例子中," newimage"将始终具有指向该文件的字符串值。因此,无需检查null,ISNULL表达式将不执行任何操作。您的图像暗示其他代码更新数据包括" postimage"和"图像"。如果你在其他代码中有类似的ISNULL表达式,我的猜测是你需要以下内容来确保如果你的新的" newimage"值为null:
String query = "UPDATE News SET postimage = ISNULL('" + newimage + "', postimage), Image = ISNULL('" + newimage + "', Image) WHERE id='" + id + "'";
这样" ISNULL"表达式说:"如果新值为null,则设置为当前值"。