我正在尝试使用DB2的命令行处理器。在命令行中使用它时,我输入:db2cmd然后打开第二个窗口,我可以连接到数据库并提交查询。我正在尝试为CLP编写一个包装器,当我访问命令行时,它会在第二个窗口中打开DB2 CLP,我无法弄清楚如何将争论发送到新窗口。这就是我所拥有的:
static void Main(string[] args)
{
var p = new Process();
var info = new ProcessStartInfo();
info.FileName = "db2cmd";
info.RedirectStandardInput = true;
info.UseShellExecute = false;
info.CreateNoWindow = true;
p.StartInfo = info;
p.Start();
using (var sw = p.StandardInput)
{
sw.WriteLine("DB2 CONNECT TO dbname USER \"username\" USING \"password\"");
sw.WriteLine("DB2 SELECT * FROM SPYPRD.CLMDTL FETCH FIRST 10 ROWS ONLY");
}
}
答案 0 :(得分:0)
最好使用C#中的替代接口(例如ADO .net接口),而不是使用CLP。
要使用ADO(或jdbc / odbc等)中的LOAD和EXPORT等命令,如果Db2服务器在Linux / Unix / Windows上运行,则通过存储过程SYSPROC.ADMIN_CMD()调用它们。请注意该存储过程的文档中的详细信息,因为所有文件名都相对于Db2服务器(而不是工作站)。
不确定CLP是否接受密码的stdin重定向 - 您还需要解析stdout,可能是凌乱的。
如果数据库是 local ,那么您可以在CONNECT语句中使用CLP而无需用户ID /密码。如果您希望使用不同的凭据进行连接,请使用runAs来独立于CLP指定凭据,以避免需要向CLP发送参数。
如果数据库是远程的并且在Linux / Unix / Windows上,最好使用CLP之外的替代接口(例如ADO等),或考虑将脚本发送到远程服务器以在Db2-LUW服务器上本地运行作为再次避免密码的必需用户(例如,如果Db2服务器在Linux / Unix / Windows上运行,请使用与psexec或ssh等效的工具)。