从c#访问中读取一条记录
本文关键字:一条 记录 读取 访问 | 更新日期: 2023-09-27 18:17:26
我的要求是从访问文件中读取日期列,并使用一个值将其附加到文件名,以便使用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";
您需要在访问OleDbDataReader对象的数据之前调用Read()方法。
。
OleDbDataReader rdr = cmd1.ExecuteReader();
string time_stmp = "";
if(rdr.Read())
{
time_stmp = rdr.GetInt32(0).ToString();
}
else
{
//handle no data situation here
}
这也将允许更优雅地处理没有返回数据的情况。
DATE
是ACE/Jet SQL中的保留字。试试这个:
string dt = "SELECT TOP 1 [Date] FROM Events";
编辑
在仔细查看代码时,我注意到在打开连接之前创建了OleDbCommand
对象。我也见过这引起的问题。顺便说一句,下面的代码为我工作:
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);
}
}
}