- - PR -
ASP1.0VB.NETでArrayListのreturn方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 | ||||||||
|
投稿日時: 2007-12-04 13:23
arraylistにするとエラーがでるのではなく ArrayList.ToArrayを返すとエラーが出てるという話ですよね。 正確に話さないと混乱を招きます。 ArrayList.ToArrayはObjectの配列を返します。 一方
GetAddressの戻り値はStringです。 ですので、Stringを返さないいけません。 また、Objectの配列とStringの間には暗黙の変換は定義されていません。 Objectの配列をStringにするには自分でコードを書かなければいけません。 だからエラーになります。 | ||||||||
|
投稿日時: 2007-12-04 14:06
れい様
なるほど!理解できました。納得です。 もうちょっと試行錯誤してイロイロ試してみます。 >arraylistにするとエラーがでるのではなく >ArrayList.ToArrayを返すとエラーが出てるという話ですよね。 >正確に話さないと混乱を招きます。 はい、すみません。 .netをはじめたばかりで、ASP.NET2.0のサンプルを元に試している最中だったので… 今後は出来るだけ省略せずに記述します。 ご指摘ありがとうございました。 | ||||||||
|
投稿日時: 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