this is the C# code of the query (trying to make it so I can upload images to my DB table):
protected void ButtonInsert_Click(object sender, EventArgs e)
{
insert();
}
public void insert()
{
if (FileUpload1.PostedFile.FileName != "")
{
Byte[] image;
Stream s = FileUpload1.PostedFile.InputStream;
BinaryReader br = new BinaryReader(s);
image = br.ReadBytes((Int32)s.Length);
string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\kfirm\Desktop\KEY_web_v1\KEY_web_v1\App_Data\Database1.mdf;Integrated Security=True";
SqlConnection conn = new SqlConnection(connectionString);
//SqlConnection conn = new SqlConnection("data source=.\\sqlexpress; initial catalog=SlideShow; integrated security=true");//ORIGINAL - "data source=.\\sqlexpress; initial catalog=SlideShow; integrated security=true" //I think he's just making a dataset, I can edit later if it doesnt work or add this to the global.asax
SqlCommand comm = new SqlCommand();
comm.Connection = conn;
comm.CommandText = "INSERT into Portfolio values(@ImageData)"; //I changed stuff!
comm.Parameters.AddWithValue("@ImageData", image); //I changed stuff!
conn.Open();
int row = comm.ExecuteNonQuery();
conn.Close();
if (row > 0)
{
LabelError.Text = "success";
}
}
else LabelError.Text = "please upload an image";
}
this is the HTML code:
<form name="AddSiteToPortfolio" action="AddSiteToPortfolio.aspx" method="post" runat="server">
<table>
<tr>
<td>ImageData: </td>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="ButtonInsert" runat="server" Text="Upload Image"
onclick="ButtonInsert_Click" />
<asp:Label ID="LabelError" runat="server" Text=""></asp:Label>
</tr>
</table>
</form>
and this is my tables code:
CREATE TABLE [dbo].[Portfolio] (
[Image] NVARCHAR (50) NOT NULL,
[Description] NVARCHAR (50) NOT NULL,
[ImageData] VARBINARY (max) NULL,
[id] INT IDENTITY (1, 1) NOT NULL,
PRIMARY KEY CLUSTERED ([id] ASC)
);
when I try to update (uploading the image's binary code) the database, I get this error:
Column name or number of supplied values does not match table definition.
and the source error is the line in bold:
conn.Open();
**int n = comm.ExecuteNonQuery();**
conn.Close();
what's wrong?
If you indeed wish to INSERT
data then you need to pass real values to all columns that are mark NOT NULL
in the table definition--except autogenerated columns like "ID".
So your insert query should look in this:
comm.CommandText = "INSERT INTO Portfolio (Image, Description, ImageData) VALUES(@Image, @Description, @ImageData)";
And the parameters:
comm.Parameters.AddWithValue("@Image", “myImage”);
comm.Parameters.AddWithValue("@Description", “WhateverYouNeed”);
comm.Parameters.AddWithValue("@ImageData", image);
OR FOR UPDATE
If you want to update an existing value you will need an identifier to locate the row and field you wish to UPDATE
. In this case, you would need the "ID" of the image you wish to update.
comm.CommandText = “UPDATE [Portfolio] SET [ImageData] = @Image WHERE [ID] = @ID”;
And the parameters:
comm.Parameters.AddWithValue("@Image", “myImage”);
comm.Parameters.AddWithValue(“@ID”, 123); // or whatever the ID