可不可以把图片保存在sqlserver内??
怎样操作??
怎样操作??
解决方案 »
- Linq取头两行问题
- asp.net中从execl文件导入到sql数据的数据乱码
- 关于EXCEL导入导出
- 求一正则表达式
- 关于ViewState的一个很奇怪的问题。
- 就70分了,问一下,如何使freetextbox不屏蔽脚本,在线等。下班前结。
- 在线等,解决了立即结帖,机器报错“服务器应用程序不可用”
- 本机上测试,可以读写cookies了,为什么上传到空间上,这个就不行呢?
- 存储过程问题 急 急 急 急 急 急
- asp.net里面怎么样请求执行asp页面?在线等待!!谢谢!!
- 一个按钮中 Response.Redirect ("Register.aspx"); 如何制定其Target属性 ?
- 还为安全问题而苦恼么?使用ASP.NET 2.0吧!
command.parameter就可以了。
俺实现过vb.ent的代码……
<%@ Page EnableSessionState="false" explicit="true" strict="true" MaintainState="false"%>
<%@Import Namespace="System.Data.Sql" %>
<%@Import Namespace="System.IO"%>
<script language="VB" runat=server>
Sub UploadBtn_Click(Sender as Object, E as EventArgs)
Dim imgStream as Stream
Dim imgLen as Integer
Dim imgName_value as string
Dim imgContentType as String
Dim imgUploadedName as String----------------------------------------------------------------------------------------------------------------
imgStream = UploadFile.PostedFile.InputStream
' 处理图片数据流
imgLen = UploadFile.PostedFile.ContentLength
' 获知要创建多长的字节数组
imgUploadedName = UploadFile.PostedFile.FileName
Dim imgBinaryData(imgLen) as Byte
' 创建一个字节数组
imgContentType = UploadFile.PostedFile.ContentType
' 处理图片数据类型,如image/gif或image/jpeg
imgName_value = imgName.Value
' 给图片做一个切题的说明(这样,数据库的图片就有两个名字了).一个是上传时原本的文件名,另一个是用户在上传时输入的说明.如果这个说明在上传时没有输入,我们将通过UploadFile.PostedFile.FileName.检索该图片原本的文件名.但是, UploadFile.PostedFile.FileName.返回的是上传图片的完整路径,如可能是: C:\intels\chunfeng.jpg,因此,在稍后我们还要写一个函数来处理一下
Try
If imgName_value.Length < 1 then
imgName_value = GetLastRightOf("\",imgUploadedName )
End if
Catch myEx as Exception
imgName_value = GetLastRightOf("\",imgUploadedName )
End Try
---------------------------------------------------------------------------------------------------------------- Dim n as Integer = imgStream.Read(imgBinaryData, 0, imgLen)
' 处理图片数据流,并把它转换为一个字节数组
Dim NumRowsAffected as Integer = MyDatabaseMethod(imgName_value, imgBinaryData, imgContentType)
If NumRowsAffected > 0 then
Response.Write ( "<BR>恭喜,图片上传成功!" )
Else
Response.Write ( "<BR> 噢,图片上传失败!" )
End if
End Sub----------------------------------------------------------------------------------------------------------------
' 这个函数就是刚才上面提到的处理形如: C:\intels\chunfeng.jpg文件名的函.GetLastRightOf ()在最后位置寻找"\",一旦定位,就储存到变量 StrPos里,调用SubString()字符串对象方法,并返回在最后那个"\"后面的一切字符.调用String.SubString()应该是SubString(StrPos + 1),因为"\"的长度也要说明,所以要把StrPos加1
Function GetLastRightOf(LookFor as String, myString as String) as String
Dim StrPos as Integer
StrPos = myString.LastIndexOf(LookFor)
Return myString.SubString(StrPos + 1)
End Function
----------------------------------------------------------------------------------------------------------------
' 当数据提交,要分析二进制数据并插入到数据库中去,因此,我们需要两个函数来完成:连接字符串和插入图片到数据库.这是后者,可在查询中定义参数哦
Function MyDatabaseMethod(imgName As String, imgbin As Byte(), imgcontenttype as String) As Integer
Dim connection as New SQLConnection( sqlConnString() )
Dim command as New SQLCommand( "INSERT INTO Image (img_name,img_data,img_contenttype) VALUES ( @img_name, @img_data,@img_contenttype )", connection )
' 参数img_name是图片说明或名称; img_data是二进制或字节数组; img_contenttype是图片数据类型,如image/gif或image/jpeg
Dim param0 As New SQLParameter( "@img_name", SQLDataType.VarChar,50 )
param0.Value = imgName
command.Parameters.Add( param0 )
Dim param1 as New SQLParameter( "@img_data", SQLDataType.Image )
param1.Value = imgbin
command.Parameters.Add( param1 )
Dim param2 as New SQLParameter( "@img_contenttype", SQLDataType.VarChar,50 )
param2.Value = imgcontenttype
command.Parameters.Add( param2 )
connection.Open()
' 打开一个到数据库的连接
Dim numRowsAffected as Integer = command.ExecuteNonQuery()
' 通过调用command.ExecuteNonQuery()执行命令
connection.Close()
Return numRowsAffected
End Function ---------------------------------------------------------------------------------------------------------------
Private Function sqlConnString() as String
REM -- Get Connstring from config.web
Dim Context as HttpContext = HttpContext.Current
Dim AppSettings as HashTable = Ctype(Context.GetConfig("appsettings"),HashTable)
Dim myDSN as String = Ctype(AppSettings("cnTest"),String)
Return myDSN
' 这个函数很简单:读取数据库连接字符串
End Function
--------------------------------------------------------------------------------------------------------------- </script>
<html>
<title>精彩春风之上传图片到数据库</title>
<body>----------------------------------------------------------------------------------------------------------------
'建立上传图片的表格
<form enctype="multipart/form-data" runat=server id=form1 name=form1>
' enctype属性向浏览器和服务器说明上传二进制数据
请输入图片说明:
<input type=text id=imgName runat="server" />
'type=text控制一个对话框给用户
<br>选择上传的图片:
<input id="UploadFile" type=file runat=server>
<asp:button Text="上传" OnClick="UploadBtn_Click" runat=server/>
</form>
---------------------------------------------------------------------------------------------------------------- </body>
</html>imgview.aspx
<%@ Page EnableSessionState="false" explicit="true" MaintainState="false"%>
<%@ Import Namespace="System.Data.Sql" %>
<script language="VB" runat="server">
Sub Page_Load(sender As Object, e As EventArgs)
Dim imgid as String = Request.QueryString("id")
Dim sqlText as String = "SELECT img_name, img_contenttype, img_data FROM image WHERE img_pk=" & imgid
Dim dbRead AS SQLDataReader
Dim sqlCmd AS SQLCommand
sqlCmd = New SQLCommand(sqlText,sqlConnString() )
sqlCmd.ActiveConnection.Open()
sqlCmd.execute(dbRead )
If dbRead.Read()
Response.ContentType = dbRead.Item("img_contenttype").ToString()
Response.BinaryWrite ( dbRead.Item("img_data") )
End If
End Sub
Private Function sqlConnString() as String
' 从config.web 中获取Connstring from
Dim Context as HttpContext = HttpContext.Current
Dim AppSettings as HashTable = Ctype(Context.GetConfig("appsettings"),HashTable)
Dim myDSN as String = Ctype(AppSettings("cnTest"),String)
Return myDSN
End Function
</script>image.sql
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[image]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[image]
GO
CREATE TABLE [dbo].[image] (
[img_pk] [int] IDENTITY (1, 1) NOT NULL ,
//主关键字
[img_name] [varchar] (50) NULL ,
//图片说明
[img_data] [image] NULL ,
//储存二进制图像数据
[img_contenttype] [varchar] (50) NULL
//图片数据分类类型,如"image/gif"或"image/jpeg",以便客户端识别
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
ALTER TABLE [dbo].[image] WITH NOCHECK ADD
CONSTRAINT [PK_image] PRIMARY KEY NONCLUSTERED
(
[img_pk]
) ON [PRIMARY]
GO
{
FileStream fs = new FileStream("遗迹.jpg",FileMode.Open,FileAccess.Read);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes,0,(int)fs.Length);
string sql = "insert TestFiles(MyFileName,FileType,MyFile)values(@FN,@FT,@MF)";
SqlCommand com = new SqlCommand(sql,this.sqlCon);
SqlParameter FN = new SqlParameter("@FN",SqlDbType.VarChar);
FN.Value = "遗迹";
com.Parameters.Add(FN);
SqlParameter FT = new SqlParameter("@FT",SqlDbType.VarChar);
FT.Value = "JPG";
com.Parameters.Add(FT);
SqlParameter MF = new SqlParameter("@MF",SqlDbType.Image);
MF.Value = bytes;
com.Parameters.Add(MF);
com.CommandType = CommandType.Text;
sqlCon.ConnectionString = this.conStr;
try
{
sqlCon.Open();
com.ExecuteNonQuery();
sqlCon.Close();
MessageBox.Show("存入成功!");
}
catch(Exception ex)
{
throw ex;
}
finally
{
sqlCon.Close();
}
} private void button2_Click(object sender, System.EventArgs e)
{
string sql = "select MyFile from TestFiles where id = 1";
sqlCon.ConnectionString = this.conStr; SqlCommand readComm = new SqlCommand(sql,this.sqlCon); SqlDataReader dr = null; FileStream fs = null; BinaryWriter bw = null; int bufferSize = 100; byte[] outbyte = new byte[bufferSize]; long retval; long startIndex = 0;
try
{
sqlCon.Open();
dr = readComm.ExecuteReader();
while(dr.Read())
{
fs = new FileStream("TakeOut.jpg",FileMode.OpenOrCreate,FileAccess.Write); bw = new BinaryWriter(fs); retval = dr.GetBytes(0, startIndex, outbyte, 0, bufferSize);
while (retval == bufferSize)
{
bw.Write(outbyte);
bw.Flush();
startIndex += bufferSize;
retval = dr.GetBytes(0, startIndex, outbyte, 0, bufferSize);
} // Write the remaining buffer.
bw.Write(outbyte, 0, (int)retval - 1);
bw.Flush(); // Close the output file.
bw.Close();
fs.Close();
Image im = Image.FromFile("TakeOut.jpg"); this.pictureBox1.Image = im;
}
sqlCon.Close();
}
catch(Exception ex)
{
throw ex;
}
finally
{
sqlCon.Close();
bw.Close();
fs.Close();
}
}