2010-05-24 65 views
1

我无法弄清楚我的生活..我使用SQL数据集查询来迭代到一个类对象,它充当Flex的数据模型...最初我使用VB.net,但现在需要转换为C#..除了创建DataRow arow的最后一部分,然后尝试将DataSet值添加到类(结果类)之外,此转换完成...我收到一条错误消息..任何人都可以帮助转换此VB Webservice?

' VTResults.Results.Ticker”不可访问由于其保护级别 (这是下跌的底部)

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; 
    }  
    } 

运行罚款VB.NET WEBSERVICE而我试图将转换为C#在这里。

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 
+1

您还应该将SqlConnection,SqlCommand和SqlDataAdapter放入'using'块中,以便在引发异常时将它们丢弃。 – 2010-05-24 01:24:25

+0

谢谢约翰当我完成转换后,我会继续努力。 – CraigJSte 2010-05-24 20:34:47

回答

0

正如其他人已经说过的,您需要将结果的成员公开。

此外,一旦你这样做,你会用下列行打的错误:

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"]; 

在那里转换VB.NET中隐含的工作,但你需要做这些明确in C#

eg

dts[i].Ticker = arow["Ticker"].ToString(); 
+0

任何想法为什么我在DataRow arow对象上出现此错误? 结果[] dts = new结果[myds.Tables [0] .Rows.Count]; DataRow arow; (DataRow arow in myds.Tables [0] .Rows) { dts [i] = new Results(); dts [i] .Ticker = arow [“Ticker”]。ToString(); – CraigJSte 2010-05-24 20:35:37

+0

这是无法读取..无论如何,我得到一个错误的arow对象.....我声明它使用C#DataRow arow然后我用它在这个声明 foreach(DataRow arow in myds.Tables [0] .Rows)this是程序所在的地方“一个名为'arow'的变量不能在这个范围内声明,因为它会给它一个不同的含义.... ?? – CraigJSte 2010-05-24 20:37:19

+0

我发布了一个关于这个主题的单独问题......'C#Conversion VB.net网络服务' – CraigJSte 2010-05-24 20:42:57

0

正如其他人指出C#中的默认接取修饰符是私人所以你必须做出“字符串北京时间”和领域公共的其余部分。此外,除非您计划稍后使用方法扩展它,否则您应该将其作为结构体。

public class Results 
{ 
    public string Ticker; 
    public string BuyDate; 
    public decimal Buy; 
    public string SellDate; 
    public decimal Sell; 
    public string Profit; 
    public decimal Period; 
} 
+1

为什么要使用具有值语义的结构? – 2010-05-24 01:25:21

1

C#中类成员的默认access modifier是私有的。尝试将您的字段更改为公开(就像您在VB代码中一样)。

1

我认为你需要把它全部公开,因为你会碰到每个其他属性相同的错误。

public class Results { 
     public string Ticker; 
     public string BuyDate; 
     public decimal Buy; 
     public string SellDate; 
     public decimal Sell; 
     public string Profit; 
     public decimal Period; 
    } 
相关问题