C# 如何将图像的BLOB保存到sql数据库中,而不首先将其保存到文件系统中?
我一直在试图找到的是如何将图像的BLOB存储到数据库中,而不首先将其保存到文件系统中,直接从服务器内存保存 我使用sql server和其他表单信息,我有两个需要存储在数据库中的图像。我还想知道如何读出它们并将它们转换回图像 在数据库中,我有“缩略图”,类型为“图像”。如果我没有错的话,这应该是正确的 对于图像上载,我使用以下asp控件:C# 如何将图像的BLOB保存到sql数据库中,而不首先将其保存到文件系统中?,c#,.net,sql-server,upload,blob,C#,.net,Sql Server,Upload,Blob,我一直在试图找到的是如何将图像的BLOB存储到数据库中,而不首先将其保存到文件系统中,直接从服务器内存保存 我使用sql server和其他表单信息,我有两个需要存储在数据库中的图像。我还想知道如何读出它们并将它们转换回图像 在数据库中,我有“缩略图”,类型为“图像”。如果我没有错的话,这应该是正确的 对于图像上载,我使用以下asp控件: <asp:FileUpload ID="_imageUpload" runat="server" /> 我从来没有做过这样的事情,因为我对数
<asp:FileUpload ID="_imageUpload" runat="server" />
我从来没有做过这样的事情,因为我对数据库尤其是网站的工作还很陌生
哦,如果这个问题已经被问到和回答了,那就很抱歉了
提前谢谢
[编辑]
我的全部代码:
protected void _uploadImageBtn_Click(object sender, EventArgs e)
{
string extension;
// checks if file exists
if (!_imageUpload.HasFile)
{
_resultLbl.Text = "Please, Select a File!";
return;
}
// checks file extension
extension = System.IO.Path.GetExtension(_imageUpload.FileName).ToLower();
if (!extension.Equals(".jpg") && !extension.Equals(".jpeg") && !extension.Equals(".png"))
{
_resultLbl.Text = "Only image files (.JPGs and .PNGs) are allowed.";
return;
}
// checks if image dimensions are valid
if (!ValidateFileDimensions(140, 152))
{
_resultLbl.Text = "Maximum allowed dimensions are: width 1520px and height <= 140px.";
return;
}
int fileLen;
string displayString = "";
// Get the length of the file.
fileLen = _imageUpload.PostedFile.ContentLength;
// Create a byte array to hold the contents of the file.
byte[] input = new byte[fileLen - 1];
input = _imageUpload.FileBytes;
// Copy the byte array to a string.
for (int loop1 = 0; loop1 < fileLen; loop1++)
{
displayString = displayString + input[loop1].ToString();
}
try
{
SqlConnection sqlCn = new SqlConnection("Data Source=localhost;Initial Catalog=database;User ID=user;Password=pw");
string qry = "INSERT INTO Project (thumbnail) VALUES (@thumbnail)";
SqlCommand sqlCom = new SqlCommand(qry, sqlCn);
sqlCom.Parameters.Add("@thumbnail", SqlDbType.Image, input.Length).Value = input;
sqlCn.Open();
sqlCom.ExecuteNonQuery();
sqlCn.Close();
}
catch (Exception)
{
(...)
}
}
public bool ValidateFileDimensions(int aHeight, int aWidth)
{
using (System.Drawing.Image image = System.Drawing.Image.FromStream(_imageUpload.PostedFile.InputStream))
{
return (image.Height == aHeight && image.Width == aWidth);
}
}
protectedvoid\u上载ImageBTN\u单击(对象发送方,事件参数e)
{
字符串扩展;
//检查文件是否存在
如果(!\u imageUpload.HasFile)
{
_resultbl.Text=“请选择一个文件!”;
返回;
}
//检查文件扩展名
extension=System.IO.Path.GetExtension(_imageUpload.FileName).ToLower();
如果(!extension.Equals(“.jpg”)&&&!extension.Equals(.jpeg”)&&!extension.Equals(.png”))
{
_resultbl.Text=“只允许使用图像文件(.JPGs和.PNGs);
返回;
}
//检查图像尺寸是否有效
如果(!ValidateFileDimensions(140152))
{
_resultbl.Text=“允许的最大尺寸为:宽度1520px和高度您可以从FileUpload.FileBytes
保存返回的字节数组
if(_imageUpload.HasFile)
{
byte[] imageData = _imageUpload.FileBytes;
using(SqlConnection sqlCn = new SqlConnection("Server=localhost;database=databaseName;uid=userName;pwd=password"))
{
string qry = "INSERT INTO Project (thumbnail) VALUES (@thumbnail)";
using(SqlCommand sqlCom = new SqlCommand(qry, sqlCn))
{
sqlCom.Parameters.Add("@thumbnail",
SqlDbType.Image,
imageData.Length).Value=imageData;
sqlCn.Open();
sqlCom.ExecuteNonQuery();
sqlCn.Close();
}
}
}
编辑:
protectedvoid\u上载ImageBTN\u单击(对象发送方,事件参数e)
{
字符串扩展;
//检查文件是否存在
如果(!\u imageUpload.HasFile)
{
_resultbl.Text=“请选择一个文件!”;
返回;
}
//检查文件扩展名
extension=System.IO.Path.GetExtension(_imageUpload.FileName).ToLower();
如果(!extension.Equals(“.jpg”)&&&!extension.Equals(.jpeg”)&&!extension.Equals(.png”))
{
_resultbl.Text=“只允许使用图像文件(.JPGs和.PNGs);
返回;
}
//检查图像尺寸是否有效
如果(!ValidateFileDimensions(140152))
{
_resultbl.Text=“允许的最大尺寸为:宽度1520px和高度您可以从FileUpload.FileBytes
保存返回的字节数组
if(_imageUpload.HasFile)
{
byte[] imageData = _imageUpload.FileBytes;
using(SqlConnection sqlCn = new SqlConnection("Server=localhost;database=databaseName;uid=userName;pwd=password"))
{
string qry = "INSERT INTO Project (thumbnail) VALUES (@thumbnail)";
using(SqlCommand sqlCom = new SqlCommand(qry, sqlCn))
{
sqlCom.Parameters.Add("@thumbnail",
SqlDbType.Image,
imageData.Length).Value=imageData;
sqlCn.Open();
sqlCom.ExecuteNonQuery();
sqlCn.Close();
}
}
}
编辑:
protectedvoid\u上载ImageBTN\u单击(对象发送方,事件参数e)
{
字符串扩展;
//检查文件是否存在
如果(!\u imageUpload.HasFile)
{
_resultbl.Text=“请选择一个文件!”;
返回;
}
//检查文件扩展名
extension=System.IO.Path.GetExtension(_imageUpload.FileName).ToLower();
如果(!extension.Equals(“.jpg”)&&&!extension.Equals(.jpeg”)&&!extension.Equals(.png”))
{
_resultbl.Text=“只允许使用图像文件(.JPGs和.PNGs);
返回;
}
//检查图像尺寸是否有效
如果(!ValidateFileDimensions(140152))
{
_resultbl.Text=“允许的最大尺寸是:宽度1520px和高度嘿,我尝试了好几次,只是调试了一下,因为插入总是失败的,这是因为(在这里的示例中)字节“数组不包含任何值,因此它尝试填充NULL,这当然不起作用,因为它是不允许的。您确定这应该起作用吗?我如何做?我在上面更新了我的代码,以便您可以看到我所做的事,实际上我已经这样做了:如果(!\u imageUpload.HasFile){u resultbl.Text=”请选择一个文件!”;return;}
循环需要如何喜欢,以及我必须循环什么?您必须在INSERT SQL(查询)中包含所有列(不为空)。类似于:INSERT INTO PROJECT(col1,col2,col3)值(@para1,para2,para3)
嘿,我试了好几次,只是调试了一下,因为插入总是失败的,这是因为(在这里的示例中)字节数组不包含任何值,因此它尝试填充NULL,这当然不起作用,因为它是不允许的。你确定这应该起作用吗?我该如何做?我更新了上面的代码,以便你可以看到我所做的事情,实际上我已经这样做了:如果(!\u imageUpload.HasFile){\u resultbl.Text=“请选择一个文件!”;return;}
循环需要如何喜欢,以及我必须循环什么?您必须在INSERT SQL(查询)中包含所有列(不为空)。类似于:INSERT INTO PROJECT(col1,col2,col3)值(@para1,para2,para3)