2012-08-28 77 views
-1

我聲明瞭一個基本上是指示符列表的字符串,其中yy是alpha,xxxx是數字。更改字符串聲明時出現奇數錯誤

string sMyString = "('yy-xxxx','yy-xxxx','yy-xxxx','yy-xxxx','yy-xxxx','yy-xxxx')"; 

if(File.Exists(sFileLocation + sFileName)) 
{ 
    txtRunning.Text = "Starting db copy"; 
    File.Copy(sFileLocation + sFileName, sFileName, true); 
    File.Copy(sDbLocation + "clipper.dbf", "clipper.dbf", true); 
    File.Copy(sDbLocation + "clipper.dbt", "clipper.dbt", true); 

    txtRunning.Text = "Starting datatable population"; 
    string connString = @"Provider=VFPOLEDB;Data source=.\clipper.dbf"; 
    string mySelectQuery = "SELECT UPPER(TRIM(field1))," + 
     " UPPER(TRIM(field2)), UPPER(TRIM(field3)), UPPER(TRIM(field4))" + 
     " FROM `clipper` WHERE condition1 AND field1 IN " + sMyString + 
     " ORDER BY field2;"; 

    DataTable dtClipper = new DataTable(); 
    DataTable dtNotFound = new DataTable(); 
    DataTable dTable = new DataTable(); 

    OleDbConnection conn = new OleDbConnection(connString); 
    OleDbDataAdapter adapter = new OleDbDataAdapter(); 
    adapter.SelectCommand = new OleDbCommand(mySelectQuery, conn); 
    adapter.Fill(dtClipper); 
} 

如果我拿出parens,dataadapter.fill命令中出現錯誤,說該函數不存在。如果將其更改爲字符串文字(無論是否包含父元素),我會得到同樣的錯誤。如果我把它保留下來,用parens和單引號,它運行得很好。

我需要它只是列表,沒有單引號,因爲我將它們添加到字典中用作發生次數計數器。我錯過了什麼?

+3

請包括實際產生錯誤的相關代碼行。即,'dataadapter.fill()' – gilly3

+0

@ gilly3 - 增加。如果我離開所有單引號和parens,它就會起作用,只要我將它們中的任何一個引出來,即使將它聲明爲字符串文字,我也會得到該錯誤。 – JohnP

+0

我看不出爲什麼你想要拿出單引號或parens。假設他們不需要的基礎是什麼?看來這兩者似乎完全合適。 – Servy

回答

2

該錯誤是因爲您使用該字符串來運行SQL查詢,並且沒有引號和parens,它是無效的sql。

爲了使SQL查詢正常工作,您需要保留引號和參數。如果你需要作爲普通字符串訪問列表,然後將其存儲爲列表。

List<string> myStrings = new List<String> { 
    "yy-xxxx", 
    "yy-xxxx", 
    "yy-xxxx", 
    "yy-xxxx", 
    "yy-xxxx", 
    "yy-xxxx" 
}; 
string myStringsForSQL = string.Join(myStrings, "','"); 

string mySelectQuery = "SELECT UPPER(TRIM(field1)), " + 
    "UPPER(TRIM(field2)), UPPER(TRIM(field3)), UPPER(TRIM(field4)) " + 
    "FROM `clipper` WHERE condition1 AND field1 IN ('" + myStringsForSQL + "') " + 
    "ORDER BY field2;"; 
+0

是的,我注意到在後續的編輯。我在sql版本中添加了parens而不是字符串,當我從它創建我的字典時,我只是使用正則表達式來擺脫單引號。 : - /雖然,我也喜歡你的解決方案。我還在學習,列表沒有出現在我身上。 – JohnP