2016-12-18 6 views
0

MySQLのクエリMySQLのワークベンチでC#

SET @rownum=-1; 
SELECT @rownum:[email protected]+1 AS row_num 
FROM someTable 

から変数をMySQLのクエリを使用することROW_NUMの値が0で始まり、行ごとに1だけ上昇テーブルを返す:

+---------+ 
| row_num | 
+---------+ 
| 0  | 
+---------+ 
| 1  | 
+---------+ 
| 2  | 

    .... 

私はC#から同じクエリを実行しようとしています。

string connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + 
    "UID=" + uid + ";" + "PASSWORD=" + password + ";" + "ALLOW USER VARIABLES = true;"; 

MySqlConnection connection = new MySqlConnection(connectionString); 
MySqlCommand command; 
MySqlDataAdapter adapter = new MySqlDataAdapter(); 

connection.Open(); 
command = connection.CreateCommand(); 

command.CommandText = "SELECT @rownum := @rownum + 1 AS row_num FROM someTable"; 
command.Parameters.Add("@rownum", MySqlDbType.Int32); 
command.Parameters["@rownum"].Value = -1; 
adapter.SelectCommand = command; 

DataTable table = new DataTable(); 
adapter.Fill(table); 

上記の結果の最後の行以下MySqlException

であなたのSQL構文でエラーが発生しています。 は 近くを使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認してください「:= -1 + 1 ROW_NUM AS someTableから」

なぜクエリは、C#からは動作しませんか?

+0

なぜ ':' '@ rownum'の後に? –

+0

元のクエリのように@rownumを宣言しないでください。 – Mihai

+0

@Ehsan:becasue:=はMySQLの代入演算子です。 MySQLクエリで '@rownum = @rownun + 1'を使用すると、比較-1 =(-1 + 1)となり、各行はrow_numの値が0になります –

答えて

0

はパラメータのためのこれらの行を削除します。

command.Parameters.Add("@rownum", MySqlDbType.Int32); 
command.Parameters["@rownum"].Value = -1; 

そして、このクエリを使用します。

command.CommandText = "SET @rownum=-1;SELECT @rownum := @rownum + 1 AS row_num FROM someTable"; 

をあなたがやっている方法は、「@rownumは」に置き換えられます両方で-1。だから、このようなクエリで終わる:

​​
+0

実行は、MySQLのエンジンで行われます。あなたのstring.Formatは、私のコードが使用しているのと全く同じCommandTextを返し、結果も同じエラーになります。 –

+0

本当ですか?私はすぐに自分の投稿を編集しました。はい、最初のものが間違っていたので、あなたが最新の編集を使用していることを確認してください。あなたは自分の答えを編集する前にそれを選んだのでしょう。 – CodingYoshi

+0

私は両方を試しました(編集前と後)。どちらも同じエラーになります –

関連する問題