Проблемы с добавлением изображения в базу данных SQL в ASP.NET - PullRequest
1 голос
/ 15 апреля 2011

Я работал над этим некоторое время.Я пытаюсь добавить изображение в базу данных 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.Это работает так, что пользователь выбирает и Image с AJAX AsyncFileUpload, а в функции UploadComplete этого элемента управления он вызывает StoredProcedure для выполнения INSERT.ASynchFileUPload находится в аккордеоне, который находится в 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) вместо типа изображения, но это не сработало.Все, что я могу найти в Сети, говорит мне использовать этот код или вариант этого кода (другие способы получить байтовый массив, я просто выбрал самый простой).

В целом, почему UPDATE выходит из строя и как я могу заставить его работать.

Спасибо

1 Ответ

0 голосов
/ 16 апреля 2011

В этой статье показано все:

http://www.dotnetcurry.com/ShowArticle.aspx?ID=129

Надеюсь, когда вы заставите его работать и ваш начальник увидит, насколько он медленный, вам будет позволено сделать это правильнопуть и сохранить изображение на диске.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...