当前位置:编程学习 > C#/ASP.NET >>

C#通过WebService将文件存储到数据库

现在我有如下需求:
我通过WebService来进行数据库的访问操作,现在想把文件通过WebService存储到数据库,我不知道该怎么实现,数据库是sqlServer,请高手将我上传附件的方法改成用WebService来实现,最好是我传递的参数是文件流,我的不采用WebService的方法如下:

 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;
        }

--------------------编程问答-------------------- 使用webservice就是把工作部分提交给webservice 你客户端只需要传入参数就可以了  代码在webservice里编写与数据库进行交互就可以了 --------------------编程问答-------------------- 正常上传文件是通过 Http Request Content 所以整个流是 FileStream ,即接收方法不能有别的参数。

关于上传的其他参数可以通过 Header 来传递。

或者你可以把参数设计为 byte[] 客户端直接读取文件,作为byte[]传递到服务端。 --------------------编程问答-------------------- 除 --------------------编程问答-------------------- 或者你可以把参数设计为 byte[] 客户端直接读取文件,作为byte[]传递到服务端。 --------------------编程问答-------------------- 你传递byte[]过去就行了 --------------------编程问答-------------------- byte[]=》service=》update Db
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,