C# 在C中从access读取一条记录#

C# 在C中从access读取一条记录#,c#,ms-access,C#,Ms Access,我的要求是从access文件中读取日期列,并使用一个值将其附加到文件名,以便使用db值创建带有日期时间戳的文件 我正在尝试以下方法,但它给了我一个异常“行/列不存在数据”: 这是密码 OleDbConnection conn = new OleDbConnection(connectionString); OleDbConnection conn1 = new OleDbConnection(connectionString); string d

我的要求是从access文件中读取日期列,并使用一个值将其附加到文件名,以便使用db值创建带有日期时间戳的文件

我正在尝试以下方法,但它给了我一个异常“行/列不存在数据”:

这是密码

        OleDbConnection conn = new OleDbConnection(connectionString);
        OleDbConnection conn1 = new OleDbConnection(connectionString);

        string dt  = "SELECT top 1 Date FROM Events";


        OleDbCommand cmd1 = new OleDbCommand(dt, conn1);
        conn1.Open();
        OleDbDataReader rdr = cmd1.ExecuteReader();

        string time_stmp = rdr.GetInt32(0).ToString();

        rdr.Close();
        conn1.Close();

        string path = text_dir + "\\" + time_stmp + "_" + "BWC_Ejournal.txt";
DATE
是ACE/Jet SQL中的一个参数。请尝试以下方法:

string dt  = "SELECT TOP 1 [Date] FROM Events";
编辑 仔细查看代码后,我注意到您在打开连接之前创建了
OleDbCommand
对象。我也看到这会引起问题。FWIW,以下代码适用于我:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;

namespace oleDbTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var con = new OleDbConnection(
                        "Provider=Microsoft.ACE.OLEDB.12.0;" +
                        @"Data Source=C:\__tmp\main.accdb;"))
            {
                con.Open();
                using (var cmd = new OleDbCommand(
                            "SELECT TOP 1 [Date] FROM [Events]", con))
                {
                    string time_stmp =  Convert.ToDateTime(cmd.ExecuteScalar()).ToString("yyyyMMdd");
                    Console.WriteLine(time_stmp.ToString());
                }
                con.Close();
            }
            Console.WriteLine("Done.");
            System.Threading.Thread.Sleep(2000);
        }
    }
}
DATE
是ACE/Jet SQL中的一个参数。请尝试以下方法:

string dt  = "SELECT TOP 1 [Date] FROM Events";
编辑 仔细查看代码后,我注意到您在打开连接之前创建了
OleDbCommand
对象。我也看到这会引起问题。FWIW,以下代码适用于我:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;

namespace oleDbTest
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var con = new OleDbConnection(
                        "Provider=Microsoft.ACE.OLEDB.12.0;" +
                        @"Data Source=C:\__tmp\main.accdb;"))
            {
                con.Open();
                using (var cmd = new OleDbCommand(
                            "SELECT TOP 1 [Date] FROM [Events]", con))
                {
                    string time_stmp =  Convert.ToDateTime(cmd.ExecuteScalar()).ToString("yyyyMMdd");
                    Console.WriteLine(time_stmp.ToString());
                }
                con.Close();
            }
            Console.WriteLine("Done.");
            System.Threading.Thread.Sleep(2000);
        }
    }
}

在访问OleDbDataReader对象的数据之前,需要对其调用Read()方法

例如


这还允许处理没有数据返回的情况。

在访问OleDbDataReader对象的数据之前,需要调用该对象的Read()方法

例如


这也将允许处理没有数据返回的情况。

您的查询是否返回任何信息?抱歉,这很明显,但您是否确认您的连接工作正常?它们是否连接到正确的数据库?“Events”表中确实有数据吗?yes Events表中有数据,并且(很明显,抱歉!),当您直接对Access数据库运行此查询时,它会返回数据?yes,它会返回数据,我刚刚对table returns 1 Record执行了查询您的查询是否返回了任何内容?抱歉,这太明显了,但是你确认你的连接正常吗?它们是否连接到正确的数据库?“Events”表中确实有数据吗?yes Events表中有数据,而且(很明显,很抱歉!),当您直接对Access数据库运行此查询时,它会返回数据?yes它有,我刚刚对表执行了查询,返回了1条记录