C#填充的数组属性显示为';空';控制台内应用程序调用程序
我不是一名C#开发人员,我只是想通过编写一个DLL供MATLAB使用(通过其dotnet接口)查询数据库来利用C#的ADO SQL功能。MATLAB只支持访问某些网络类型,因此我必须将我的C#填充的数组属性显示为';空';控制台内应用程序调用程序,c#,C#,我不是一名C#开发人员,我只是想通过编写一个DLL供MATLAB使用(通过其dotnet接口)查询数据库来利用C#的ADO SQL功能。MATLAB只支持访问某些网络类型,因此我必须将我的数据表列转换为字符串数组,浮点数等 我正在CDSOption命名空间下编写一个RunReader类,该类具有一个设置属性(用于创建查询)的类构造函数,以及一个Read方法,该方法随后连接一个查询(使用这些属性),使用sqldataadapter填充DataTable,并将DataTable列分配给数组(例如DL
数据表
列转换为字符串数组
,浮点数
等
我正在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-问题的格式还可以,你表明你尝试了一些用户希望看到的帮助。如果答案解决了你的问题,请接受答案(带有绿色复选标记)。