Reputation: 932
I can't figure it out for the life of me.. I'm using SQL DataSet Query to iterate to a Class Object which acts as a Data Model for Flex... Initially I used VB.net but now need to convert to C#.. This conversion is done except for the last section where I create a DataRow arow and then try to add the DataSet Values to the Class (Results Class)... I get an error message..
'VTResults.Results.Ticker' is inaccessible due to its protection level (this is down at the bottom)
using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
/// <summary>
/// Summary description for VTResults
/// </summary>
[WebService(Namespace = "http://velocitytrading.net/ResultsVT.aspx")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class VTResults : System.Web.Services.WebService {
public class Results {
string Ticker;
string BuyDate;
decimal Buy;
string SellDate;
decimal Sell;
string Profit;
decimal Period;
}
[WebMethod]
public Results[] GetResults() {
string conn =
ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString;
SqlConnection myconn = new SqlConnection(conn);
SqlCommand mycomm = new SqlCommand();
SqlDataAdapter myda = new SqlDataAdapter();
DataSet myds = new DataSet();
mycomm.CommandType = CommandType.StoredProcedure;
mycomm.Connection = myconn;
mycomm.CommandText = "dbo.Results";
myconn.Open();
myda.SelectCommand = mycomm;
myda.Fill(myds);
myconn.Close();
myconn.Dispose();
int i = 0;
Results[] dts = new Results[myds.Tables[0].Rows.Count];
foreach(DataRow arow in myds.Tables[0].Rows)
{
dts[i] = new Results();
dts[i].Ticker = arow["Ticker"];
dts[i].BuyDate = arow["BuyDate"];
dts[1].Buy = arow["Buy"];
dts[i].SellDate = arow["SellDate"];
dts[i].Sell = arow["Sell"];
dts[i].Profit = arow["Profit"];
dts[i].Period = arow["Period"];
i+=1;
}
return dts;
}
}
The VB.NET WEBSERVICE that runs fine which I am trying to convert to C# is here.
Imports System.Web
Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.Data
Imports System.Data.SqlClient
<WebService(Namespace:="http://localhost:2597/Results/ResultsVT.aspx")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Public Class VTResults
Inherits System.Web.Services.WebService
Public Class Results
Public Ticker As String
Public BuyDate As String
Public Buy As Decimal
Public SellDate As String
Public Sell As Decimal
Public Profit As String
Public Period As Decimal
End Class
<WebMethod()> _
Public Function GetResults() As Results()
Try
Dim conn As String =
ConfigurationManager.ConnectionStrings("LocalSqlServer").ConnectionString
Dim myconn = New SqlConnection(conn)
Dim mycomm As New SqlCommand
Dim myda As New SqlDataAdapter
Dim myds As New DataSet
mycomm.CommandType = CommandType.StoredProcedure
mycomm.Connection = myconn
mycomm.CommandText = "dbo.Results"
myconn.Open()
myda.SelectCommand = mycomm
myda.Fill(myds)
myconn.Close()
myconn.Dispose()
Dim i As Integer
i = 0
Dim dts As Results() = New Results(myds.Tables(0).Rows.Count - 1) {}
Dim aRow As DataRow
For Each aRow In myds.Tables(0).Rows
dts(i) = New Results
dts(i).Ticker = aRow("Ticker")
dts(i).BuyDate = aRow("BuyDate")
dts(i).Buy = aRow("Buy")
dts(i).SellDate = aRow("SellDate")
dts(i).Sell = aRow("Sell")
dts(i).Profit = aRow("Profit")
dts(i).Period = aRow("Period")
i += 1
Next
Return dts
Catch ex As DataException
Throw ex
End Try
End Function
End Class
Upvotes: 1
Views: 342
Reputation: 1602
As others have stated the default acess modifier in C# is private so you have to make "string Ticker" and the rest of the fields public. Furthermore you should probably make it a struct unless you plan to extend it with with methods later on.
public class Results
{
public string Ticker;
public string BuyDate;
public decimal Buy;
public string SellDate;
public decimal Sell;
public string Profit;
public decimal Period;
}
Upvotes: 0
Reputation: 7941
I think that you need to make it all public as you will hit the same error for each of the other properties.
public class Results {
public string Ticker;
public string BuyDate;
public decimal Buy;
public string SellDate;
public decimal Sell;
public string Profit;
public decimal Period;
}
Upvotes: 1
Reputation: 4232
As everyone else already said, you need to make the members of Results public.
Additionally, once you've done that, you'll hit errors with the following lines:
dts[i].Ticker = arow["Ticker"];
dts[i].BuyDate = arow["BuyDate"];
dts[1].Buy = arow["Buy"];
dts[i].SellDate = arow["SellDate"];
dts[i].Sell = arow["Sell"];
dts[i].Profit = arow["Profit"];
dts[i].Period = arow["Period"];
The conversions in there work implicitly in VB.NET, but you'll need to do them explicitly in C#
e.g.
dts[i].Ticker = arow["Ticker"].ToString();
Upvotes: 0
Reputation: 31761
The default access modifier for class members in C# is private. Try changing your fields to public (like you have in your VB code).
Upvotes: 1