“白沙凤凰河”通过精心收集,向本站投稿了7篇InfoPath开发实战(3):获取SQL Server中的数据,下面是小编精心整理后的InfoPath开发实战(3):获取SQL Server中的数据,希望能够帮助到大家。

篇1:InfoPath开发实战(3):获取SQL Server中的数据
本节的内容:
如何在InfoPath中使用数据连接来从SQL Server数据库中获取数据
如何通过代码来修改数据连接中的SQL查询
在开始设计InfoPath表单之前,先准备一个数据库,InfoPath支持两种数据库连接:
Microsoft Office Access数据库(.mdb文件或.accdb文件)
Microsoft SQL Server数据库
需要注意的是,InfoPath虽然支持SQL Server Express数据库,但却不支持以文件的形式连接SQL Server Express(直接连接.mdf文件),所以如果想使用SQL Server Express数据库,请将数据库文件(.mdf文件)附加到SQL Server Express中,这也就意味着,数据库无法同InfoPath一起分发,使用了SQL Server数据连接的InfoPath如果想要正常地进行查询,就必须保证客户端能够访问SQL Server数据库(无法离线查询)。使用Access数据库也需要确保客户端可以访问Access数据库。如果该Access数据库位于网络位置,则需要确保客户端可以访问该位置;如果Access数据库位于本地,那么分发InfoPath表单时就需要注意连同该数据库一起分发(这种方式可以实现离线查询)。
而查询方式上,这两种数据库都统一使用了SQL语法。
因为没有安装Office Access,所以本示例将使用SQL Server作为目标数据库。首先在SQL Server中创建一个名为TestDB的数据库,然后使用下面的脚本来向其中添加blogs表以及其内容:
/****** 对象: Table [dbo].[blogs] 脚本日期: 01/19/ 13:45:22 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[blogs]') AND type in (N'U'))
DROP TABLE [dbo].[blogs]
GO
/****** 对象: Table [dbo].[blogs] 脚本日期: 01/19/2009 13:45:22 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[blogs]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[blogs](
[name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[blog] [nvarchar](100) COLLATE Chinese_PRC_CI_AS NULL
)
END
GO
INSERT [dbo].[blogs] ([name], [blog]) VALUES (N'Windie Chai', N'xiaoshatian.cnblogs.com')/
INSERT [dbo].[blogs] ([name], [blog]) VALUES (N'Terry Lee', N'terrylee.cnblogs.com')/
INSERT [dbo].[blogs] ([name], [blog]) VALUES (N'AnyTao', N'anytao.cnblogs.com')/
INSERT [dbo].[blogs] ([name], [blog]) VALUES (N'Anders Liu', N'andersliu.cnblogs.com')/
INSERT [dbo].[blogs] ([name], [blog]) VALUES (N'Kaneboy', N'blog.joycode.com/kaneboy')
接着为InfoPath表单添加此数据连接,方法如下:
在“数据源”面板中点击“管理数据连接”;
在弹出的“数据连接”对话框中点击“添加”;
在弹出的“数据连接向导”对话框中选择“新建连接”和“仅接收数据”,点击“下一步”;
选择“数据库(仅Microsfot SQL Server 或 Microsoft Office Access)”作为数据源,点击“下一步”;
点击“选择数据库”,在弹出的“选择数据源”对话框中选中“+新 SQLServer 连接”,点击“打开”;
输入服务器名称和验证信息,点击“下一步”;
选择“TestDB”,取消勾选“连接到指定表格”,点击“下一步”;
输入文件名(或保留默认值),点击“完成”;
点击“编辑SQL”,在弹出的“编辑SQL”对话框中输入以下SQL查询字符串:
selectdistinctblogfromblogswherename='WindieChai'
点击“测试SQL语句”,显示测试成功后,点击“确定”关闭此对话框;
输入名称“blogs”,勾选“在打开表单时自动检索数据”,点击“完成”,
此时在打开“数据源”面板,将数据源切换为刚才创建“blogs(辅助)”,会看到InfoPath已经导入了SQL查询所返回的架构。
接下来我们添加一个超链接控件并绑定到item及其子元素上,藉此来显示所有的相册,方法如下:
在“数据源”面板中,点击最底层的blog元素旁的下箭头按钮,在其上下文菜单中选择【其他】;
在弹出的“选择控件”对话框中选择“超链接”,点击“确定”,这会在mainifest.xsf文件的设计界面中添加一个用于显示blog地址的超链接控件,并且该控件绑定到了查询结果的blog字段上。
然后回到mainifest.xsf文件的设计界面中,简单的调整一下控件的尺寸,添加一行描述文字,使其看起来如下图所示:
然后按F5键运行,可以看到InfoPath已经正确查询了数据库并且显示出了我的blog地址:
虽然本示例只是绑定了一个字段而已,但完全可以将查询得到的一组数据绑定到可重复的控件上,而且这也并不难实现。具体步骤如下:
在“数据源”面板中,按照之前添加blogs数据连接的方法添加名为bloggers的数据连接,该数据连接除了名称和SQL查询字符串之外,其余设置均和blogs数据连接相同,它的SQL查询字符串是:
select name from blogs
在“数据源”面板中,编辑blogs数据连接,取消勾选“在打开表单时自动检索数据”;
在“工具箱”中拖放一个“下拉列表框”控件到mainifest.xsf设计界面中;
在刚才拖放的下拉列表框控件上点击右键,选择【“下拉列表框”属性】;
在弹出的“下拉列表框属性”对话框中,找到“列表框项”区域,选择“从外部数据源查找值”;
在“数据源”中选择bloggers;
点击“项”右侧的“选择XPath”按钮,在弹出的“选择域或组”对话框中选中最底层的name字段;点击“确定”;
点击“确定”来关闭“下拉列表框属性”对话框。
简单地调整一下版式,使其看起来如下图所示:
按F5键运行,可以看到InfoPath已经正确查询了数据库并且在下拉列表框中列出了数据库中的bloggers:
下面我们来编写几行代码,让这个表单可以从SQL Server中筛选数据。
然后右键单击下拉列表框,选择【编程】【Changed事件】,这会在FormCode.cs中生成一个field2_Changed方法(你的方法名称或许会和我的稍有不同)。
在field2_Changed方法的代码如下:
public void field2_Changed(object sender, XmlEventArgs e)
{
AdoQueryConnection conn
= this.DataSources[“blogs”].QueryConnection as AdoQueryConnection;
conn.Command
= string.Format(“select distinct blog from blogs where name = '{0}'”, e.NewValue);
conn.Execute;
}
下面简单地解释一下这段代码:
首先获取辅助数据源blogs的QueryConnection,并将它转换为实际类型AdoQueryConnection,AdoQueryConnection是数据库型数据源的数据连接类型。
接着结合XmlEventArgs类型参数的NewValue属性来为该AdoQueryConnection生成新的Command。
最后调用AdoQueryConnection的Execute方法执行数据源,来重新获取辅助数据源中的数据。
仍然按F5来预览效果,表单打开后,下拉列表框中便列出了数据库中的几位bloggers,在其中选择了Kaneboy之后,就会显示出他的blog地址。最终效果如下:
本文配套源码
篇2:iOS项目开发实战――获取网页源代码的二进制数据
我在上一篇博客《iOS项目开发实战——iOS网络编程获取网页Html源代码》中讲述了如何获取一个网页的HTML源代码,可以满足一定的需求,但是由于特殊原因,我们想获取的是一个网页的二进制数据,那么应该怎么办呢?
具体实现如下:
(1)创建一个iOS项目,Language选择Swift,然后在ViewController.swift 中写入如下代码:
override func viewDidLoad() { super.viewDidLoad() var data = NSData(contentsOfURL: NSURL(string: www.baidu.com)!) println(data!)}
(2)运行程序,结果如下,能成功获取网页的二进制数据:
,
(3)现在对返回可能为空的情况进行优化,优化代码如下:
override func viewDidLoad() { super.viewDidLoad() var data = NSData(contentsOfURL: NSURL(string: fdsvsdfgvdf)!) if let binarydata = data{ println(data!) }else{ println(未能获取网络数据) }}此时的输出结果就是“未能获取网络数据”。防止系统网络请求失败时出现崩溃。
篇3:iOS项目开发实战――iOS网络编程获取网页Html源代码
如今我们身处互联网的时代,任何一个软件或是App,都会或多或少与网络打交道,并不断发生数据交互,一个没有涉及网络编程的应用会显得比较low,这里我们将会开始使用Swift开发iOS应用,并且主要来实现网络操作方面的功能。
这里的需求是获取某个网页的Html源代码,即从网上获取数据。具体实现如下:
(1)创建一个iOS项目,Language选择Swift。然后在ViewController.swift中实现如下代码:
override func viewDidLoad { super.viewDidLoad() var str = NSString(contentsOfURL: NSURL(string: www.baidu.com)!, encoding: NSUTF8StringEncoding, error: nil) println(str!)//上述返回的是Optional Type可选值,返回值有可能为空,在我确保有返回值的情况下,使用感叹号!获取该值; }
(2)运行程序,在控制台打印结果:(百度主页Html内容太多,我只复制出一部分)
通过以上代码,我们就能从网页上成功获取源代码,
但是由于我在上述注释中关于可选型的问题,我决定优化一下代码,就算网络数据访问不成功或者出现为空有异常等等情况,也能反馈给用户一个提示,优化代码如下,注意对Optional Type为空的操作。
override func viewDidLoad() { super.viewDidLoad()var strHTML = NSString(contentsOfURL: NSURL(string: 111111)!, encoding: NSUTF8StringEncoding, error: nil) if let print = strHTML{println(strHTML!) }else{println(未能获取网络数据) }}
运行以上代码,就能返回”未能获取网络数据“的提示了。就算网络有异常系统也不会崩溃。
篇4:iOS项目开发实战――使用同步请求获取网页源代码
网络请求一般分为同步请求和异步请求,同步请求如果访问时间过长,会造成界面卡死状态,用户体验不是很好,但是请求速度较快的话,也可以考虑使用同步访问。现在先来学习同步访问。
(1)在viewDidLoad()方法中实现如下代码:
override func viewDidLoad() { super.viewDidLoad() var data = NSURLConnection.sendSynchronousRequest(NSURLRequest(URL: NSURL(string: www.baidu.com)!), returningResponse: nil, error: nil) if let d = data{ println(NSString(data: d, encoding: NSUTF8StringEncoding)!)//打印HTML }else{ println(未能获取网络数据) } }
输出结果会成功打印出网页HTML。
(2)打印出Http协议头
在viewDidLoad()中实现以下代码:
override func viewDidLoad() { super.viewDidLoad() var resp:NSURLResponse? var data = NSURLConnection.sendSynchronousRequest(NSURLRequest(URL: NSURL(string: www.baidu.com)!), returningResponse: &resp, error: nil) if let r = resp{ println(r) //打印Http协议头; } }
输出结果如下:
,
(3)打印错误信息
在进行网络操作时,偶尔出现错误是不可避免的,我们可以打印出错误,便于我们查错,打印错误代码如下:
override func viewDidLoad() { super.viewDidLoad() var resp:NSURLResponse? var error:NSError? var data = NSURLConnection.sendSynchronousRequest(NSURLRequest(URL: NSURL(string: www.baidu.com)!), returningResponse: &resp, error: &error) if let e = error{ println(e) //打印Http协议头; } }
测试该代码时,我们可以关闭网络,然后就会出现错误:我进行测试时,出现的错误如下:
。
篇5:iOS开发CocoaPods实战
CocoaPods 是开发 OS X 和 iOS 应用程序的第三方库的依赖管理工具,如果是正常的开发不需要使用的第三方的代码,CocoaPods是不需要的,但是从实际情况上,为了提高开发效率,CocoaPods算是一个必备的开发工具之一,一般如果是简单的引用,CocoaPods的优势不是很明显,当项目用到的第三方应用程序越来越多的时候,CocoaPods可以根据定义的依赖关系,统一管理,第三开源库如果有更新,直接更新Pods文件即可。
CocoaPods基础
CocoaPods是用 Ruby 写的,并由若干个 Ruby 包 (gems) 构成的,所以有的时候我们会看到有人说CocoaPods利用依赖管理构建的依赖管理工具,CocoaPods中用到了Ruby管理工作的包(gem),
CocoaPods应该是iOS最常用最有名的类库管理工具了,绝大部分有名的开源类库,都支持CocoaPods。CocoaPods是用Ruby实现的,要想使用它首先需要有Ruby的环境。OS X系统默认的已经可以运行Ruby了,如果安装CocoaPods只需要在终端中输入一个命令:
sudo gem install cocoapods
CocoaPods是以Ruby gem包的形式被安装的,安装的时候大概需要十分钟左右,需要FQ,如果不FQ的花可以通过淘宝的Ruby镜像访问CocoaPods。如果gem包版本不够新,可以更新一下gem:
gem update
如果需要升级CocoaPods可以使用安装的时候的同样的命令:
sudo gem install cocoapods
篇6:如何利用电话调查获取数据?
香港商业巨子李嘉诚先生认为地产投资项目制胜的关键只有两个字:地段,地段,还是地段,这说明,任何一个项目中关键性的节点往往只有一两个,套用这个理念,在综合调查类竞争情报情报项目中,笔者认为重点是:数据,数据,还是数据。因为最终许多结论都需要数据的佐证和落实,所以,销售数据如何采集则十分重要。
在信息高度发达的今天,从来没有那种工具像电话这样被高频率使用,作为信息传递和沟通的重要介质,电话及其衍生的调研手段已被广泛应用,尤其是情报业务岗位。
本文将通过电话调查的手段――面、线、点三步法,来谈谈销售数据的获得。
一、面――纵观全局,准确把握基本面
以一个七叶皂苷纳的药品项目案例来剖析。通过掌握与项目有关的产品知识、行业状况,切入产品所涉及的相关行业。
获得行业情报
经过2-3天的搜集整理,行业状况基本得到了掌握:
1、项目中的产品是中药提取物,国家政策扶持类品种,医保范围用药;
2、目标调研公司的产品属于原研专利产品,在发改委单独定价,是国家同类产品标准制订时的参考试验品;
3、国内同类产品的生产企业不下20家,有3个品规:冻干粉剂,口服剂,搽剂;
4、冻干粉剂大约占70-80%,冻干粉剂主要的规格有2个:5mg ,10mg,
5、此类产品市场规模大约15个亿,国内重点市场区域;
6、部分重点企业的销售规模和市场位置关系。
情报来源和途径
通过互联网可以发现国内的一些药研所、协会、知名医院的研究部门在网上发布了一些七叶皂苷纳行业的研究报告,由此分析,这个产品应该是一个比较热门的产品,同时得到一个假设:目标公司举足轻重,可能影响行业标准的制订。
由于对一些关键性的行业信息做了准备和分析,为进一步的工作作了铺垫。情报人员先后借不同名称的高等院校管理学院的学生的名义,以撰写毕业论文为由,向多个药研所打电话咨询该产品的市场发展趋势、医生用药习惯、国内市场规模、不同区域市场容量等等。许多相关重点问题都得到了专家给出的极具参考价值的答案。
行业协会也是一个很重要的情报途径,这里往往掌握着业内主要标杆企业的官方数据。在电话咨询过程中,小组成员始终以谦卑的态度,学习的愿望,尊敬长者的语调与对方交流,由于气氛控制的比较融洽,行业中关键企业的销售规模也从这个管道得到部分透露,虽然是一鳞半爪的信息,但往往成为确定销售口径大小的重要依据。
篇7:如何利用电话调查获取数据?
香港商业巨子李嘉诚先生认为地产投资项目制胜的关键只有两个字:地段,地段,还是地段,这说明,任何一个项目中关键性的节点往往只有一两个,套用这个理念,在综合调查类竞争情报情报项目中,笔者认为重点是:数据,数据,还是数据。因为最终许多结论都需要数据的佐证和落实,所以,销售数据如何采集则十分重要。
在信息高度发达的今天,从来没有那种工具像电话这样被高频率使用,作为信息传递和沟通的重要介质,电话及其衍生的调研手段已被广泛应用,尤其是情报业务岗位。
本文将通过电话调查的手段——面、线、点三步法,来谈谈销售数据的获得。
一、面——纵观全局,准确把握基本面
以一个七叶皂苷纳的药品项目案例来剖析。通过掌握与项目有关的产品知识、行业状况,切入产品所涉及的相关行业。
获得行业情报
经过2-3天的搜集整理,行业状况基本得到了掌握:
1、项目中的产品是中药提取物,国家政策扶持类品种,医保范围用药;
2、目标调研公司的产品属于原研专利产品,在发改委单独定价,是国家同类产品标准制订时的参考试验品;
3、国内同类产品的生产企业不下20家,有3个品规:冻干粉剂,口服剂,搽剂;
4、冻干粉剂大约占70-80%,冻干粉剂主要的规格有2个:5mg ,10mg
5、此类产品市场规模大约15个亿,国内重点市场区域;
6、部分重点企业的销售规模和市场位置关系,
情报来源和途径
通过互联网可以发现国内的一些药研所、协会、知名医院的研究部门在网上发布了一些七叶皂苷纳行业的研究报告,由此分析,这个产品应该是一个比较热门的产品,同时得到一个假设:目标公司举足轻重,可能影响行业标准的制订。
由于对一些关键性的行业信息做了准备和分析,为进一步的工作作了铺垫。情报人员先后借不同名称的高等院校管理学院的学生的名义,以撰写毕业论文为由,向多个药研所打电话咨询该产品的市场发展趋势、医生用药习惯、国内市场规模、不同区域市场容量等等。许多相关重点问题都得到了专家给出的极具参考价值的答案。












