2016-04-03 85 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