我想从MySQL中获取一些值 - 列作为行和viceversa - 以显示在DataGridView
上。我有这样的代码,应在MySQL-MySql在VB.net中执行Set和Concat语句
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:[email protected]+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:[email protected]+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中的代码。
那么通过vb.net运行这些命令的方式是什么? – user2086396
您不能直接运行这些命令。您必须在数据库中创建一个存储过程来执行此操作,或者您可以在VB中分解peices以执行此操作,因为它只是构建一个字符串。 ... – Steve
昏暗S作为字符串=“ 'SELECT \' 板\ ' ' ( SELECT GROUP_CONCAT( CONCAT('(SELECT压板从汽车LIMIT', @a:= @一个+ 1, ' ,1)') ) FROM cars where sl = 1 )“ – Steve