C#填充的数组属性显示为';空';控制台内应用程序调用程序

C#填充的数组属性显示为';空';控制台内应用程序调用程序,c#,C#,我不是一名C#开发人员,我只是想通过编写一个DLL供MATLAB使用(通过其dotnet接口)查询数据库来利用C#的ADO SQL功能。MATLAB只支持访问某些网络类型,因此我必须将我的数据表列转换为字符串数组,浮点数等 我正在CDSOption命名空间下编写一个RunReader类,该类具有一个设置属性(用于创建查询)的类构造函数,以及一个Read方法,该方法随后连接一个查询(使用这些属性),使用sqldataadapter填充DataTable,并将DataTable列分配给数组(例如DL

我不是一名C#开发人员,我只是想通过编写一个DLL供MATLAB使用(通过其dotnet接口)查询数据库来利用C#的ADO SQL功能。MATLAB只支持访问某些网络类型,因此我必须将我的
数据表
列转换为
字符串数组
浮点数

我正在
CDSOption
命名空间下编写一个
RunReader
类,该类具有一个设置属性(用于创建查询)的类构造函数,以及一个
Read
方法,该方法随后连接一个查询(使用这些属性),使用
sqldataadapter
填充
DataTable
,并将
DataTable
列分配给数组(例如DLL将向MATLAB公开的
tickerray

然而,我发现,虽然代码似乎成功地查询和填充了
tickerray
,但当我尝试从控制台应用程序访问它时,
tickerray
只是
null
(参见屏幕截图链接)

C#开发人员的帮助非常感谢


RunReader.tickerray
-
NullReferenceException
在控制台应用程序中


tickerray
RunReader中填充。Read


用于测试的控制台应用程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CDSOption;

namespace CDSOptionConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            RunReader runreader = new RunReader("ITXEB", "JPM", 5, 23, "2015-04-28", "2015-05-01");

            Console.WriteLine("RunReader Object Instantiated ... Reading\n\n");

            runreader.Read(); // query the db and populate Array properties

            Console.WriteLine("Number of Rows:\t" + runreader.Dataset.Rows.Count.ToString() + "\n\n");

            Console.WriteLine(runreader.TickerArray[0]);
            Console.ReadKey();

        }
    }
}
RunReader类的

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Data;

namespace CDSOption
{
    public class RunReader
    {
        public string Ticker;
        public string Broker;
        public int Tenor;
        public int Series;
        public string StartDate;
        public string EndDate;
        public int NumberOfRows;

        public DataTable Dataset;
        public String[] TickerArray;

        public RunReader(string ticker, string broker, int tenor, int series, string startdate, string enddate)
        {
            Ticker = ticker;
            Broker = broker;
            Tenor = tenor;
            Series = series;
            StartDate = startdate;
            EndDate = enddate;   
        }

        public void Read()
        {
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = @"Data Source=RB201067LT\SQLEXPRESS;Initial Catalog=CDSOptions;Integrated Security=true;";
            //conn.Open();

            SqlCommand command = new SqlCommand();
            command.Connection = conn;
            string queryfields = "r.run_id,r.ValueDate,r.Ticker,r.Series,r.Tenor, r.ExpiryDate,d.[Contract],d.Strike,d.Bid,d.Ask,d.ImpVol,d.Delta,r.RefSpread,r.FwdSpread,r.FwdDV01,d.Delta,d.Gamma,d.Theta,d.Vega";
            string queryjoin = "FROM [CDSOptions].[dbo].[CDSOption_RunData] d JOIN [CDSOptions].[dbo].[CDSOption_Run] r ON d.run_id=r.run_id";
            string querywhere = "WHERE r.Ticker = '" + Ticker + "' AND r.Tenor = '" + Tenor.ToString() + "' AND r.Broker = '" + Broker + "' AND r.ValueDate>='" + StartDate + "' AND r.ValueDate <= '" + EndDate + "'";


            command.CommandText = "SELECT " + queryfields + " " + queryjoin + " " + querywhere;

            //DataTable dataset = new DataTable();
            Dataset = new DataTable();

            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;
            adapter.Fill(Dataset);


            string[] TickerArray = new string[Dataset.Rows.Count];

            for (int row = 0; row < Dataset.Rows.Count; row++)
            {
                TickerArray[row] = Dataset.Rows[row]["Ticker"].ToString();
            }


        }

    }


}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Data.SqlClient;
使用系统数据;
名称空间CDS选项
{
公共类RunReader
{
公共字符串记录器;
公共字符串经纪人;
公共国际语旨;
公共int系列;
公共字符串起始日期;
公共字符串结束日期;
公共整数行;
公共数据表数据集;
公共字符串[]tickerray;
公共RunReader(字符串行情器、字符串经纪人、整数期限、整数系列、字符串开始日期、字符串结束日期)
{
股票代码=股票代码;
经纪人=经纪人;
期限=期限;
系列=系列;
开始日期=开始日期;
EndDate=EndDate;
}
公共无效读取()
{
SqlConnection conn=新的SqlConnection();
conn.ConnectionString=@“数据源=RB201067LT\SQLEXPRESS;初始目录=CDSOptions;集成安全性=true;”;
//conn.Open();
SqlCommand=newsqlcommand();
command.Connection=conn;
字符串queryfields=“r.run_id,r.ValueDate,r.Ticker,r.Series,r.Tenor,r.ExpiryDate,d.[合同],d.Strike,d.Bid,d.Ask,d.ImpVol,d.Delta,r.RefSpread,r.FwdSpread,r.FwdDV01,d.Delta,d.Gamma,d.Theta,d.Vega”;
string queryjoin=“FROM[CDSOptions].[dbo].[CDSOption\u RunData]d加入[CDSOptions].[dbo].[CDSOption\u Run]r ON d.Run\u id=r.Run\u id”;

字符串querywhere=“其中r.Ticker=”+Ticker+”,r.Tenor=”+Tenor.ToString()+“,r.Broker=”+Broker+”,r.ValueDate>=“+StartDate+”,r.ValueDate在
RunReader.Read>中填充局部变量
tickerray

更改
string[]tickerray=新字符串[Dataset.Rows.Count];

公正
tickeraray=new string[Dataset.Rows.Count];

的确-谁说没有愚蠢的问题!谢谢你.np-问题的格式还可以,你表明你尝试了一些用户希望看到的帮助。如果答案解决了你的问题,请接受答案(带有绿色复选标记)。