SQL2012之FileTable与C#的联合应用
关于FileTable是什么,请猛击如下链接:http://technet.microsoft.com/zh-cn/library/ff929144(v=SQL.110).aspx;如您已知道,请跳过。
关于如何启用FileTable功能,请猛击如下链接:http://technet.microsoft.com/zh-cn/library/gg509097.aspx;
关于如何创建、修改和删除FileTable,请猛击如下链接:http://technet.microsoft.com/zh-cn/library/gg509088.aspx。
欲了解更多FileTable特性及支持,请点击以上链接页面页底的相关任务部分(如图):

在上面的截图中用红色框框圈出的部分,将是本文的重点部分。在新建FileTable后,右击并选择“浏览FileTable目录”,如下图:


没错,也许您已想到,这就是所谓的FileTable支持Windows I/O API操作,这样我们就可以利用System.IO命名空间下的FileInfo类中的Move、Copyto等函数实现利用FileTable上传文件的功能。下面我们将实现如何在C#程序中实现这点:
1.首先要获取到FileTable表的RootPath(也就是上图中圈出的网络路径),就这一点我们可以T-SQL中的函数FileTableRootPath(),比如说我建的FileTable名为MyFirstFileTable,那么T-SQL如下便可获取其RootPath:
select FileTableRootPath('MyFirstFileTable') as Path
2.RootPath获取后我们就可以在C#程序中实现了,如下代码:
/// <summary>
/// Upload files by FileTable
/// </summary>
/// <param name="strFilePath">the path of target file</param>
public void UploadbyFileTable(string strFilePath)
{
if (!File.Exists(strFilePath))
return;
FileInfo file = new FileInfo(strFilePath);
string strDBConnection = "Server=your server name/IP,initial catalog=your database name,User id=your id,passord=your password";
string strFileTableName = "your FileTable's name";
string strRootPath = GetFileTableRootPath(strDBConnection, strFileTableName);
if (File.Exists(Path.Combine(strRootPath, file.Name)))
{
return;
}
file.MoveTo(Path.Combine(strRootPath, file.Name));
} /// <summary>
/// Get your Filetable's RootPath
/// </summary>
/// <param name="strDBConnection">your DB connection string</param>
/// <param name="strFileTableName">your FileTable name</param>
/// <returns>your Filetable's RootPath</returns>
public string GetFileTableRootPath(string strDBConnection,string strFileTableName)
{
string strRootPath = string.Empty;
try
{
SqlConnection sqlCon = new SqlConnection(strDBConnection);
sqlCon.Open();
StringBuilder sb = new StringBuilder();
sb.AppendFormat("select FileTableRootPath('{0}') as [path]", strFileTableName);
SqlCommand sqlCmd = new SqlCommand(sb.ToString(), sqlCon);
SqlDataAdapter sqlDa = new SqlDataAdapter(sqlCmd);
DataTable dt = new DataTable();
sqlDa.Fill(dt);
strRootPath = dt.Rows[][].ToString();
sqlDa.Dispose();
sqlCmd.Dispose();
sqlCon.Close();
}
catch(Exception e)
{
throw e;
}
return strRootPath;
}
这样就实现了利用FileTable上传文件的功能。到最后,您发现是不是很简单呢?
欢迎您积极提出建议和疑问,我会尽自己的力量给您满意的答复,O(∩_∩)O谢谢
SQL2012之FileTable与C#的联合应用的更多相关文章
- Dynamics CRM 之ADFS 使用 WID 的独立联合服务器
ADFS 的使用 WID 的独立联合服务器适用于自己的测试环境,常用的就是在虚机中使用. 拓扑图如下: wID:联合身份验证服务配置为使用 Windows 内部数据库
- Dynamics CRM 之ADFS 使用 WID 的联合服务器场
使用 WID 的联合服务器场 默认拓扑 Active Directory 联合身份验证服务 (AD FS) 是联合服务器场,使用 Windows 内部数据库 (WID). 在这种拓扑, AD FS 使 ...
- Hibernate(5)—— 联合主键 、一对一关联关系映射(xml和注解) 和 领域驱动设计
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: One to One 映射关系 一对一单向外键(XML/Annotation) 一对一双向外键关联(XML/A ...
- Federated Identity Pattern 联合身份模式
Delegate authentication to an external identity provider. This pattern can simplify development, min ...
- [占位-未完成]scikit-learn一般实例之十一:异构数据源的特征联合
[占位-未完成]scikit-learn一般实例之十一:异构数据源的特征联合 Datasets can often contain components of that require differe ...
- SQL联合查询:子表任一记录与主表联合查询
今天有网友群里提了这样一个关于SQL联合查询的需求: 一.有热心网友的方案: 二.我的方案: select * from ( select a.*,(select top 1 Id from B as ...
- Dynamics CRM 之ADFS 使用 SQL Server 的联合服务器场
此拓扑用于 Active Directory 联合身份验证服务 (AD FS) 不同于使用 Windows 内部数据库 (WID) 部署拓扑,因为不会将数据复制到每台联合服务器场中的联合身份验证服务器 ...
- Dynamics CRM 之ADFS 使用 WID 和代理的联合服务器场
为此部署拓扑 Active Directory 联合身份验证服务 (AD FS) 等同于联合服务器场与 Windows 内部数据库 (WID) 拓扑中,但它将代理服务器计算机添加到外围网络,以支持外部 ...
- SQL Server 2012 新特性:FileTable
FileTable是基于FILESTREAM的一个特性.有以下一些功能: 一行表示一个文件或者目录. 每行包含以下信息: file_Stream流数据,stream_id标示符(GUID). 用户表示 ...
随机推荐
- opengl performance optimization
OpenGL 性能优化 作者: Yang Jian (jyang@cad.zju.edu.cn) 日期: 2009-05-04 本文从硬件体系结构.状态机.光照.纹理.顶点数组.LOD.Cull等方面 ...
- SRM 388(1-250pt)
题意:定义一个数为k-smooth,如果它最大的质因子不超过k.给定n和k,求不超过n的,k-smooth的数有多少个.(k <= 100, n <= 10^5) 解法:对于一个数t,判断 ...
- SRM 408(1-250pt, 1-500pt)
DIV1 250pt 题意:每天晚上需要点蜡烛,且每晚蜡烛燃烧1cm,第i天晚上需要点i根蜡烛.第一天白天的时候,拥有一些蜡烛,用vector<int>can表示他们的长度,问最多能烧几个 ...
- HDU 1230 火星A+B
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1230 水题模拟一道,主要考验代码能力,刷完题就感觉自己还是太弱了. #include<cmath ...
- 安卓系统运行Debian-7.0环境(Debian for android)
新手使用说明(下载地址在文章末尾): 〇.警告:root 有风险,折腾 Linux 更有风险,因使用 Debian for Armel 导致任何直接或间接的损失,本人不负任何责任:一.将 debian ...
- 登陆用户怎样获取验证码和保存用户到cookie中
User表: User.java package user.domain; import java.io.Serializable; import java.util.Date; public cla ...
- winform 窗体最大化 分类: WinForm 2014-07-17 15:57 215人阅读 评论(0) 收藏
1:窗体首次加载时最大化 (1):主窗体 this.WindowState = FormWindowState.Maximized; //窗体显示中间部分,不显示窗体名称和最小化.最大化.关闭按钮 ...
- dos插入mysql乱码
1.dos窗口向mysql数据库中插入数据时,如果包含中文的话那么是无法插入的.原因是默认character_set_client编码是ut8,而dos窗口默认编码是gbk.执行一下set chara ...
- Scrapy的shell命令(转)
scrapy python MrZONT 2015年08月29日发布 ...
- 如何优化cocos2d程序的内存使用和程序大小:第二部分_(转)
减少你的程序的大小 把纹理的颜色位深度减少到16位,不仅可以减少内存压力,还可以有效地减少程序的体积.但是,我们还有其它方法可以更进一步地减少程序的大小. TexturePacker PNG 图片优化 ...