I am working on a visual C# program for image processing.I am trying to add image to sql database using Visual C# (Windows forms) and ADO.NET.
I have converted the i
Execute this stored procedure:
create procedure prcInsert
(
@txtEmpNo varchar(6),
@photo image
)
as
begin
insert into Emp values(@txtEmpNo, @photo)
end
Table Emp:
create table Emp
(
[txtEmpNo] [varchar](6) NOT NULL,
imPhoto image
)
Try with something like this:
byte[] fileBytes=System.IO.File.ReadAllBytes("path to file");
System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand("insert into table(blob,filename) values (@blob,@name)");
command.Parameters.AddWithValue("blob", fileBytes);
command.Parameters.AddWithValue("name", "filename");
command.ExecuteNonQuery();
The selected file stream should be converted to byte array.
FileStream FS = new FileStream(filepath, FileMode.Open, FileAccess.Read); //create a file stream object associate to user selected file
byte[] img = new byte[FS.Length]; //create a byte array with size of user select file stream length
FS.Read(img, 0, Convert.ToInt32(FS.Length));//read user selected file stream in to byte array
Now this works fine. Database still shows < Binary data > but it could be converted back to image using memorystream method.
Thanks to all...
Assuming that you are using VARBINARY
to store your image (which you should be), you may need to make your SqlParameter more strongly typed:
So instead of
cmd.Parameters.Add(new SqlParameter("@Imgg", image));
You would use:
cmd.Parameters.Add("@Imgg", SqlDbType.VarBinary).Value = (SqlBinary)image;
You could also use System.IO.File.ReadAllBytes to shorten your code turning a file path into a byte array.