我有一个Dataman高速ID扫描仪,我需要它与SQL Server2008数据库通信。它有几种不同的通信方式,但唯一不是工业协议的是Telnet。如何让数据库通过Telnet与扫描仪通信?
如果你有任何其他关于如何与它沟通的建议,我也很想听听。
发布于 2012-04-24 06:37:53
您需要编写一个使用Telnet与扫描仪通信的应用程序,然后可以相应地从数据库进行读/写操作。
例如,您可以使用C# (使用Visual Studio)编写一些内容,并使用以下库进行远程登录访问:
http://www.codeproject.com/Articles/19071/Quick-tool-A-minimalistic-Telnet-library
如果你真的,真的需要让数据库来执行代码,那么你可以用C#编写一些代码,然后在SQL Server2008中使用CLR integration来获取这些代码。但我建议将您的应用程序与数据库分开(为了便于开发和测试)。
发布于 2012-04-25 01:58:21
您可以在SQLCLR stored procedure中创建远程登录客户端,然后从常规TSQL存储过程调用CLR过程。SQLCLR并不是很常用,但它比许多人想象的更健壮,我与使用它取得了良好成功的团队进行了交谈。
要记住的一件事是,如果您采用SQLCLR方法,您将编写与您决定采纳其他答案的建议并实现将数据推送到SQL server中的外部实用程序时所编写的相同的.NET代码。惟一的区别是,使用SQLCLR,存储过程可以主动触发telnet交互。
SQLCLR存储过程需要一些特殊的技术,但Visual Studio数据库项目使创建存储过程变得非常容易。
发布于 2012-04-25 01:19:17
SQL Server本身不能做到这一点,所以无论如何您都必须走出您的舒适区。同样,您所说的“在服务器上”是指在运行SQL server的同一物理服务器上,还是指“在SQL Server实例内”?
您当然可以在存储过程中从xp_cmdshell调用本地PowerShell脚本,或者如果您需要将其作为SQL Server代理作业步骤的一部分(如果您没有运行没有代理的Express Edition ),也可以将其作为SQL Server代理作业步骤的一部分。下面是一个不需要精通PowerShell就能适应您的需求的PowerShell脚本:
Automating Telnet with PowerShell
为了从存储过程中调用它,您首先需要确保启用了xp_cmdshell:
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure 'xp_cmdshell', 1;
EXEC sp_configure 'show advanced options', 0;
RECONFIGURE WITH OVERRIDE;
GO需要注意的是,许多人认为暴露xp_cmdshell是一种类似禽流感的流行病。对我来说,这一切都是为了控制对机器的访问,而不是为了满足您的业务需求而控制机器能做什么和不能做什么。
下面是一个使用您发送到xp_cmdhsell的输出的快速示例。这只是一个标准的命令行调用,因此您必须调整它以调用PowerShell脚本,但它的工作原理应该大致相同:
CREATE TABLE #tmp(i INT IDENTITY(1,1), x VARCHAR(2048));
INSERT #tmp(x) EXEC master..xp_cmdshell 'dir C:\Users\';
SELECT x FROM #tmp ORDER BY i;
DROP TABLE #tmp;结果:
Volume in drive C has no label.
Volume Serial Number is 50D3-008B
NULL
Directory of C:\Users
NULL
01/10/2012 09:20 AM <DIR> .
01/10/2012 09:20 AM <DIR> ..
01/19/2011 11:54 PM 1,444 SomeFile.txt
.... other files...
3 File(s) 28,918,500 bytes
18 Dir(s) 19,367,292,416 bytes free
NULL但是,一旦您花了一个多小时来处理它以使其工作,我认为您最好编写一个应用程序,该应用程序要么作为服务运行,要么以一定的时间间隔运行,检查队列表中是否有新的telnet处理,完成工作,然后将结果写入SQL Server。你的RDBMS不应该被当做一个批处理脚本主机。
https://stackoverflow.com/questions/10289246
复制相似问题