Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql在VB.net中执行Set和Concat语句_Mysql_Sql_Vb.net_Datagridview - Fatal编程技术网

MySql在VB.net中执行Set和Concat语句

MySql在VB.net中执行Set和Concat语句,mysql,sql,vb.net,datagridview,Mysql,Sql,Vb.net,Datagridview,我试图从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 \'Pl

我试图从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错误——在命令执行过程中遇到的致命错误

我曾尝试将代码拆分为单独的字符串,但还是出现了相同的错误。还试图增加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中需要这么多代码

不能在单个或一系列ExecuteOnQuery命令中执行此操作。这个例子展示了您将在mysql上放入存储过程的代码。您可以使用DataAdapter或DataReader调用存储过程。

您不能直接运行这些命令。您必须在数据库中创建一个存储过程来执行此操作,如图所示,或者您可以在VB中分解peices来执行此操作,因为它只是构建一个字符串。。。Dim s as string='SELECT'Plate\',',SELECT GROUP_CONCAT CONCAT CONCAT'SELECT Plate FROM cars LIMIT',@a:=@a+1',1',FROM cars where sl=1,然后继续使用s&=More SQLPost将您尝试的代码添加到变量中,作为对原始帖子的编辑。还包括准确的错误和错误所在的行。没关系。我做了一个变通办法。首先,我运行了一个descripe table_name语句,将所有结果放在一个字符串数组中,然后select语句将结果放在另一个字符串数组中,创建了一个datatable,运行了一些for magic并完成了。