关于 xp_cmdshell 执行 c#开发的exe程序, 请帮忙!

问题描述

具体情况是这样的。数据库sqlserver2000sp4开发软件vs2008我用winform+rdlc(本地打印)写了一套模板打印的东东,然后通过数据库触发器启动调用,(当有新数据写入时自动执行)c#具体处理过程大致为被调用-查询需要打印数据-按照rdlc排版模式打印。为了让xp_cmdshell能够调用我已经把我能理解地方的需要用户交互的都关闭了。现在的情况是:调试模式下程序可以正常运行,打印功能正常。可以打印出单。但当通过sqlserver执行xp_cmdshell调用时程序能正常运行,打印功能也过了,但是无法打出单子来。请问:1.通过xp_cmdshell调用包含rdlc的程序时有什么需要注意的,或更改的。2.我这种思路是否行的通,是否有别的更好的思路。我就是不想弄个定时器不停的轮询数据库是否有新的符合条件的数据出现。附上部分代码:privatevoidprintSaleDtl(){try{StringSaleFormNo;StringID;DataTabledtTableInfo;DataTabledtSaleDetail;this.pdaReceiveTableAdapter.Fill(this.GSDCYPOSDataSet.PDAReceive);if(0<this.GSDCYPOSDataSet.PDAReceive.Rows.Count){SaleFormNo=this.GSDCYPOSDataSet.PDAReceive.Rows[0]["SaleFormNo"].ToString();ID=this.GSDCYPOSDataSet.PDAReceive.Rows[0]["ID"].ToString();//MessageBox.Show(SaleFormNo);//TODO:这行代码将数据加载到表“GSDCYPOSDataSet.dtTableInfo”中。您可以根据需要移动或移除它。this.dtTableInfoTableAdapter.Fill(this.GSDCYPOSDataSet.dtTableInfo,SaleFormNo);//TODO:这行代码将数据加载到表“GSDCYPOSDataSet.dtSaleDetail”中。您可以根据需要移动或移除它。this.dtSaleDetailTableAdapter.Fill(this.GSDCYPOSDataSet.dtSaleDetail,SaleFormNo);dtTableInfo=this.GSDCYPOSDataSet.Tables["dtTableInfo"];dtSaleDetail=this.GSDCYPOSDataSet.Tables["dtSaleDetail"];PrintRDLCprintRDLC=newPrintRDLC();printRDLC.Run(dtTableInfo,dtSaleDetail);_Conn=_DB.getCon();_Conn.Open();_Command.Connection=_Conn;_Command.CommandText="UPDATEPDAReceiveWXSETProcessFlag=1WHEREID="+ID;_Command.ExecuteNonQuery();_Command.CommandText="UPDATESaleformtempSETPrePrintTimes=PrePrintTimes+1WHEREsaleformno='"+SaleFormNo+"'";_Command.ExecuteNonQuery();_Conn.Close();}}catch(Exceptionex){}finally{}}privatevoidFormMain_Load(objectsender,EventArgse){File.AppendAllText(@"D:testR1.txt","2");this.printSaleDtl();File.AppendAllText(@"D:testR1.txt","3");Application.Exit();File.AppendAllText(@"D:testR1.txt","4");}

解决方案

解决方案二:
1.服务器运行在特定的Session0区域,而桌面在session1,不能通讯。2.SQLServer本身就支持c#、vb.net写存储过程,不需要通过t-sql来调用xp_cmdshell。3.大部分按照教科书而配置SQLServer安全行规则的人,都把xp_cmdshell从系统中去掉了。因为这可以让远程客户端随便调用服务器上任意exe,这个存储过程是服务器安全的大敌。
解决方案三:
引用1楼sp1234的回复:

1.服务器运行在特定的Session0区域,而桌面在session1,不能通讯。2.SQLServer本身就支持c#、vb.net写存储过程,不需要通过t-sql来调用xp_cmdshell。3.大部分按照教科书而配置SQLServer安全行规则的人,都把xp_cmdshell从系统中去掉了。因为这可以让远程客户端随便调用服务器上任意exe,这个存储过程是服务器安全的大敌。

关键点在于我现在是用rdlc本地报表格式化的打印布局,请问sqlserver2000版本支持通过数据库的外部存储过程实现这样的功能么。

时间: 2024-07-28 12:48:17

关于 xp_cmdshell 执行 c#开发的exe程序, 请帮忙!的相关文章

关于在页面上加载exe程序的问题

问题描述 我有个vc开发的exe程序,执行之后,会读剪贴板的数据,进行操作后,再重新写入到剪切板.现在的问题是,如何把这个exe作为一个功能按钮,添加到jsp的页面上,用户在网络上登录服务器,可以看到或加载这个按钮,在自己的机器上执行剪切板的操作最简单安全的实现方式是什么?初学者,请详细介绍,非常感谢!

一个c#开发的win程序在Xp上可以执行,在2003上不执行,怎么回事

问题描述 一个c#开发的win程序在Xp上可以执行,在2003上不执行,怎么回事[2009-2-1810:34:35]运行程序D:ProgramFilesGuanTaoFetionFX.exe出现错误!System.IO.FileLoadException:Filename:'System.Data,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089'--->System.Runtime.InteropServices.

Windows编程:终止可执行(exe)程序 代码(C++)

终止可执行(exe)程序, 首先遍历进程, 找到进程名称对于的进程ID号, 然后根据进程ID, 终止进程. 示例代码: 包括遍历进程代码, 和关闭代码. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <string> #include <map> #include <windows.h> #inc

Windows编程:启动可执行(exe)程序 代码(C++)

通过输入程序位置启动可执行(exe)程序, 使用windows的CreateProcess()函数, 即可. 示例是调用预先生产的可执行(exe)程序. 代码: /* * main.cpp * * Created on: 2014.06.08 * Author: Spike */ /*vs 2012*/ #include <iostream> #include <windows.h> using namespace std; bool startProcess (const std

java-操作数据库的.exe程序,可以批量执行sql脚本文件

问题描述 操作数据库的.exe程序,可以批量执行sql脚本文件 求大神帮忙啊~用java可以做这个东西吗?完全没有思路啊,要求是可以操作局域网内的另一台电脑上的mysql数据库 解决方案 如果有访问权限的话,直接运行Runtime.getRuntime().exec("远程IP文件路径exe文件");如果没有,那可以先用java进行telnet连接到那台机器,然后调用exe程序,再不行就只能在远程机器上写webservice服务然后调用了. 解决方案二: 批量执行SQL脚本 解决方案三

能否实现在右键菜单添加项用于通过cmd执行某exe程序的某个功能

问题描述 能否实现在右键菜单添加项用于通过cmd执行某exe程序的某个功能 最主要的是不知道怎么在cmd里执行某exe文件的某功能. 比如: 现在有一个exe程序,是一个桌面提醒程序, 我想用cmd调用这个程序的新建桌面提醒功能,请问应该怎么做? 会有大神帮忙解答吗? 解决方案 你既然注册了右键菜单,那么你的程序就可以响应菜单项,然后用ShellExecute()去调用exe程序就可以了 解决方案二: 前提是你的那个exe得支持执行其中一个功能才行 解决方案三: 可以,具体做法参考:http:/

在Visual Studio上开发Node.js程序

原文:在Visual Studio上开发Node.js程序 [题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio(NTVS),虽然现在仅发布了1.0 Alpha版本,但使用起来已经非常方便.而且,其开发团队与Python Tools for Visual Studio(PTVS)是同一个,而PTVS就是Visual Studio 2013中要创建自带

在Visual Studio中使用MonoTouch开发iOS应用程序(上):环境配置

前段时间在工作机上装了Mac OS X,这主要是因为我最近需要开发iPhone应用程序.虽然Xcode,Objective C一定是开发iOS应用程序的主流,但是经过一番考虑,我还是决定尝试一下使用MonoTouch进行开发. MonoTouch是Novell公司基于开源的Mono平 台构建的一套iOS开发环境,使用MonoDevelop作为代码编写工具.不过目前的MonoDevelop较之Visual Studio可谓"萤火之光比皓月之明",甚至还有无法输入中文的低级问题.因此,至今

调用exe-C#调用EXE程序,欢迎界面显示的问题,Winform

问题描述 C#调用EXE程序,欢迎界面显示的问题,Winform C#自己开发的程序,需要调用一个外部的EXE程序.该程序是Release版本,一个单独的程序,有自己的欢迎界面.我调用这个程序的时候,这个程序的欢迎界面的图片总是显示不出来,其他的能显示,比如登陆用户,密码的控件都能显示出来,但是就是欢迎界面的图片不显示,显示的是一个白的空图片. 代码如下所示; Process p; private void pictureBox3_Click(object sender, EventArgs e