繁体   English   中英

从C#中的访问中读取一条记录

[英]reading one record from access in C#

我的要求是从访问文件中读取Date列并使用一个值将其附加到文件名,以便使用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);
        }
    }
}

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

例如

OleDbDataReader rdr = cmd1.ExecuteReader();
string time_stmp = "";

if(rdr.Read())
{
    time_stmp = rdr.GetInt32(0).ToString();
}
else
{
    //handle no data situation here
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM