我一直在努力研究一段時間。我正在嘗試將圖像添加到SQL數據庫。我知道這不是最好的方式,但我的老闆真的很想這樣。我將添加圖像的表格和圖像列圖片。將圖像添加到ASP.NET中的SQL數據庫時出現的問題
這是我使用將其添加到存儲過程:
ALTER PROCEDURE pr_INSRT_Img (@Img image, @name varchar(50))
AS
BEGIN
UPDATE usr
SET Img= @Img
WHERE disp_nm = @name
END
我的應用程序在ASP.NET 4.0製作。它的工作原理是用戶選擇帶有AJAX AsyncFileUpload的圖像並在該控件的UploadComplete功能上選擇,並調用StoredProcedure來執行INSERT
。 ASynchFileUPload位於gridview中的UpdatePanel中的一個手風琴中。
UploadComplete:
protected void OnUpdateComplete(object sender, EventArgs e)
{
Image ImgUser = new Image();
AsyncFileUpload asyncSender = new AsyncFileUpload();
UpdatePanel pnlinfo = new UpdatePanel();
AsyncFileUpload asyncGv = new AsyncFileUpload();
Accordion accordion = new Accordion();
Label lblName = new Label();
//finding the row of the sender
asyncSender = (AsyncFileUpload)sender;
foreach (GridViewRow Row in gvData.Rows)
{
accordion = (Accordion)Row.Cells[0].FindControl("Accordion");
asyncGv = (AsyncFileUpload)accordion.FindControl("AsyncFileUpload");
if (asyncSender.ClientID == asyncGv.ClientID)
{
ImgUser = (Image)accordion.FindControl("imgUser");
ImgUser.ImageUrl = asyncGv.FileName;
lblName = (Label)Row.Cells[0].FindControl("lblPnlName");
bool IsWorking = InsertImage(asyncGv.FileBytes, lblName.Text);
pnlinfo = (UpdatePanel)Row.Cells[0].FindControl("pnlInfo");
pnlinfo.Update();
break;
}
}
InsertImage:
//pr_INSRT_Img
SqlCommand cmd = new SqlCommand(ConfigManager.InsertImage);
cmd.CommandType = CommandType.StoredProcedure;
//set the parameters
cmd.Parameters.Add("@Img", SqlDbType.Image).Value = ImgData;
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = Name;
int ifWorks = DBUtils.ExecuteCmdScalar(cmd, ConfigManager.PhonebookSQLConnectionString);
if (ifWorks != 0)
return true;
else
return false;
代碼ASPX部分,其中ASychFileUpload是:
<div runat="server" class="divRow" style="text-align:center; width:300px; float:left;">
<asp:Accordion ID="Accordion" runat="server" FadeTransitions="true" FramesPerSecond="40" TransitionDuration="250"
AutoSize="None" SelectedIndex="-1" RequireOpenedPane="false" SuppressHeaderPostbacks="true" Height="50px" Width="360px">
<Panes>
<asp:AccordionPane ID="AccordionPane" runat="server">
<Header>
<asp:Image ID="imgUser" runat="server" ImageAlign="Middle" ImageUrl="~/silhouette.jpg"
Width="100px" Height="100px" EnableViewState="true"/>
</Header>
<Content>
<asp:AsyncFileUpload ID="AsyncFileUpload" runat="server" OnUploadedComplete="OnUpdateComplete" />
</Content>
</asp:AccordionPane>
</Panes>
</asp:Accordion>
<asp:Button ID="btnUpdate" runat="server" OnClick="btnUpdate_Click" Visible="false" />
</div><br /><br />
我的問題是,當我上傳圖像時,ExecuteScalar()返回0,這意味着圖像沒有插入到表中。我試過把varbinary(max) Field而不是Image類型,但它不起作用。我在網上可以找到的所有內容都告訴我使用該代碼或該代碼的變體(其他方法來獲取字節數組,我只是採用最簡單的方法)。
總的來說,爲什麼UPDATE
失敗,我該如何讓它工作。
感謝
你在哪裏設置「ImgData」? – Oded 2011-04-15 18:58:17
你有錯誤嗎?如果不存在usr.Image中的數據還是爲空? – 2011-04-15 19:02:25