2013-10-17 20 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