在sql server 2005中操作image,varbinary字段
2007-12-06 10:36
543 查看
今天想把图片存到数据库中的image,varchar,nvarchar,varbinary字段, 终于成功了.保存到数据库的代码如下:
HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性
int FileLength = UpFile.ContentLength; //记录文件长度
try
{
if (FileLength == 0)
{ //文件长度为零时
txtMessage.Text = "<b>请你选择你要上传的文件</b>";
}
else
{
Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
Stream StreamObject = UpFile.InputStream; //建立数据流对像
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray, 0, FileLength);
//建立SQL Server链接
SqlConnection Con = new SqlConnection("Data Source=YFXIANGGX;Initial Catalog=jsmstc_teach;User ID=sa;Pwd=1;");
//type 上传文件类型,length上传文件长度,info image,info1 NVarChar,info2 VarChar,info3 VarBinary
String SqlCmd = "INSERT INTO BigField (type,length,info,info1,info2,info3) VALUES (@type,@length,@info,@info1,@info2,@info3)";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@type", SqlDbType.Char, 50).Value = UpFile.ContentType;
CmdObj.Parameters.Add("@length", SqlDbType.Int).Value = UpFile.ContentLength;
CmdObj.Parameters.Add("@info", SqlDbType.Image).Value = FileByteArray;
CmdObj.Parameters.Add("@info1", SqlDbType.NVarChar).Value = FileByteArray.ToString();
CmdObj.Parameters.Add("@info2", SqlDbType.VarChar).Value = FileByteArray.ToString();
CmdObj.Parameters.Add("@info3", SqlDbType.VarBinary, FileLength).Value = FileByteArray;
Con.Open();
CmdObj.ExecuteNonQuery();
Con.Close();
txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功
}
}
catch (Exception ex)
{
txtMessage.Text = ex.Message.ToString();
}
页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="saveall.aspx.cs" Inherits="saveall" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<h1>测试数据库对于大字段()的存取</h1>
<form id="form1" runat="server">
<div>
<table style="width: 488px">
<tr>
<td>
上传图片(选择你要上传的图片)</</td>
<td>
<asp:FileUpload ID="UP_FILE" runat="server" /></td>
<td>
</td>
</tr>
<tr>
<td style="height: 40px">
文件说明(添加上传图片说明,如:作者、出处)</td>
<td style="height: 40px">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="uploadImage" /></td>
<td>
<asp:Label ID="txtMessage" runat="server" Text="Label"></asp:Label></td>
</tr>
</table>
</div>
</form>
</body>
</html>
从数据库中读出时遇到了问题,首先是如何将二进制的数据读出后显示到image上,其次是对于保存成varchar,nvarchar字段的值无法取出来了.都没有解决.读出的数据只能通过response输出到当前页面,无法直接在image控件上输出.保存为image,varbinary字段的值取出来的代码如下:
string ImgID = "1"; //ImgID为图片ID
//建立数据库链接
SqlConnection Con = new SqlConnection("Data Source=YFXIANGGX;Initial Catalog=jsmstc_teach;User ID=sa;Pwd=1;");
String SqlCmd = "SELECT * FROM BigField WHERE id = @id";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@id", SqlDbType.Int).Value = ImgID;
Con.Open();
SqlDataReader SqlReader = CmdObj.ExecuteReader();
SqlReader.Read();
//Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型
Response.ContentType = SqlReader["type"].ToString();//设定输出文件类型
//输出图象文件二进制数制
Response.OutputStream.Write((byte[])SqlReader["info"], 0, (int)SqlReader["length"]);//或者是SqlReader["info3"],
Response.End();
Con.Close();
HttpPostedFile UpFile = UP_FILE.PostedFile; //HttpPostedFile对象,用于读取图象文件属性
int FileLength = UpFile.ContentLength; //记录文件长度
try
{
if (FileLength == 0)
{ //文件长度为零时
txtMessage.Text = "<b>请你选择你要上传的文件</b>";
}
else
{
Byte[] FileByteArray = new Byte[FileLength]; //图象文件临时储存Byte数组
Stream StreamObject = UpFile.InputStream; //建立数据流对像
//读取图象文件数据,FileByteArray为数据储存体,0为数据指针位置、FileLnegth为数据长度
StreamObject.Read(FileByteArray, 0, FileLength);
//建立SQL Server链接
SqlConnection Con = new SqlConnection("Data Source=YFXIANGGX;Initial Catalog=jsmstc_teach;User ID=sa;Pwd=1;");
//type 上传文件类型,length上传文件长度,info image,info1 NVarChar,info2 VarChar,info3 VarBinary
String SqlCmd = "INSERT INTO BigField (type,length,info,info1,info2,info3) VALUES (@type,@length,@info,@info1,@info2,@info3)";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@type", SqlDbType.Char, 50).Value = UpFile.ContentType;
CmdObj.Parameters.Add("@length", SqlDbType.Int).Value = UpFile.ContentLength;
CmdObj.Parameters.Add("@info", SqlDbType.Image).Value = FileByteArray;
CmdObj.Parameters.Add("@info1", SqlDbType.NVarChar).Value = FileByteArray.ToString();
CmdObj.Parameters.Add("@info2", SqlDbType.VarChar).Value = FileByteArray.ToString();
CmdObj.Parameters.Add("@info3", SqlDbType.VarBinary, FileLength).Value = FileByteArray;
Con.Open();
CmdObj.ExecuteNonQuery();
Con.Close();
txtMessage.Text = "<p><b>OK!你已经成功上传你的图片</b>";//提示上传成功
}
}
catch (Exception ex)
{
txtMessage.Text = ex.Message.ToString();
}
页面代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="saveall.aspx.cs" Inherits="saveall" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<h1>测试数据库对于大字段()的存取</h1>
<form id="form1" runat="server">
<div>
<table style="width: 488px">
<tr>
<td>
上传图片(选择你要上传的图片)</</td>
<td>
<asp:FileUpload ID="UP_FILE" runat="server" /></td>
<td>
</td>
</tr>
<tr>
<td style="height: 40px">
文件说明(添加上传图片说明,如:作者、出处)</td>
<td style="height: 40px">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="uploadImage" /></td>
<td>
<asp:Label ID="txtMessage" runat="server" Text="Label"></asp:Label></td>
</tr>
</table>
</div>
</form>
</body>
</html>
从数据库中读出时遇到了问题,首先是如何将二进制的数据读出后显示到image上,其次是对于保存成varchar,nvarchar字段的值无法取出来了.都没有解决.读出的数据只能通过response输出到当前页面,无法直接在image控件上输出.保存为image,varbinary字段的值取出来的代码如下:
string ImgID = "1"; //ImgID为图片ID
//建立数据库链接
SqlConnection Con = new SqlConnection("Data Source=YFXIANGGX;Initial Catalog=jsmstc_teach;User ID=sa;Pwd=1;");
String SqlCmd = "SELECT * FROM BigField WHERE id = @id";
SqlCommand CmdObj = new SqlCommand(SqlCmd, Con);
CmdObj.Parameters.Add("@id", SqlDbType.Int).Value = ImgID;
Con.Open();
SqlDataReader SqlReader = CmdObj.ExecuteReader();
SqlReader.Read();
//Response.ContentType = (string)SqlReader["ImageContentType"];//设定输出文件类型
Response.ContentType = SqlReader["type"].ToString();//设定输出文件类型
//输出图象文件二进制数制
Response.OutputStream.Write((byte[])SqlReader["info"], 0, (int)SqlReader["length"]);//或者是SqlReader["info3"],
Response.End();
Con.Close();
相关文章推荐
- C#操作Sql Server 2005的Image字段
- sql Server 2005中datatime 类型字段模糊查询Like 操作
- SQL Server 2005:请使用 varchar(max)、nvarchar(max) 和 varbinary(max) 数据类型,而不要使用 text、ntext 和 image 数据类型。
- SQL Server 对 Image字段进行操作
- SQL Server 对 Image字段进行操作
- SQL SERVER 2005(2008)插入Blob(Image)字段范例
- SQL Server 字段和对应的说明操作(SQL Server 2005 +)
- 数据库开发基本操作-配置SQL Server 2005 Express的身份验证方式,以及如何启用sa登录名
- 获取SQL Server 2005所有数据库名、所有表名、所有字段名
- SQL Server 2005 XML 操作总结(二)示例
- 获取SQL SERVER 2000/2005数据库字段属性(转)
- SQL Server 2005 xml字段修改
- sql server 2000/2005 游标的使用操作
- SQL Server 2005里设置自增字段
- SQL server对Xml字段的操作
- SQL2005:SQL Server 2005还原数据库时出现“不能选择文件或文件组XXX_log用于此操作的解决办法
- Visual C# 2008+SQL Server 2005 数据库与网络开发-- 4.3 操作数据表
- Visual C# 2008+SQL Server 2005 数据库与网络开发-- 4.5 操作视图
- SQL server 2005基本操作
- SQL Server 2005 创建自动备份的操作步骤