C#通过WebService将文件存储到数据库
现在我有如下需求:我通过WebService来进行数据库的访问操作,现在想把文件通过WebService存储到数据库,我不知道该怎么实现,数据库是sqlServer,请高手将我上传附件的方法改成用WebService来实现,最好是我传递的参数是文件流,我的不采用WebService的方法如下:
--------------------编程问答-------------------- 使用webservice就是把工作部分提交给webservice 你客户端只需要传入参数就可以了 代码在webservice里编写与数据库进行交互就可以了 --------------------编程问答-------------------- 正常上传文件是通过 Http Request Content 所以整个流是 FileStream ,即接收方法不能有别的参数。
public bool Insert(string id, string versionTime, string versionDesc, string versionDate, string updateInfo,
string inputUser, IList<XFileInfo> fileInfos)
{
DbConnection conn = this.m_DataAccess.Connection;
SqlTransaction trans = null;
try
{
DbCommand cmd = new SqlCommand();
cmd.Connection = conn;
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
trans = conn.BeginTransaction() as SqlTransaction;
cmd.Transaction = trans;
string sql = "INSERT INTO " + this.TableName + "(ID,VersionTime,VersionDesc,VersionDate,UpdateInfo,InputUserId,InputTime)" +
"VALUES('{0}','{1}','{2}','{3}','{4}','admin',getdate())";
sql = string.Format(sql, id, versionTime, versionDesc, versionDate, updateInfo, inputUser);
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
int loopNo = 0;
foreach (XFileInfo fileInfo in fileInfos)
{
string sqlFiles = "INSERT INTO VersionInfoFiles(ID,VersionInfoID,FileName,FileBytes,FilePath)VALUES(newid(),@VersionInfoID,@FileName,@FileBytes,@FilePath)";
FileInfo fi = new FileInfo(fileInfo.FileFullName);
if (fi.Exists == false)
{
return false;
//直接返回失败
}
byte[] bData = null;
using (FileStream fs = fi.OpenRead())
{
bData = new byte[fi.Length];
fs.Read(bData, 0, Convert.ToInt32(fi.Length));
}
cmd.Parameters.Clear();
DbParameter parameterInfoId = new SqlParameter("@VersionInfoID", id);
cmd.Parameters.Add(parameterInfoId);
DbParameter parameterFileName = new SqlParameter("@FileName", fileInfo.FileName);
cmd.Parameters.Add(parameterFileName);
DbParameter parameterFileBytes = new SqlParameter("@FileBytes", bData);
cmd.Parameters.Add(parameterFileBytes);
DbParameter parameterDirectory = new SqlParameter("@FilePath", fileInfo.DirectoryName);
cmd.Parameters.Add(parameterDirectory);
cmd.CommandText = sqlFiles;
cmd.ExecuteNonQuery();
loopNo += 1;
XUploadEventArgs e = new XUploadEventArgs(fileInfos.Count, loopNo, fileInfo.FileName);
this.OnUpload(this, e);
}
trans.Commit();
return true;
}
catch (Exception ex)
{
trans.Rollback();
XMessageBox.ShowError(ex.Message);
XErrorLogTool.WriteLog(ex.ToString());
}
finally
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
if (trans != null)
{
trans.Dispose();
}
}
return false;
}
关于上传的其他参数可以通过 Header 来传递。
或者你可以把参数设计为 byte[] 客户端直接读取文件,作为byte[]传递到服务端。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 或者你可以把参数设计为 byte[] 客户端直接读取文件,作为byte[]传递到服务端。 --------------------编程问答-------------------- 你传递byte[]过去就行了 --------------------编程问答-------------------- byte[]=》service=》update Db
补充:.NET技术 , C#