2013-10-17 21 views
1

我想从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中的代码。

回答

0

您不能在单个或一系列ExecuteNonQuery命令中执行此操作。这个例子显示了你将在MySQL上存储过程中的代码。您使用DataAdapter或DataReader调用存储过程。

+0

那么通过vb.net运行这些命令的方式是什么? – user2086396

+0

您不能直接运行这些命令。您必须在数据库中创建一个存储过程来执行此操作,或者您可以在VB中分解peices以执行此操作,因为它只是构建一个字符串。 ... – Steve

+0

昏暗S作为字符串=“ 'SELECT \' 板\ ' ' ( SELECT GROUP_CONCAT( CONCAT('(SELECT压板从汽车LIMIT', @a:= @一个+ 1, ' ,1)') ) FROM cars where sl = 1 )“ – Steve