繁体   English   中英

C#检索MS Access备注字段

[英]C# retrieve MS Access Memo Field

我正在使用C#(Visual Studio 2015)并与MS Access数据库进行通信。 我的下面的代码工作正常,除了_statusLadder变量从“备注”数据类型字段返回空值(我在MS Access中运行相同的查询,并提取正确的备注值)。

我也尝试过:

string _statusLadder = "";

有人可以帮我弄清楚如何从MS Access检索Memo数据类型字段吗?

看到代码:

private string retrieveJobByID(int xID)
    {
        connection.Open();
        OleDbCommand command = new OleDbCommand();
        command.Connection = connection;

        command.CommandText = "SELECT TOP 1 [ID], [JOB_NUM], [CUSTOMER], [MODELNO], [CREATE_DATE], [MODEL_FAMILY], [VER], [COM_PROTOCOL], [STATUS_LADDER] FROM tbl_job_tables WHERE([ID] = ?)";
        command.Parameters.Add("@ID", OleDbType.Integer).Value = xID;

        OleDbDataReader reader = command.ExecuteReader();

        string _id = "", _jobnum = "", _customer = "", _modelFamily = "", _modelNum = "", _createDate = "", _ver = "", _comProtocol = "";
        var _statusLadder = "";

        while (reader.Read())
        {
            _id = reader["ID"].ToString();
            _jobnum = reader["JOB_NUM"].ToString();
            _customer = reader["CUSTOMER"].ToString();
            _modelFamily = reader["MODEL_FAMILY"].ToString();
            _modelNum = reader["MODELNO"].ToString();
            _createDate = reader["CREATE_DATE"].ToString();
            _ver = reader["VER"].ToString();
            _comProtocol = reader["COM_PROTOCOL"].ToString();
            _statusLadder = reader["STATUS_LADDER"].ToString();  //<-- This returns empty when it should be ~300 characters.
            Console.WriteLine("Status is: " + _statusLadder);
        }

        if (!reader.IsClosed)
        {
            reader.Close();
        }

        if (connection.State == ConnectionState.Open) { 
            connection.Close();
        }

        string result = _id + "|" + _jobnum + "|" + _customer + "|" + _modelFamily + "|" + _modelNum + "|" + _createDate + "|" + _ver + "|" + _comProtocol + "|" + _statusLadder;


        return result;
    }

编辑 -这是我的MS Access 2010安装程序(ACCDB)的一些图片:

(1)-第一个显示SQL查询。 我输入ID = 116作为参数

(2)-第二张图片显示了查询的结果。 您可以看到“ STATUS_LADDER”返回正确的值。

(3)-这是字段“ STATUS_LADDER”的表的设置(在设计模式下)

在此处输入图片说明

从Access数据库读取备忘录/长文本字段没有问题。 试试这个代码(我简化了一些)。

using System.Data.OleDb;   //other standard namespaces needed also.   


public class AccessDataHelper
{
    string myConn;  //value set in this class constructor

     //Constructor
    public AccessDataHelper()
    {
        myConn = System.Configuration.ConfigurationManager.ConnectionStrings["LocalDB"].ToString();
        //If myConn is null, then a real problem.
    }

    public List<KAddress> GetUnvalidatedAddresses()
    {
        List<KAddress> kAddresses = new List<KAddress>();
        string sqlCommandText = String.Empty;

        using (OleDbConnection myOleDbConnection = new OleDbConnection())
        {

            if (myConn != null)
            {
                myOleDbConnection.ConnectionString = myConn;

                sqlCommandText = "SELECT tblAddresses.AddressId, " +
                    "tblAddresses.USPSValidated, tblAddresses.Notes, " +
                    "tblAddresses.Address, tblAddresses.City, tblAddresses.State, tblAddresses.ZIP " +
                    "FROM tblAddresses  " +
                    "WHERE ( ((IsNull(tblAddresses.USPSValidated)) Or ((tblAddresses.USPSValidated) <> 1)) ) ";
                    //Field USPSValidated is an integer 1=USPS valid address

                OleDbCommand oleDbCommand = new OleDbCommand(sqlCommandText, myOleDbConnection);
                oleDbCommand.Connection.Open();
                OleDbDataReader reader = oleDbCommand.ExecuteReader();

                while (reader.Read())
                {
                    KAddress kAddress = new KAddress();

                    kAddress.AddressID = Convert.ToInt32(reader["AddressID"]);
                    kAddress.Notes = reader["Notes"].ToString();    // Notes is a memo,long text field in Access

                    kAddress.Address = reader["Address"].ToString();
                    kAddress.City = reader["City"].ToString();
                    kAddress.State = reader["State"].ToString();
                    kAddress.Zip = reader["Zip"].ToString();

                    kAddresses.Add(kAddress);
                }
            }
        }

        return kAddresses;
    }

} //end of class

暂无
暂无

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

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