C# C访问数据库复杂存储过程错误
寻找关于这个奇怪问题的线索 我正在尝试将数据从访问OleDb数据库检索到c/wpf数据表中。现在有趣的是:一个简单的查询在access中工作,并下载到Datatable中,很好。一个稍微复杂一点的查询在Access中工作,但在c中会出现错误 代码如下:C# C访问数据库复杂存储过程错误,c#,ms-access,dataadapter,C#,Ms Access,Dataadapter,寻找关于这个奇怪问题的线索 我正在尝试将数据从访问OleDb数据库检索到c/wpf数据表中。现在有趣的是:一个简单的查询在access中工作,并下载到Datatable中,很好。一个稍微复杂一点的查询在Access中工作,但在c中会出现错误 代码如下: OleDbConnection conn = new OleDbConnection("myconn"); DataTable dt = new DataTable(); OleDbCommand cmd = new OleDbComman
OleDbConnection conn = new OleDbConnection("myconn");
DataTable dt = new DataTable();
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter adapter = new OleDbDataAdapter();
conn.Open();
//3 flavors
//string n = "QryTestComplex"; This gives an error in c#, works in access
//string n = "SELECT * FROM CURSIST"; This works ( with cmd.CommandType =
etc, commented out)
//string n = "QryTestSimple"; This works ( SQL = same as above )
cmd = new OleDbCommand(n,conn);
cmd.CommandType = CommandType.StoredProcedure;
adapter.SelectCommand = cmd
try
{
adapter.Fill(dt);
int t = 0;
foreach (DataRow dr in dt.Rows)
{ t++; Console.WriteLine(t + dr[0].ToString()); }
}
catch (Exception exc)
{
Console.WriteLine("{0} Exception caught.", exc);
}
conn.Close();
查询如下:
QryTestSimple:
SELECT * FROM Cursist;
QryTestComplex:
SELECT
Module.Status,
ModuleData.Datum,
LeerActiviteit.Naam,
Module.Locatie,
Module.Onderwijskundige,
Module.Organisator,
Module.Coordinator,
Module.Stoplicht,
Module.ID, Cluster.Naam AS CNaam,
(
SELECT '(dag' & count(M.ID) + 1 & ')'
FROM
Module AS M
INNER JOIN ModuleData AS MD
ON M.ID = MD.Module_ID
WHERE Module.ID = M.ID
AND MD.Datum <ModuleData.Datum
HAVING
(
SELECT count(P.ID)
FROM
Module AS P
INNER JOIN
ModuleData AS PD
ON P.ID = PD.Module_ID
WHERE Module.ID= P.ID
) >1
) AS DagNummer
FROM
(
LeerActiviteit
INNER JOIN
(
[Module]
LEFT JOIN
Cluster
ON Module.Onderdeel_Van_Cluster_ID = Cluster.ID
)
ON LeerActiviteit.ID = Module.LeerAct_ID
)
INNER JOIN
ModuleData
ON Module.ID = ModuleData.Module_ID
WHERE (((ModuleData.Datum)>Now()));
复杂查询在access中工作,但在C中调试时,我得到:
System.Data.OleDb.OLEDBEException 0x80004005:IErrorInfo.GetDescription失败
带有E_故障0x80004005
适配器上的中断。Filldt
有什么建议吗
谢谢
阿诺德这是你的问题:
cmd.CommandType=CommandType.storedProcess
在访问中没有这样的东西。如果按原样读取查询,请将其设为.Table。如果您要编写select语句,请使用.Text.事实上,Access确实支持相当简单的语句,尽管我自己从来没有机会使用过。Meredith,谢谢您的快速回复。不幸的是,CommandType.Text或.TableDirect在复杂查询中给出了相同的错误。简单查询可以与commandtype.storedprocedure一起使用。谢谢Gord,我是否混淆了存储过程和查询?我想我可以使用commandtype.StoredProcess运行select查询。幼稚?还是不明白为什么简单查询可以工作。解决了:我删除了复杂的子查询…作为Dagnumer从查询中删除,现在它可以工作了。看起来Access不喜欢被告知执行子查询,或者C不知道如何处理结果。。。。。我不知道。