- PR -

ASP1.0VB.NETでArrayListのreturn方法

1
投稿者投稿内容
猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2007-12-04 12:18
WinXP
ASP.NET FRAMEWORK 1.0
Microsoft Visual Basic .NET

にて「郵便番号の検索(Postalcode01.asmx)」を作成しています。
やりたい事は、『ACCESSのMDBにOLE接続し、郵便番号7桁を与えると、
対象の住所(県、市区、町村)を返す』という処理です。

この処理で値は取得出来ているのですが、RETURNで値を返すことが
できません。
※同一郵便番号で住所が複数あった場合、複数取得できています。

・mojiに値をセットし、内容を確認(retuen)すると取得できている。
・Return ListCodes.ToArray とすると、ListCodes.ToArray に波線
 が引かれ、エラーとなる。

なぜarraylistにするとエラーになるのか、教えてください。
データベースは、郵便番号、県、市区、町村の4項目のみのデータ
となっています。
---------------------------------------------------
Imports System.Web.Services
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Collections

<System.Web.Services.WebService(Namespace:="http://www.aspnetsbs.com/webservices/")> _
Public Class PotalCode01
  Inherits System.Web.Services.WebService

  <WebMethod()> _
  Public Function GetAddress(ByVal postalCode As String) As String
    Dim selectString As String = "SELECT * FROM tblPostalCode WHERE code=?"
    Dim con As New OleDbConnection(connectionString)
    Dim da As New OleDbDataAdapter()
    Dim cmd As New OleDbCommand(selectString, con)
    Dim dt As New DataTable()
    cmd.Parameters.Add("?", postalCode)
    da.SelectCommand = cmd
    da.Fill(dt)
    If dt.Rows.Count > 0 Then
      Dim moji As String = ""
      Dim ListCodes As New ArrayList()
      Dim i As Integer
      For i = 0 To dt.Rows.Count - 1
        ListCodes.Add(dt.Rows(i)("ken") & "," & dt.Rows(i)("city") & dt.Rows(i)("town")")
        moji &= dt.Rows(i)("ken") & "," & dt.Rows(i)("city") & dt.Rows(i)("town") & ","
      Next
      Return moji
      'Return ListCodes.ToArray   ★ココがエラーとなる(現在コメント化)
    Else
      Return postalCode & ",郵便番号が不正です。"
    End If
  End Function

  Public Shared ReadOnly Property connectionString() As String
    Get
      connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
      connectionString &= "Data Source=C:/Inetpub/wwwroot/Lesson/PostalCodes/PostalCode.mdb;"
    End Get
  End Property

End Class
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2007-12-04 13:23
引用:

なぜarraylistにするとエラーになるのか、教えてください。



arraylistにするとエラーがでるのではなく
ArrayList.ToArrayを返すとエラーが出てるという話ですよね。
正確に話さないと混乱を招きます。

ArrayList.ToArrayはObjectの配列を返します。
一方
引用:

  Public Function GetAddress(ByVal postalCode As String) As String


GetAddressの戻り値はStringです。
ですので、Stringを返さないいけません。

また、Objectの配列とStringの間には暗黙の変換は定義されていません。
Objectの配列をStringにするには自分でコードを書かなければいけません。

だからエラーになります。
猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2007-12-04 14:06
れい様

なるほど!理解できました。納得です。
もうちょっと試行錯誤してイロイロ試してみます。

>arraylistにするとエラーがでるのではなく
>ArrayList.ToArrayを返すとエラーが出てるという話ですよね。
>正確に話さないと混乱を招きます。

はい、すみません。
.netをはじめたばかりで、ASP.NET2.0のサンプルを元に試している最中だったので…
今後は出来るだけ省略せずに記述します。
ご指摘ありがとうございました。

猫だいすき
常連さん
会議室デビュー日: 2007/04/09
投稿数: 27
お住まい・勤務地: 兵庫県
投稿日時: 2007-12-04 14:35
変更点について記述しておきます。変更したらできました☆
-----------------------------------------
Imports System.Web.Services
Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Collections

<System.Web.Services.WebService(Namespace:="http://www.aspnetsbs.com/webservices/")> _
Public Class PotalCode01
  Inherits System.Web.Services.WebService

  <WebMethod()> _
  Public Function GetAddress(ByVal postalCode As String) As ArrayList ★
    Dim selectString As String = "SELECT * FROM tblPostalCode WHERE code=?"
    Dim con As New OleDbConnection(connectionString)
    Dim da As New OleDbDataAdapter()
    Dim cmd As New OleDbCommand(selectString, con)
    Dim dt As New DataTable()
    cmd.Parameters.Add("?", postalCode)
    da.SelectCommand = cmd
    da.Fill(dt)
    Dim ListCodes As New ArrayList()
    If dt.Rows.Count > 0 Then
      Dim i As Integer
      For i = 0 To dt.Rows.Count - 1
        ListCodes.Add(dt.Rows(i)("ken") & "," & dt.Rows(i)("city") & dt.Rows(i)("town"))
      Next
    Else
      ListCodes.Add(postalCode & ",郵便番号が不正です。")  ★
    End If
    Return ListCodes ★
  End Function

  Public Shared ReadOnly Property connectionString() As String
    Get
      connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;"
      connectionString &= "Data Source=C:/Inetpub/wwwroot/Lesson/PostalCodes/PostalCode.mdb;"
    End Get
  End Property

End Class
1

スキルアップ/キャリアアップ(JOB@IT)