首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SQL Server 2008中,如何通过Telnet连接创建和发送/接收数据?

在SQL Server 2008中,如何通过Telnet连接创建和发送/接收数据?
EN

Stack Overflow用户
提问于 2012-04-24 06:33:31
回答 3查看 1.3K关注 0票数 2

我有一个Dataman高速ID扫描仪,我需要它与SQL Server2008数据库通信。它有几种不同的通信方式,但唯一不是工业协议的是Telnet。如何让数据库通过Telnet与扫描仪通信?

如果你有任何其他关于如何与它沟通的建议,我也很想听听。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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来获取这些代码。但我建议将您的应用程序与数据库分开(为了便于开发和测试)。

票数 3
EN

Stack Overflow用户

发布于 2012-04-25 01:58:21

您可以在SQLCLR stored procedure中创建远程登录客户端,然后从常规TSQL存储过程调用CLR过程。SQLCLR并不是很常用,但它比许多人想象的更健壮,我与使用它取得了良好成功的团队进行了交谈。

要记住的一件事是,如果您采用SQLCLR方法,您将编写与您决定采纳其他答案的建议并实现将数据推送到SQL server中的外部实用程序时所编写的相同的.NET代码。惟一的区别是,使用SQLCLR,存储过程可以主动触发telnet交互。

SQLCLR存储过程需要一些特殊的技术,但Visual Studio数据库项目使创建存储过程变得非常容易。

票数 1
EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
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脚本,但它的工作原理应该大致相同:

代码语言:javascript
复制
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;

结果:

代码语言:javascript
复制
 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不应该被当做一个批处理脚本主机。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10289246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档