2017-03-20 13 views
-2

私は、クエリからの3つの文字列値を取得しようとしているが、関数への呼び出し:関数から文字列の配列を返すにはどうすればよいですか?

​​

...がERRのMSGでコンパイルに失敗し、「タイプの値 『文字列』にすることはできません。「文字列の1次元配列」に変換された

もその関数のコンパイルの末尾に次の行を行います。

Return args 

...で失敗し、」タイプの値「1次元のar ray of String 'は' String 'に変換できません。

私は3つのヴァルスの文字列の配列として、そのようなargValsを宣言しています:ここでより多くのコンテキストについては

Protected Function GetArgValsForCompanyName(coName As String) As String 

、:

Dim argVals(2) As String 

...などなどの機能

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim connStr As String = "SERVER=PLATYPUS42;DATABASE=duckbilldata;UID=vonnegut;PWD=ryecatcher" 
    Dim upd8DML As String = "UPDATE CustomerCategoryLog SET Category = 'Exploding' WHERE Unit = @Unit And MemberNo = @MemberNo AND Custno = @CustNo" 
    Dim coName As String 
    Dim argVals(2) As String 
    Dim _Unit As String 
    Dim _MemberNo As String 
    Dim _CustNo As String 
    Dim curIndexVal As String 

    For Each cntrl As Control In Me.Controls 
     If TypeOf cntrl Is CheckBox Then 
      If DirectCast(cntrl, CheckBox).Checked = True Then 
       curIndexVal = CStr(DirectCast(cntrl, CheckBox).Tag) 
       coName = GetLabelTextForID(curIndexVal) 
       argVals = GetArgValsForCompanyName(coName) 
       _Unit = argVals(0) 
       _MemberNo = argVals(1) 
       _CustNo = argVals(2) 
       Using conn As New SqlConnection(connStr), _ 
        cmd As New SqlCommand(upd8DML, conn) 
        cmd.Parameters.Add("@Unit", SqlDbType.VarChar, 50).Value = _Unit 
        cmd.Parameters.Add("@MemberNo", SqlDbType.VarChar, 50).Value = _MemberNo 
        cmd.Parameters.Add("@CustNo", SqlDbType.VarChar, 50).Value = _CustNo 
        conn.Open 
        cmd.ExecuteScalar() 
       End Using 
      End If 
     End If 
    Next 
End Sub 

Protected Function GetArgValsForCompanyName(coName As String) As String 
    Dim args(2) As String 
    Dim sqlConnection1 As New SqlConnection("SERVER=PLATYPUS42;DATABASE=duckbilldata;UID=salinger;PWD=dresdenoflions") 
    Dim cmd As New SqlCommand 
    Dim reader As SqlDataReader 

    cmd.CommandText = "select Unit, MemberNo, CustNo from Customers WHERE CompanyName = @CoName" 
    cmd.CommandType = CommandType.Text 
    cmd.Parameters.Add("@CoName", SqlDbType.VarChar, 50).Value = coName 
    cmd.Connection = sqlConnection1 
    sqlConnection1.Open() 

    sqlConnection1.Open() 

    reader = cmd.ExecuteReader() 
    If reader.HasRows Then 
      args(0) = reader.Item(0).ToString() 
      args(1) = reader.Item(1).ToString() 
      args(2) = reader.Item(2).ToString() 
    End If 
    reader.Close() 
    sqlConnection1.Close() 

    Return args 
End Function 

私はここで間違っていますか? ?どのように関数から文字列の配列を返すことができますし、これらのvalを3つの変数(dim)に格納しますか?

注:私はそうのような関数を宣言しようとした場合:

Protected Function GetArgValsForCompanyName(coName As String) As String(2) 

が...私は取得するには、「アレイの境界は型指定子に表示されないことができ

+0

[VB.NETでの文字列配列の宣言と初期化]の可能な複製(http://stackoverflow.com/questions/5262577/declaring-and-initializing-a-string-array-in-vb-net) – Filburt

+4

'GetArgValsForCompanyName(文字列としてのCoName)としてString()'を返し、 'Return args'を返します。配列の指定子として '()'を使用する点を除いて、C#とほとんど同じです – Plutonix

答えて

2

あなたの問題があることのようですそれはこの

ようにする必要がありますときに、あなたはそう

Protected Function GetArgValsForCompanyName(coName As String) As String 

のような機能を持っているsigniture

Protected Function GetArgValsForCompanyName(coName As String) As String() 

戻り型の末尾にある()は、文字列ではなく文字列配列になることを示します。

関連する問題