2017-05-03 4 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 'が発生しました 追加情報: 'Student'の近くの構文が間違っています。 "

私が不明な場合は、どうかお伝えください。お手数ですが、ありがとうございます。

+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'" 

私が見ている最初の問題は、すべての単一引用符..です列を名前、テーブル名はシングルクォートではなく、 "ティック"(1の左にあるボタン)で囲む必要があります。

私はそこから始めたいと思います。

+0

不思議なことに、一重引用符を削除すると、実際にこの問題が修正されました。私は何らかの理由でこれらの単一引用符を使用しなければならないと考えていましたが、私が作ったそれ以外の声明でそれらを使用しましたが、そうではありません。ありがとうございました。 –

+0

SomeValueは間違いなく有効なステートメントです.StevalはSomeValueが文字列であると言っているからです。カラム名とテーブル名に関しては、一重引用符の「ティック」を混同することはしばしば簡単です。列名とテーブル名の場合、MySQLはシングルクォートを許可しません。 "Ticks"またはNothingは両方とも許可されます。 – DarbyM