I have a RadBinaryImage control which is displaying an image loaded using RadAsyncUpload.
I have an SQL table containing a 'Photo' column (image data type). How to pass the RadBinaryImage to the insert function which look like this:
I have an SQL table containing a 'Photo' column (image data type). How to pass the RadBinaryImage to the insert function which look like this:
Private Sub InsertPhotoIntoDB() Dim sMyConn As String = My.Settings.appDBConnString Dim myConnection As SqlConnection Dim myCommand As New SqlCommand myConnection = New SqlConnection(sMyConn) myConnection.Open() myCommand = New SqlCommand("INSERT INTO Photos(Photo) VALUES(@Photo)") myCommand.Connection = myConnection myCommand.Parameters.Add("@Photo", SqlDbType.Image, 0, "Photo") myCommand.Parameters("@Photo").Value = WhatDoIPutHere??? myCommand.ExecuteNonQuery() myConnection.Close() myConnection.Dispose()End Sub8 Answers, 1 is accepted
0
Princy
Top achievements
Rank 2
answered on 04 Dec 2012, 07:17 AM
Hello,
Please take a look into the following code that I tried to save the RadBinaryImage into the database.
ASPX:
VB:
Hope this helps.
Regards,
Princy.
Please take a look into the following code that I tried to save the RadBinaryImage into the database.
ASPX:
<telerik:RadAsyncUpload ID="RadAsyncUpload1" runat="server" OnFileUploaded="RadAsyncUpload1_FileUploaded"></telerik:RadAsyncUpload><telerik:RadBinaryImage ID="RadBinaryImage1" runat="server" /><asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="button" />VB:
Protected Sub Button1_Click(sender As Object, e As EventArgs) Dim sMyConn As String = My.Settings.appDBConnString Dim myConnection As SqlConnection Dim myCommand As New SqlCommand myConnection = New SqlConnection(sMyConn) myConnection.Open() myCommand = New SqlCommand("INSERT INTO Photos(Photo) VALUES(@Photo)") myCommand.Connection = myConnection myCommand.Parameters.Add("@Photo", SqlDbType.Image).Value = RadBinaryImage1.DataValue myCommand.ExecuteNonQuery() myConnection.Close() myConnection.Dispose()End SubProtected Sub RadAsyncUpload1_FileUploaded(sender As Object, e As FileUploadedEventArgs) Dim image As Byte() Dim fileLength As Long = RadAsyncUpload1.UploadedFiles(0).InputStream.Length image = New Byte(fileLength - 1) {} RadAsyncUpload1.UploadedFiles(0).InputStream.Read(image, 0, image.Length) RadBinaryImage1.DataValue = imageEnd SubHope this helps.
Regards,
Princy.
0
Emil
Top achievements
Rank 2
answered on 04 Dec 2012, 10:24 AM
Thank you for the reply!
But, I get an error:
The parameterized query '(@Photo image)INSERT INTO Photos (Photo) VALUES (@Photo)' expects parameter '@Photo', which was not supplied.
Do I need to convert RadBinaryImage1.DataValue to image?
But, I get an error:
The parameterized query '(@Photo image)INSERT INTO Photos (Photo) VALUES (@Photo)' expects parameter '@Photo', which was not supplied.
0
Princy
Top achievements
Rank 2
answered on 05 Dec 2012, 05:10 AM
Hi Emil,
I could replicate the issue when the DataValue of the RadBinaryImage is not set. Please make sure that you are setting the DataValue of the RadBinaryImage when the RadAsyncUpload file is uploaded.
VB:
Hope this helps.
Regards,
Princy.
I could replicate the issue when the DataValue of the RadBinaryImage is not set. Please make sure that you are setting the DataValue of the RadBinaryImage when the RadAsyncUpload file is uploaded.
VB:
Protected Sub RadAsyncUpload1_FileUploaded(sender As Object, e As FileUploadedEventArgs) Dim image As Byte() Dim fileLength As Long = RadAsyncUpload1.UploadedFiles(0).InputStream.Length image = New Byte(fileLength - 1) {} RadAsyncUpload1.UploadedFiles(0).InputStream.Read(image, 0, image.Length) RadBinaryImage1.DataValue = imageEnd SubHope this helps.
Regards,
Princy.
0
Emil
Top achievements
Rank 2
answered on 05 Dec 2012, 10:38 AM
Hello Princy,
Still doesn't work!
To select the image and display it in a RadBinaryImage, I'm using a modified version of this code:
http://demos.telerik.com/aspnet-ajax/asyncupload/examples/ajaxprocessing/defaultcs.aspx
The code below is in a RadWindow, in RadTabStrip/RadMultiPage tab, if it make any difference.
Here is the code I'm using:
The JavaScript:
To upload and display, I'm using the exact sub, you provided:
Could it be that the
Still doesn't work!
To select the image and display it in a RadBinaryImage, I'm using a modified version of this code:
http://demos.telerik.com/aspnet-ajax/asyncupload/examples/ajaxprocessing/defaultcs.aspx
The code below is in a RadWindow, in RadTabStrip/RadMultiPage tab, if it make any difference.
Here is the code I'm using:
<div class="binary-image"> <telerik:RadBinaryImage runat="server" Width="640px" Height="400px" ResizeMode="Fit" ID="RadBinaryImage1" ImageUrl="~/Images/Other/blank_picture.jpg" AlternateText="the photo" CssClass="binary-image" ImageAlign="Middle" /> </div> <span class="invalid"></span> <div class="upload"> <telerik:RadAsyncUpload runat="server" ID="RadAsyncUpload1" MaxFileInputsCount="1" OnClientFileUploaded="fileUploaded" OnFileUploaded="RadAsyncUpload1_FileUploaded" AllowedFileExtensions="jpeg,jpg,gif,png,bmp" OnClientValidationFailed="validationFailed"> <Localization Select="Choose photo..." /> </telerik:RadAsyncUpload></div>The JavaScript:
<script type="text/javascript"> function fileUploaded(sender, args) { $find('RadAjaxManager1').ajaxRequest(); $telerik.$(".invalid").html(""); setTimeout(function () { sender.deleteFileInputAt(0); }, 10); } function validationFailed(sender, args) { $telerik.$(".invalid") .html("Invalid extension, please choose an image file!"); sender.deleteFileInputAt(0); $find('RadAjaxManager1').ajaxRequest('a'); }</script>To upload and display, I'm using the exact sub, you provided:
Protected Sub RadAsyncUpload1_FileUploaded(sender As Object, e As FileUploadedEventArgs) Dim image As Byte() Dim fileLength As Long = RadAsyncUpload1.UploadedFiles(0).InputStream.Length image = New Byte(fileLength - 1) {} RadAsyncUpload1.UploadedFiles(0).InputStream.Read(image, 0, image.Length) RadBinaryImage1.DataValue = imageEnd SubCould it be that the
RadBinaryImage1 data is not persisted? If so, how can I persist it in a temporary file?0
Princy
Top achievements
Rank 2
answered on 06 Dec 2012, 05:57 AM
Hi,
One suggestion is that you can save the image to the database on the AjaxRequest of RadAjaxManager. Following is the sample code that worked as expected at my end.
ASPX:
VB:
JS:
Hope this helps.
Regards,
Princy.
One suggestion is that you can save the image to the database on the AjaxRequest of RadAjaxManager. Following is the sample code that worked as expected at my end.
ASPX:
<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server" OnAjaxRequest="RadAjaxManager1_AjaxRequest"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="RadAjaxManager1"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="RadBinaryImage1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings></telerik:RadAjaxManager><telerik:RadAsyncUpload runat="server" ID="RadAsyncUpload1" MaxFileInputsCount="1" OnClientFileUploaded="fileUploaded" OnFileUploaded="RadAsyncUpload1_FileUploaded" AllowedFileExtensions="jpeg,jpg,gif,png,bmp" OnClientValidationFailed="validationFailed"> <Localization Select="Choose photo..." /></telerik:RadAsyncUpload><telerik:RadBinaryImage runat="server" Width="640px" Height="400px" ResizeMode="Fit" ImageUrl="~/Images/Other/blank_picture.jpg" ID="RadBinaryImage1" AlternateText="the photo" ImageAlign="Middle" />VB:
Protected Sub RadAsyncUpload1_FileUploaded(sender As Object, e As FileUploadedEventArgs) Dim image As Byte() Dim fileLength As Long = RadAsyncUpload1.UploadedFiles(0).InputStream.Length image = New Byte(fileLength - 1) {} RadAsyncUpload1.UploadedFiles(0).InputStream.Read(image, 0, image.Length) RadBinaryImage1.DataValue = imageEnd SubProtected Sub RadAjaxManager1_AjaxRequest(sender As Object, e As AjaxRequestEventArgs) Dim sMyConn As String = My.Settings.appDBConnString Dim myConnection As SqlConnection Dim myCommand As New SqlCommand myConnection = New SqlConnection(sMyConn) myConnection.Open() myCommand = New SqlCommand("INSERT INTO Photos(Photo) VALUES(@Photo)") myCommand.Connection = myConnection myCommand.Parameters.Add("@Photo", SqlDbType.Image).Value = RadBinaryImage1.DataValue myCommand.ExecuteNonQuery() myConnection.Close() myConnection.Dispose()End SubJS:
<script type="text/javascript"> function fileUploaded(sender, args) { $find('RadAjaxManager1').ajaxRequest(); $telerik.$(".invalid").html(""); setTimeout(function () { sender.deleteFileInputAt(0); }, 10); } function validationFailed(sender, args) { $telerik.$(".invalid") .html("Invalid extension, please choose an image file!"); sender.deleteFileInputAt(0); $find('RadAjaxManager1').ajaxRequest('a'); }</script>Hope this helps.
Regards,
Princy.
0
Emil
Top achievements
Rank 2
answered on 06 Dec 2012, 11:58 AM
Thank you, Princy.
I don't need to save (insert) my photo right away. I choose to save it in a temp folder, then (if needed) read it in a byte array and insert it in the database.
I don't need to save (insert) my photo right away. I choose to save it in a temp folder, then (if needed) read it in a byte array and insert it in the database.
0
Princy
Top achievements
Rank 2
answered on 07 Dec 2012, 05:17 AM
Hi Emil,
The DataValue is a property which specifies the source field from which the data will be passed as a byte array. This value is used only when the control is bound. After that the value is deleted and there is no way how you can retrieve it. One workaround is that you can save the DataValue of the RadBinaryImage in a HiddenField and can load it into the database on click of a button. Following is the sample code that I tried.
ASPX:
VB:
Hope this helps.
Regards,
Princy.
The DataValue is a property which specifies the source field from which the data will be passed as a byte array. This value is used only when the control is bound. After that the value is deleted and there is no way how you can retrieve it. One workaround is that you can save the DataValue of the RadBinaryImage in a HiddenField and can load it into the database on click of a button. Following is the sample code that I tried.
ASPX:
<asp:HiddenField ID="HiddenField1" runat="server" /><asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />VB:
Protected Sub RadAsyncUpload1_FileUploaded(sender As Object, e As FileUploadedEventArgs) Dim image As Byte() Dim fileLength As Long = RadAsyncUpload1.UploadedFiles(0).InputStream.Length image = New Byte(fileLength - 1) {} RadAsyncUpload1.UploadedFiles(0).InputStream.Read(image, 0, image.Length) RadBinaryImage1.DataValue = image HiddenField1.Value = image.ToString()End SubProtected Sub Button1_Click(sender As Object, e As EventArgs) Dim sMyConn As String = My.Settings.appDBConnString Dim myConnection As SqlConnection Dim myCommand As New SqlCommand myConnection = New SqlConnection(sMyConn) myConnection.Open() myCommand = New SqlCommand("INSERT INTO Photos(Photo) VALUES(@Photo)") myCommand.Connection = myConnection Dim array As Byte() = Encoding.ASCII.GetBytes(HiddenField1.Value) myCommand.Parameters.Add("@Photo", SqlDbType.Image).Value = array myCommand.ExecuteNonQuery() myConnection.Close() myConnection.Dispose()End SubHope this helps.
Regards,
Princy.
0
Emil
Top achievements
Rank 2
answered on 07 Dec 2012, 08:37 AM
Thank you, Princy.
I don't know why, but HiddenField1.Value doesn't keept its value when I try to convert/save it to the database.
I've tried to declare a Private page variable but with the same result. Is it from the postback?
I don't know why, but HiddenField1.Value doesn't keept its value when I try to convert/save it to the database.
I've tried to declare a Private page variable but with the same result. Is it from the postback?