C#OledbCommand返回无效数据

时间:2014-02-04 11:38:57

标签: c# sql ms-access

伙计们,

我被困在一段代码中,现在已经困扰了我很长一段时间了。我真的很想得到你的帮助。

我要做的是连接到Microsoft Access数据库,创建SQL语句,创建OledbCommand,添加OledbParameters并尝试执行查询。但是,查询返回的数据不正确。

首先,这是我的代码:

string dbPath = "D:\\reports.mdb";

List<string> emails = new List<string>();
emails.Add("user1@e2k10.lcl");
emails.Add("aliasuser1@e2k10.lcl");

StringBuilder sbContactsLastComm = new StringBuilder();
sbContactsLastComm.Append("SELECT ");
sbContactsLastComm.Append("MAX([meces_processed].[datetime]) ");

sbContactsLastComm.Append("FROM ");
sbContactsLastComm.Append("[meces_processed], ");
sbContactsLastComm.Append("[meces_users], ");
sbContactsLastComm.Append("[meces_emailusers] ");

sbContactsLastComm.Append("WHERE ");
sbContactsLastComm.Append("[meces_emailusers].[userid] = [meces_users].[id] ");
sbContactsLastComm.Append("AND [meces_emailusers].[emailid] = [meces_processed].[uniqueguid] ");
sbContactsLastComm.Append("AND [meces_users].[emailaddress] = ? ");
sbContactsLastComm.Append("AND [meces_processed].[uniqueguid] IN ");
sbContactsLastComm.Append("( ");

sbContactsLastComm.Append("SELECT DISTINCT ");
sbContactsLastComm.Append("[meces_processed].[uniqueguid] ");

sbContactsLastComm.Append("FROM ");
sbContactsLastComm.Append("[meces_emailusers], ");
sbContactsLastComm.Append("[meces_users], ");
sbContactsLastComm.Append("[meces_processed] ");

sbContactsLastComm.Append("WHERE ");
sbContactsLastComm.Append("[meces_emailusers].[userid] = [meces_users].[id] ");
sbContactsLastComm.Append("AND [meces_emailusers].[emailid] = [meces_processed].[uniqueguid] ");
sbContactsLastComm.Append("AND [meces_users].[emailaddress] IN ( ");

for (int i = 0; i < emails.Count; ++i)
    sbContactsLastComm.Append("?, ");

sbContactsLastComm.Remove(sbContactsLastComm.Length - 2, 2);
sbContactsLastComm.Append(" ) ) ");

using (var conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbPath))
{
    conn.Open();

    OleDbCommand cmd = new OleDbCommand(sbContactsLastComm.ToString(), conn);
    cmd.Parameters.Add(new OleDbParameter("contact", "user@domain.com"));


    for (int i = 0; i < emails.Count; ++i)
        cmd.Parameters.Add(new OleDbParameter("email" + i, emails[i]));

    foreach (OleDbParameter p in cmd.Parameters)
        Console.WriteLine(p.ParameterName + " = " + p.Value);

    object o = cmd.ExecuteScalar();

    conn.Close();
}

其次,这是我尝试的内容:

我输出了sql语句,这是正确的。我输出了OledbCommand参数,它们也是正确的。

我还尝试过将sql放入Microsoft Access并用实际参数替换?s并成功执行语句。然后我也尝试将参数硬编码到sql而不是通过使用OledbParameters,它也运行良好。

我不想最终得到硬编码我的sql语句,因为我想使用OledbParameters是显而易见的原因。

我尝试使用SqlServer(和SqlConnection等)完全相同的东西,这非常好用。虽然Access仍然没有运气!预期结果应该是日期和时间,但是,我收到一个空结果(DBNULL)。

任何帮助/指示都会非常感激!!

0 个答案:

没有答案