1

MySQL からいくつかの値 (列を行として、またはその逆) を取得して、に表示しようとしていますDataGridView。MySQLで実行する必要があるこのコードがあります-

SET @header = CONCAT('SELECT \'sl\', ',
    (SELECT GROUP_CONCAT(CONCAT(' \'', sl, '\'')) FROM cars where sl=1),
    ' LIMIT 0, 0');

SET @a = -1;
SET @line1 = CONCAT(
    'SELECT \'Plate\',',
    (
        SELECT GROUP_CONCAT(
            CONCAT(' (SELECT Plate FROM cars LIMIT ',
                @a:=@a+1,
                ', 1)')
            )
        FROM cars where sl=1
    ));

SET @a := -1;
SET @line2 = CONCAT(
    'SELECT \'Brand\',',
    (
        SELECT GROUP_CONCAT(
            CONCAT(' (SELECT Brand FROM cars LIMIT ',
                @a:=@a+1,
                ', 1)')
            )
        FROM cars where sl=1
    ));

SET @query = CONCAT('(',
    @header,
    ') UNION (',
    @line1,
    ') UNION (',
    @line2,
    ')'
);

PREPARE my_query FROM @query;
EXECUTE my_query;

ExecuteNonQueryこのコードをすべて文字列に保存して、コマンドを介してこれを実行しようとすると、MySQLExceptionエラーが発生します-Fatal error encountered during command execution.

コードを別々の文字列に分割しようとしましたが、同じエラーが発生しました。も増やしてみましたが、CommandTimeoutうまくいきませんでした。

これらのステートメントを実行する特別な方法はありますか? それともコードに問題がありますか?これは、コマンド ライン クライアントでエラーなしで効果的に実行されることに注意してください。

PS: コードは Q# 3288014 から使用されています - Anax に感謝します

編集:

同じことの回避策を見つけましたが、すべてVBで行われました。

Dim sa() As String = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
Dim sa2() As String = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
connect()
Dim reader As MySqlDataReader
execstr = "describe cars"
Dim cmd As New MySqlCommand(execstr, connection)
reader = cmd.ExecuteReader()
Dim i As Integer = 0
While reader.Read
    sa(i) = reader.GetString(0)
    i = i + 1
End While
reader.Close()
connection.Close()
connect()
execstr = "select*from cars where sl=1;"
Dim cmd2 As New MySqlCommand(execstr, connection)
reader = cmd2.ExecuteReader()
While reader.Read
   For i1 As Integer = 0 To sa.Length - 1
        sa2(i1) = reader.GetString(i1)
   Next
End While
reader.Close()
connection.Close()
reader.Close()
connection.Close()
Dim t As New DataTable
t.Columns.Add(sa(0))
t.Columns.Add(sa2(0))
For y As Integer = 1 To sa.Length - 1
    t.Rows.Add(sa(y), sa2(y))
Next
DataGridView1.DataSource = t

MySQL では文字列ですべてを実行できるのに、VB では非常に多くのコードを必要とするのは面白いことです。

4

1 に答える 1

0

ExecuteNonQuery単一または一連のコマンドでそれを行うことはできません。この例は、mysql のストアド プロシージャに配置するコードを示していました。DataAdapter または DataReader を使用してストアド プロシージャを呼び出します。

于 2013-10-17T15:04:53.683 に答える