我需要从我的C#应用程序中使用OLEDB提供程序(对于SunGard Investran),并从带有参数的报表中获取数据。我能够连接数据库但无法获取数据。应用程序崩溃时出现异常代码c0000005。请提供一些如何使用它的指导。
我在64位win服务器2008 R2上运行它。 这是我正在使用的代码。它在获取数据的最后一行崩溃。
string connect = "Provider=ftiRSOLEDB.RSOLEDBProvider;Password=xxxxxxxx;User ID=xxxxxx;Initial Catalog=xxxx;Data Source=xxxxxx;";
using (OleDbConnection conn = new OleDbConnection(connect))
{
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = conn;
cmd.CommandText = "[ReportFolder].[ReportName]";
//conn.Open();
OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
adapter.Fill(ds);
}
}
答案 0 :(得分:0)
命令文本中没有真正的命令...
cmd.CommandText = "select * from SomeTable where ... ";
如果“ReportFolder”是数据库中的表,而“ReportName”是列,那么如果您想要所有记录,则不需要WHERE子句。
cmd.CommandText = "select ReportName from ReportFolder";
现在,如果要添加参数(例如报告类型等),请确保正确参数化它们,但我不熟悉数据库的“占位符”语法。例如,在Visual FoxPro(VFP)中,“?”是一个占位符,在SQL-Server中它的“@”,在SyBase Advantage中它的“:”如查询就会变成
cmd.CommandText = "select * from YourTable where Something = @someParmToApply";
cmd.Parameters.Add( "someParmToApply", "this thing" );
然后继续执行查询...如果您有多个参数,只需确保将它们保持与查询中显示的顺序相同...这样可以更容易理解。
答案 1 :(得分:0)
我得到了语法。它是OLEDB提供商特有的。以下是其他人使用它的语法。
cmd.CommandText = "\"ReportFolder\".\"ReportName\" FLAGS[/SILENT]";
也可以像这样添加参数。
cmd.CommandText = "\"ReportFolder\".\"ReportName\" \"ParamName=value\" FLAGS[/SILENT]";