1

私はMySQLを使用しています 。mysqlテーブルがあります。
そして、行番号のあるすべてのレコードを選択したいと思います。
このために私はこのSQLコマンドを使用します。

SELECT @row := @row + 1 as row, t.* FROM t_persons t, (SELECT @row := 0) r

しかし、コマンドを実行して、以下のようにデータテーブルにデータをロードしようとすると

DataTable dt = new DataTable();
command.CommandText = sql;
adapter.SelectCommand = command;
adapter.Fill(dt);

コマンドの実行中に発生した致命的なエラーのようなエラーが発生します。
しかし、phpmyadminでこのコマンドを試してみると、正常に機能します。だから何が問題なのか。そしてそれを解決する方法。ありがとう...

4

2 に答える 2

3

これは、実際には MySQL のエラーではなく、C# のエラーです。C# は @ を認識しており、パラメーター化されたクエリを使用することを前提としています。

追加

;Allow User Variables=True

あなたの接続文字列にそれを修正します。

ここにあります.NET MySqlCommand で MySql ユーザー定義変数を使用するにはどうすればよいですか?

于 2012-11-30T21:34:14.687 に答える
-1

クエリ内の MySQL 変数の完全に有効な MySQL 実装のように見えます。select @row := 0 を「r」エイリアスとして事前に宣言します。問題は、予約されている可能性のある最終的な列名「行」を呼び出していることだと思います。笑顔のために、次のように変更します。

@row := @row + 1 as myRow

または...変数を@rowから@varRow(変数行)に変更します...または両方の組み合わせ...

@varRow := @varRow +1 as myRow

誰が答えに反対票を投じたのかわかりませんが、あなたがしていることはMySQLではごく普通のことです。ここs/oに投稿された多くの回答からわかるように、私は何度もそれを行いました。
次に、最初にテーブルで列を取得しようとし、次に @vars 列を取得しようとします... @var を書き込もうとする前に有効なレコードエントリを取得するためにエンジン内に何かがあるかどうかはわかりません...

SELECT 
      t.*,
      @varRow := @varRow + 1 as myRow
   FROM 
      t_persons t, 
      (SELECT @varRow := 0) r
于 2012-05-29T13:14:47.087 に答える