2017-05-03 30 views
0

我試圖創建一個函數,將允許一個變量賦值,但我不斷收到一個錯誤:附近有語法錯誤「學生」

private static void DatabaseSelect(string ToBeSelected, string WhichTable, string Equality1, string Equality12) 
{ 
    SqlConnection con = new SqlConnection(@"Connection"); 
    var dataSet = new DataSet(); 
    var cmd = new SqlCommand("SELECT Firstname FROM Student WHERE User_ID = '" + "001" + "'", con); 
    //var cmd = new SqlCommand("SELECT '"+ToBeSelected+"' FROM '"+WhichTable+ "' WHERE '"+Equality1+"' = '"+Equality12+"'", con); 
    var dataAdapter = new SqlDataAdapter { SelectCommand = cmd }; 
    dataAdapter.Fill(dataSet); 
    Console.WriteLine(dataSet.Tables[0].Rows[0][ToBeSelected].ToString()); 
} 

當我用線

var cmd = new SqlCommand("SELECT Firstname FROM Student WHERE User_ID = '" + "001" + "'", con); 

它從理論上講,當變量等於與上面的行相同的字符串時,應該與行相同

var cmd = new SqlCommand("SELECT '"+ToBeSelected+"' FROM '"+WhichTable+ "' WHERE '"+Equality1+"' = '"+Equality12+"'", con); 

但是當我嘗試運行下行時,它會顯示錯誤消息(在行填充dataAdapter):

「System.Data.dll中發生未處理的System.Data.SqlClient.SqlException異常類型的異常 其他信息:「學生」附近的語法錯誤。「

如果我不清楚請說出來。任何幫助將不勝感激,謝謝。

+0

錯誤的標籤。這屬於C++標記。 –

+0

@Nguaial我認爲你的意思是C#。 – George

+0

@George - 我知道這不是C. Console.writeln()語句看起來不像C++。它必須是C#。我是C#文盲。抱歉。 (OO) –

回答

1

我看到一些問題,你的MySQL語法

SELECT '"+ToBeSelected+"' FROM '"+WhichTable+ "' WHERE '"+Equality1+"' = '"+Equality12+"'" 

應轉化到一個MySQL聲明:

SELECT 'ColumnName' FROM 'TableName' WHERE 'ColumnName2' = 'SomeValue'" 

我看到的第一個問題是所有的單引號..列名稱,表格名稱應該被「ticks」(1左邊的按鈕)包圍而不是單引號。

我會從那裏開始,現在我正在閱讀更多的代碼。

+0

奇怪的是,刪除單引號實際上解決了這個問題。我出於某種原因認爲必須使用這些單引號,並且我在其他語句中使用了它們,但我想不是這種情況。謝謝。 –

+0

'SomeValue'絕對是一個有效的陳述,那是因爲你會說SomeValue是一個字符串。但是對於列名和表名,通常容易混淆單引號的「勾號」。在列名和表名的情況下,MySQL不會讓你做單引號。但是「Ticks」或Nothing都是允許的。 – DarbyM