【问题标题】:file transfer between a client machine and a server machine database using C#使用 C# 在客户端计算机和服务器计算机数据库之间传输文件
【发布时间】:2010-12-23 20:54:07
【问题描述】:

我在网络中的服务器机器上有这个 SQL 数据库,我希望任何客户端机器能够相应地向数据库上传和下载文件,文件将保存到服务器机器文件系统和他们的元数据将存储在数据库中。
执行该任务的最佳方法是什么?以及如何使用 C# winform 应用程序实现它? 提前谢谢@_@

【问题讨论】:

  • 您希望他们从数据库服务器上的物理位置下载文件还是提取存储在数据库中的文件?
  • 这样的问题让我希望有一个“搜索 GOOGLE FIRST”的自动回复和一个“自己做一点研究”的自动回复。
  • @Charles:这不适合这个网站。如果答案是这样,那么您可以将其标记为骗子。但是说“呃,信息可以在网上免费获得”与 SO 对人的意义是对立的。
  • @Charles Boyung 我确实搜索过它,伙计,我知道主要方法,但如果你注意到我在问最好的方法!不只是无论如何!此外,一切都可以在网上找到..我搜索的越多,我发现的越多..但我要到明天才能完成这个..所以我需要专家的建议!!这不是SO的主要思想吗? :S

标签: c# sql database client-server file-transfer


【解决方案1】:

为什么要将文件存储在数据库中?文件系统(我确信相关服务器也有)更适合保存和提供文件。

如果文件必须在数据库中,那么您可能只想将它们存储在 blob 字段中。当然,应将附加字段与有关文件的数据添加到表中。文件名、文件类型、文件大小(如果您不想动态从 blob 计算它),可能是上传它的用户、上传时间等。

此时,您可以像应用程序中的任何其他数据库记录一样与它进行交互(为简洁起见,跳过对此的解释,不乏有关该主题的教程),并增加了与字节数组相互转换的步骤对于 blob 数据。另外,no shortage of examples

但我必须回到我原来的问题。为什么要将文件放在关系数据库中?

【讨论】:

  • 数据库是公司的档案系统,客户是公司的员工。他们应该能够将他们的报告、文件、任务..等上传到数据库中,以防止数据丢失,最大限度地减少物理文件的使用并简化文件方法的搜索..
  • @Majd:即便如此,文件系统更适合实际文件。有关文件的信息可以很容易地存储在数据库中。但是他们可以将文件上传到文件系统,可以通过冗余和备份来防止数据丢失(您认为数据库将其数据存储在哪里......在磁盘上)等等。您当然可以存储将数据库中的文件作为二进制数据,无论如何它都不是 最好的 方法。没有理由不在文件系统中保存文件,在数据库中保存关系数据。
  • ohh .. 你把我的问题弄错了,这显然是我的错误,因为第一条评论中的 RandomNoob 也对这一点感到困惑 .. 我会改写这个问题 .. 但我在这里解释首先..文件将保存到服务器机器而不是实际数据库中......我主要是询问将文件从客户端机器移动到服务器机器的最佳方法!然后将文件的信息存储在数据库中。希望现在一切都清楚了
  • @Majd:SharePoint 是免费的(已获得 Windows Server 许可证),具有文档存储和版本控制功能,并使用 SQL Server 作为后端。免费的时候为什么要重新发明*?
【解决方案2】:
try
{
    if (txtFilePath.Text == pdfFilepath )
    {
        byte [] b=File .ReadAllBytes (pdfFilepath);
        SqlConnection con1=Connection.Conn();
        SqlCommand cmd=new SqlCommand ("insert into tbl_Document(Company_Id,FileNo,PdfFile)values(@cid,@fno,@file)",con1);
        cmd .Parameters .AddWithValue("@cid",txtCompanyId.Text);
        cmd .Parameters .AddWithValue("@fno",txtFileNumber.Text);
        cmd .Parameters .AddWithValue("@file",b);
        con1.Open();
        cmd .ExecuteNonQuery();
        con1.Close();
    }
    else
    {
        MessageBox.Show("Please give a valid file address.");
        this.Dispose();
    }
}
catch
{ 
    MessageBox.Show("Unable to Process.");
    this.Dispose();
}

【讨论】: