2016-04-03 91 views
-2

有没有办法给这行代码添加一个SQL Where子句?添加Where子句OleDbCommand

对不起,应该把更多的细节放到这个问题上。这行代码连接到SQL数据库并将选择语句导出到csv文件。如果我像通常在SQL查询中那样放置where子句,它会给我提供错误,在查询表达式中,在运算符without()中'ID ='1'IN''{ODBC:Driver = {SQL Server Native Client 10.0 }。

dpConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & ExportDir & ";" & _ 
     "Extended Properties=""Text;HDR=YES;""" 

    Dim dpTextConnection As New System.Data.OleDb.OleDbConnection(dpConnectionString) 
    dpTextConnection.Open() 

    Try 
     Dim dpTextCommand As New System.Data.OleDb.OleDbCommand("SELECT * INTO ["test.txt"] FROM [csv_SavedCalData] WHERE ID = '1' IN '' [ODBC;Driver={SQL Server Native Client 10.0};Server=" & sqlServer & ";Database=" & sqlDatabase & ";UID=" & sqlUN & ";PWD=" & sqlPWD & ";Trusted_Connection=yes;]", dpTextConnection) 
     dpTextCommand.CommandType = CommandType.Text 
     dpTextCommand.ExecuteNonQuery() 
     dpTextCommand.Dispose() 
     dpTextConnection.Close() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
+2

这是一团糟。使用SQL参数,第二个参数应该是OleDbConnection,而不是连接字符串。 – Plutonix

+0

嗯......我想知道如果我将'My.Settings.txtServer'设置为'A; DROP TABLE csv_SavedCalData;'... _-我甚至不知道如果这是适当的SQL:] _会发生什么,但它可以被任何一种方式利用。所以,参数。 –

+0

我编辑了我原来的帖子。 – Steve

回答

0

说到SQL和“SQL Server Native Client 11.0”,我假设你的问题是关于将SQL服务器表格的内容导出到CSV文件。你的代码不起作用,你不能从SQL服务器表中选择一个文本文件。有很多方法可以解决VB.Net中的问题。一个简单的方法是从codeplex使用Linq到CSV。或者对于简单的模式,您可以直接使用文件写入功能。即:使用Northwind示例数据库,从Customers表输出几个字段:

Sub Main 
    Using con = New SqlConnection("server=.\SQLexpress;trusted_connection=yes;database=Northwind") 
     Using cmd = New SqlCommand("Select CustomerID,CompanyName,ContactName,ContactTitle,Phone,Fax,Address,City,PostalCode,Region,Country from Customers", con) 
      Using sw = New StreamWriter("c:\Temp\MyCustomerData.csv", False, Encoding.Default) 
       sw.WriteLine("CustomerID,CompanyName,ContactName,ContactTitle,Phone,Fax,Address,City,PostalCode,Region,Country") 

       con.Open() 
       Dim rdr = cmd.ExecuteReader() 
       While rdr.Read() 
        sw.WriteLine("""{0}"",""{1}"",""{2}"",""{3}"",""{4}"",""{5}"",""{6}"",""{7}"",""{8}"",""{9}"",""{10}""", _ 
         rdr("CustomerID"), rdr("CompanyName"), rdr("ContactName"), rdr("ContactTitle"), rdr("Phone"), _ 
         rdr("Fax"), rdr("Address"), rdr("City"), rdr("PostalCode"), rdr("Region"), rdr("Country")) 
       End While 
      End Using 
     End Using 
    End Using 
End Sub 
+0

非常感谢。这对我来说非常合适。 – Steve

0

你包括它,你包括你的SELECT和FROM子句以同样的方式...字符串中,在正确的位置

语法示例:(从w3schools

SELECT column_name(s) 
FROM table_name 
WHERE column_name IN (value1,value2,...); 

代码样品:

"SELECT * INTO [" & certExportFile & "] FROM [csv_SavedCalData] WHERE [ColumnName] IN '' 

而且,正如Plutonix所说,这是一团糟。我建议reading up on SQL parameters in VB.NET

+0

我编辑了我原来的帖子。这不起作用。 – Steve