2014-01-25 2 views
0

나는 SELECT ITEM FROM DETAIL WHERE TID="1"과 같은 쿼리를 가지고 있습니다. vb net 복수의 datareader 결과를 하나의 문자열 변수로 저장합니다.

M4, C1, F2, D5, K2 같은 결과가 반환 내가 여러 값이 코드를

결과와 여기 얻을 DATAREADER을 사용하고

Dim res as string = "SELECT ITEM FROM DETAIL WHERE TID='1'" 
CMD = New MySqlCommand(res, con) 
result = CMD.ExecuteReader() 
while result.HasRows 
    result.Read() 
    array(indeks) = result("ITEM") 
end while 
각각에 결과를 하나씩 저장하는 대신

대신 결과를 하나씩 저장합니다.3210 배열 (0) = M4

어레이 (1) = C1 .....

제가 '의 M4와 같이 포맷 단일 문자열 변수 으로 그 모두를 저장할 ''C1 ','F2 '', D5 ','K2 '

포맷은 상기 예와 같은 각각의 결과에 대한 세퍼레이터로서 따옴표 쉼표 (,) (여전히 있다면 콤마 만 표시 인 결과)

어떻게 그 vb.net에서 할 수 있을까요? 나는 마지막으로 배열의 요소의 끝에서 분리가 필요하지 않습니다

enter image description here

데이터베이스

업데이트 된 코드 여기

Dim cnt As String = "select count(*) from detail where kode_faktur= '" & 1 & "' " 
    Dim max As Int32 
    CMD_sup = New MySqlCommand(cnt, conn.konek) 
    max = Convert.ToInt32(CMD_sup.ExecuteScalar()) 
    CMD_sup.Connection.Close() 

    Dim result As MySqlDataReader 

    Dim resultString As String 
    Dim isFirstResult = True 

    Dim arayITEM() As String 
    Dim res As String = "select kode_brg from detail where kode_faktur= '" & 1 & "' " 
    CMD = New MySqlCommand(res, conn.konek) 
    result = CMD.ExecuteReader() 


    ReDim arayITEM(max) 
    If result.HasRows Then 
     For i As Integer = 0 To max - 1 
      result.Read() 
      arayITEM(i) = result("kode_brg") 
     Next 
    End If 

    resultString = "'" & String.Join("','", arayITEM) & "'" 
    'MsgBox("HASIL : " & resultString) 

로 screenshoot을 MySQL이있어 사용하고 있습니다 (,'')

+0

문자열 연결을 시도 했습니까? –

+0

어떻게해야합니까? 대답은 –

답변

1

어떨까요 :

Dim res as string = "SELECT ITEM FROM DETAIL WHERE TID='1'" 
CMD = New MySqlCommand(res, con) 
result = CMD.ExecuteReader() 
Dim resultString as String = "" 
Dim isFirstResult = True 
while result.HasRows 
    result.Read() 
    If Not isFirstResult Then 
    resultString &= string.Format(",'{0}'",result("ITEM")) 
    Else 
    isFirstResult = False 
    resultString &= string.Format("'{0}'",result("ITEM")) 
    End If 
end while 

아니면 배열을 계속 사용 할뿐만 아니라 하나의 문자열 버전을 필요로하는 경우, 당신은 String.Join를 사용하여 배열로 변환 할 수 있습니다 :

Dim resultString As String = "'" & String.Join("','", array) & "'" 

String.Join는 다음 요소가 존재하는 경우에만 구분 기호를 추가 할만큼 영리한입니다. 그래서 위의 두 접근법 모두 동일한 결과를 산출해야합니다.

+0

입니다. 난 단지 단일 문자열로 저장되는 값이 필요합니다. msgbox'MsgBox ("Result :"& resstring)'을 사용하여 표시하려고했을 때. 프로그램이 멈추고 오류가 나타납니다. 그리고 여기서 '부울'변수 역할은 무엇입니까? 설명해 주시겠습니까? –

+0

'isFirstResult'는 첫 번째 결과에 선행 쉼표 (',')를 추가하지 않으려는 것입니다. 2 차 결과에만 추가해야합니다. – har07

+0

및 무엇이 오류 메시지입니까? 나는 짐작할 수 없다. 나는 문자열 목록을 반복하면서 테스트했지만 DataReader를 반복하지 않고 – har07

2
Dim res as string = "SELECT ITEM FROM DETAIL WHERE TID='1'" 
CMD = New MySqlCommand(res, con) 


' Read data from database 
Dim result As New ArrayList() 
Dr = CMD.ExecuteReader() 

' Add each entry to array list 
While Dr.Read() 
    ' Insert each column into a dictionary 
    Dim dict As New Dictionary(Of String, Object) 
    For count As Integer = 0 To (Dr.FieldCount - 1) 
     dict.Add(Dr.GetName(count), Dr(count)) 
    Next 

    ' Add the dictionary to the ArrayList 
    result.Add(dict & ", ") 
End While 
Dr.Close() 

그래서, 지금 당신과 결과를 통해 루프 수있는이 같은 루프 :

그냥 DataReader를한다면 당신이 그것을 할 것입니다 방법
For Each dat As Dictionary(Of String, Object) In result 
    Console.Write(dat("ColName")) 
Next 

아주 유사한

While Dr.Read() 
    Console.Write(Dr("ColName")) 
End While 

코드 : Reference 테스트를하지 않고 원하는대로 수정했습니다. 희망은 당신을 도울 수 있습니다.

+0

thx u 답변이 너무 많습니다. :) –

관련 문제