2017-03-11 60 views
0

我正在尝试使用VB.NET代码使用SQLCMD(SQL命令提示符)执行SQL查询。我使用Windows Shell脚本连接到服务器并执行查询并将结果集存储在Excel文件中。下面是我的代码不工作。 以下代码中缺少的是什么?如何使用VB.NET运行SQLCMD脚本

Dim Command 
    Dim ServerName As String 
    Dim DatabaseName As String 
    Dim QueryToExceute As String 

    ServerName = "IN2175533W1" 
    DatabaseName = "C:\FileDirectory\XYZ.mdf" 
    QueryToExceute = "Select * from Table_Name" 

    Command = """C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn\SQLCMD.EXE"" " & "-S " & ServerName & " -d " & DatabaseName & " -Q " & QueryToExceute & " -s" & "," & " -o" & "C:\TestQuery.xlsx" 

    Dim wsh As Object = CreateObject("WScript.Shell") 

    'Using WScript to execute Stuff 
    wsh = CreateObject("WScript.Shell") 
    wsh.Run(Command) 

我尝试过程类以及哪个不工作。下面是我的代码:

Dim Command 
    Dim ServerName As String 
    Dim DatabaseName As String 
    Dim QueryToExceute As String 

    ServerName = "IN2175533W1" 
    DatabaseName = "C:\ABC\XYZ.mdf" 
    QueryToExceute = "Select * from Quality" 


     Dim Process = New Process() 
    Process.StartInfo.UseShellExecute = False 
    Process.StartInfo.RedirectStandardOutput = True 
    Process.StartInfo.RedirectStandardError = True 
    Process.StartInfo.CreateNoWindow = True 
    Process.StartInfo.FileName = "SQLCMD.EXE" 
    Process.StartInfo.Arguments = "-S " & ServerName & "-d" & DatabaseName & "-Q" & QueryToExceute & "-s" & "," & "-o" & "C:\Testing1.xlsx" 

    Process.StartInfo.WorkingDirectory = "C:\users\rahul.wankhade\Desktop" 
    Process.Start() 
    Process.WaitForExit() 
+0

SQLCMD是一个实用并通过自身的应用程序。你应该使用'Process'类 – Rahul

+0

@Rahul ....我尝试了进程类,但无法执行查询。 – rahul16590

回答

1

这是我测试,注意我改变了服务器,数据库和查询以匹配我的机器。我通过VS2015使用字符串插值。

Module Module1 
    Sub Main() 
     Dim ServerName As String = "KARENS-PC" 
     Dim DatabaseName As String = "C:\Data\NORTHWND.MDF" 
     Dim DoubleQuote As String = Chr(34) 
     Dim QueryToExceute As String = 
      $"{DoubleQuote}SELECT CompanyName,ContactName FROM Customers{DoubleQuote}" 
     Dim ExportFileName As String = 
      $"{DoubleQuote}C:\Data\MyDataFromSqlServer.csv{DoubleQuote}" 

     Dim Process = New Process() 
     Process.StartInfo.UseShellExecute = False 
     Process.StartInfo.RedirectStandardOutput = True 
     Process.StartInfo.RedirectStandardError = True 
     Process.StartInfo.CreateNoWindow = True 
     Process.StartInfo.FileName = "SQLCMD.EXE" 
     Process.StartInfo.Arguments = 
      $"-S {ServerName} -d {DatabaseName} -E -Q {QueryToExceute} -o {ExportFileName} -h-1 -s"","" -w 700" 
     Process.StartInfo.WorkingDirectory = "C:\Data" 
     Process.Start() 
     Process.WaitForExit() 
     Console.WriteLine("Done") 
     Console.ReadLine() 

    End Sub 
End Module 

常规方式,而不VS2015

Module Module1 
    Sub Main() 
     Dim ServerName As String = "KARENS-PC" 
     Dim DatabaseName As String = "NorthWindAzure" 
     Dim DoubleQuote As String = Chr(34) 
     Dim QueryToExceute As String = 
      DoubleQuote & "SELECT CompanyName,ContactName FROM Customers" & DoubleQuote 
     Dim ExportFileName As String = 
      DoubleQuote & "C:\Data\MyDataFromSqlServer.csv" & DoubleQuote 

     Dim Process = New Process() 
     Process.StartInfo.UseShellExecute = False 
     Process.StartInfo.RedirectStandardOutput = True 
     Process.StartInfo.RedirectStandardError = True 
     Process.StartInfo.CreateNoWindow = True 
     Process.StartInfo.FileName = "SQLCMD.EXE" 
     Process.StartInfo.Arguments = 
      "-S " & ServerName & " -d " & DatabaseName & " -E -Q " & 
      QueryToExceute & " -o " & ExportFileName & " -h-1 -s"","" -w 700" 
     Process.StartInfo.WorkingDirectory = "C:\Data" 

     Process.Start() 
     Process.WaitForExit() 
     Console.WriteLine("Done") 
     Console.ReadLine() 
    End Sub 
End Module 
+0

...非常感谢。我使用的是Visual Studio 2012,其中字符串插值不起作用....您是否可以纠正您的代码,以便在Visual Studio 2012中工作? – rahul16590

+0

这就是为什么指出版本是个好主意: - )我编辑我的帖子与第二版VS2012, –

+0

非常感谢....其工作 – rahul16590