小弟在弄关于.net文件上传的问题(以二进制形式存入数据库),但是好像遇到了问题,最后代码运行后文件转化为二进制
数据没有办法存储,具体代码如下,感激各位大侠了~:<数据表:
DocID int;
DocTitle varchar;
Doc image;
DocType varchar;
Entrydate varchar;过程存储:
CREATE PROCEDURE uSP_BooksUploadFile
@Title varchar(200),
@Doc Image,
@DocType varchar(4)ASINSERT tblBooksUpload(DocTitle,Doc,DocType)
VALUES (@Title,@Doc,@DocType)
GO前台代码:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="frmUpload" method="post" enctype="multipart/form-data" runat="server">
<div>
<span>Title:<br />
</span>
<asp:textbox id="txtTitle" runat="server" EnableViewState="False"></asp:textbox>
<asp:requiredfieldvalidator id="valrTitle" runat="server" ErrorMessage="* Required" ControlToValidate="txtTitle">* Required</asp:requiredfieldvalidator><br />
<br />
<span>Docutment to Upload:</span><br/>
<input id="txtFileContents" type="file" runat="server" name="txtFileContents" style="width: 280px" />
<br />
<br />
<asp:button id="btnSubmit" Text="Submit" Runat="server" OnClick="btnSubmit_Click"></asp:button>
<br />
</div>
</form>
</body>
</html>后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;public partial class Default6 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void btnSubmit_Click(object sender, EventArgs e)
{
//strDocType用于保存上传文件的类型
string strDocType; //用于保存文件大小
int intDocLen; //Stream用于读取上传数据 Stream objStream;
SqlConnection BooksConn;
SqlCommand cmdUploadDoc; if (IsValid)
{
if (txtFileContents.PostedFile != null)
{
//文件类型
string s1 = txtFileContents.PostedFile.FileName.ToString();
string strDocExt = s1.Substring(s1.Length - 4, 4);
switch (strDocExt)
{
case ".doc":
strDocType = "doc";
break;
case ".ppt":
strDocType = "ppt";
break;
case ".htm":
strDocType = "htm";
break;
case ".html":
strDocType = "htm";
break;
case ".jpg":
strDocType = "jpg";
break;
case ".gif":
strDocType = "gif";
break;
default:
strDocType = "txt";
break;
}
//上传文件具体内容
intDocLen =txtFileContents.PostedFile.ContentLength;
byte[] Docbuffer = new byte[intDocLen];
objStream = txtFileContents.PostedFile.InputStream; //文件保存到缓存
//缓存将保存到数据库 objStream.Read(Docbuffer, 0, intDocLen);
BooksConn = new SqlConnection("Server=(local);UID=sa;Database=shixi;Pwd=;");
cmdUploadDoc = new SqlCommand("uSP_BooksUploadFile", BooksConn);
cmdUploadDoc.CommandType = CommandType.StoredProcedure;
cmdUploadDoc.Parameters.Add("@Title ", SqlDbType.VarChar, 200);
cmdUploadDoc.Parameters.Add("@Doc", SqlDbType.Image);
cmdUploadDoc.Parameters.Add("@DocType", SqlDbType.VarChar, 4);
cmdUploadDoc.Parameters[0].Value = txtTitle.Text;
cmdUploadDoc.Parameters[1].Value = Docbuffer;
cmdUploadDoc.Parameters[2].Value = strDocType;
BooksConn.Open();
int ret = cmdUploadDoc.ExecuteNonQuery();
if (ret > 0)
{
txtTitle.Text = "";
Response.Write("<script>alert('Perfect!');</script>");
}
else
{
Response.Write("<script>alert('Error!');</script>");
return;
}
BooksConn.Close();
}
} }
}
数据没有办法存储,具体代码如下,感激各位大侠了~:<数据表:
DocID int;
DocTitle varchar;
Doc image;
DocType varchar;
Entrydate varchar;过程存储:
CREATE PROCEDURE uSP_BooksUploadFile
@Title varchar(200),
@Doc Image,
@DocType varchar(4)ASINSERT tblBooksUpload(DocTitle,Doc,DocType)
VALUES (@Title,@Doc,@DocType)
GO前台代码:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="frmUpload" method="post" enctype="multipart/form-data" runat="server">
<div>
<span>Title:<br />
</span>
<asp:textbox id="txtTitle" runat="server" EnableViewState="False"></asp:textbox>
<asp:requiredfieldvalidator id="valrTitle" runat="server" ErrorMessage="* Required" ControlToValidate="txtTitle">* Required</asp:requiredfieldvalidator><br />
<br />
<span>Docutment to Upload:</span><br/>
<input id="txtFileContents" type="file" runat="server" name="txtFileContents" style="width: 280px" />
<br />
<br />
<asp:button id="btnSubmit" Text="Submit" Runat="server" OnClick="btnSubmit_Click"></asp:button>
<br />
</div>
</form>
</body>
</html>后台代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;public partial class Default6 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{ }
protected void btnSubmit_Click(object sender, EventArgs e)
{
//strDocType用于保存上传文件的类型
string strDocType; //用于保存文件大小
int intDocLen; //Stream用于读取上传数据 Stream objStream;
SqlConnection BooksConn;
SqlCommand cmdUploadDoc; if (IsValid)
{
if (txtFileContents.PostedFile != null)
{
//文件类型
string s1 = txtFileContents.PostedFile.FileName.ToString();
string strDocExt = s1.Substring(s1.Length - 4, 4);
switch (strDocExt)
{
case ".doc":
strDocType = "doc";
break;
case ".ppt":
strDocType = "ppt";
break;
case ".htm":
strDocType = "htm";
break;
case ".html":
strDocType = "htm";
break;
case ".jpg":
strDocType = "jpg";
break;
case ".gif":
strDocType = "gif";
break;
default:
strDocType = "txt";
break;
}
//上传文件具体内容
intDocLen =txtFileContents.PostedFile.ContentLength;
byte[] Docbuffer = new byte[intDocLen];
objStream = txtFileContents.PostedFile.InputStream; //文件保存到缓存
//缓存将保存到数据库 objStream.Read(Docbuffer, 0, intDocLen);
BooksConn = new SqlConnection("Server=(local);UID=sa;Database=shixi;Pwd=;");
cmdUploadDoc = new SqlCommand("uSP_BooksUploadFile", BooksConn);
cmdUploadDoc.CommandType = CommandType.StoredProcedure;
cmdUploadDoc.Parameters.Add("@Title ", SqlDbType.VarChar, 200);
cmdUploadDoc.Parameters.Add("@Doc", SqlDbType.Image);
cmdUploadDoc.Parameters.Add("@DocType", SqlDbType.VarChar, 4);
cmdUploadDoc.Parameters[0].Value = txtTitle.Text;
cmdUploadDoc.Parameters[1].Value = Docbuffer;
cmdUploadDoc.Parameters[2].Value = strDocType;
BooksConn.Open();
int ret = cmdUploadDoc.ExecuteNonQuery();
if (ret > 0)
{
txtTitle.Text = "";
Response.Write("<script>alert('Perfect!');</script>");
}
else
{
Response.Write("<script>alert('Error!');</script>");
return;
}
BooksConn.Close();
}
} }
}
改成
<asp:FileUpload ID="txtFileContents" runat="server" />
代码文件里转换字节改为
txtFileContents.FileBytes试一下
用这个!另外如果你的文件从长远看越积越多,建议使用文件形式。