Tag: ms access

EmguCV – 面部识别 – 使用Microsoft Access数据库中的训练集时,“对象引用未设置”exception

我一直在使用EmguCV(C#)开发人脸识别应用程序。 如果我将脸部图像(训练集)存储在简单的Windows文件夹中,我就可以完成所有工作。 但是,在我尝试迁移面部图像以存储在Microsoft Access数据库中之后,当应用程序尝试时,经常会发生“未设置为对象实例的对象引用”exception消息(并非总是如此,但大部分时间)从videoFeed中识别脸部。 有趣的是,如果不发生exception,识别实际上仍然可以正常工作。 这是我的程序代码的片段,使用Windows文件夹和数据库: 从Windows文件夹中读取存储的图像 private void FaceRecognition_Load(object sender, EventArgs e) { //if capture is not created, create it now if (capture == null) { try { capture = new Capture(); } catch (NullReferenceException excpt) { MessageBox.Show(excpt.Message); } } if (capture != null) { if (captureInProgress) { Application.Idle -= ProcessFrame; } else { […]

检查OleDb表中是否存在列

我正在尝试检查列是否存在,如果不存在,请添加它。 我尝试了几种解决方案,包括这个 ,但Access db的语法不正确。 这是我到目前为止: public void Update(string task, string dbPath, string tableName = “Frames”) { OleDbConnection db = new OleDbConnection(“Provider=Microsoft.JET.OLEDB.4.0;data source=” + dbPath); db.Open(); OleDbCommand command = db.CreateCommand(); command.CommandText = “COL_LENGTH(‘Frames’,’SetNumber’)”; Debug.WriteLine(command.ExecuteReader()); /* string[] restrictions = new string[] {null, null, tableName}; DataTable dtColumns = db.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, restrictions); foreach (DataColumn column in dtColumns.Columns) { Debug.WriteLine(column.ColumnName); }*/ […]

无法使用OleDb将DateTime插入Access

尝试在Access中插入一行数据时,出现“条件表达式中的数据类型不匹配”错误。 在搞砸了一下之后,我把它缩小到DateTime是个问题。 这是我的代码: class ABGDA { private OleDbConnection dbConn; private OleDbCommand dbCmd; private OleDbDataReader dbReader; private string sConnection; private string sql; private ABG abg; public void insertProgressNotes(ABG ABG) { abg = ABG; sConnection = “Provider=Microsoft.ACE.OLEDB.12.0;” + “Data Source=SimEMR.accdb”; dbConn = new OleDbConnection(sConnection); dbConn.Open(); sql = “INSERT INTO ABG (AccountNo, LabDate, PAO2, PACO2, SAO2, Bicarbonate, BaseExcess, […]

使用OleDbDataAdapter和DataSet更新Access.mdb

我正在尝试更新一个简单的ms访问数据库。 我在某些表上得到一个Exception,在搜索之后,我发现了Microsoft支持 – 语法错误 。 我相信这意味着其中一个列名使用保留字。 这似乎是这种情况,因为除了具有“GUID”作为列名之一的保留字之外,所有表都更新。 这个页面还说明我应该使用OleDbAdapter和DataSet来解决这个问题。 不幸的是我无法更改列的名称。 这是我无法控制的,所以我必须与给予我的东西一起工作。 我没有必要对数据库做太多工作,而且我所知道的一切都是从互联网上的例子中学到的(可能是坏的)。 那么使用OleDbAdapter和dataSet更新数据库的正确方法是什么? 我不认为我应该使用DataTable或OleDbCommandBuilder,我相信该解决方案与参数有关。 但我的谷歌技能很弱。 OleDbConnection conn = new OleDbConnection(“Provider=Microsoft.Jet.OLEDB.4.0; ” + Data Souce=” + source); conn.Open(); OleDbAdapter adapter = new OleDbDataAdapter(“SELECT * From ” + table, conn); OleDbCommandBuiler cmdBuiler = new OleDbCommandBuilder(adapter); DataSet = new DatSet(); adapter.InsertCommand = cmdBuilder.GetInertCommand(true); // Is this necessary? adapter.Fill( dataSet, […]

Dapper和MS Access – 读取工作,写入不起作用

让我们首先解决这个问题:我使用MS Access DB时遇到困难,我无法改变它。 这很好用: using (OleDbConnection conn = ConnectionHelper.GetConnection()) { conn.Open(); var results = conn.Query( “select FirstName from Students where LastName = @lastName”, new { lastName= “Smith” } ); conn.Close(); } 这很好用: using (OleDbConnection conn = ConnectionHelper.GetConnection()) { OleDbCommand cmd = new OleDbCommand( “update Students set FirstName = @firstName, City = @city where LastName = […]

VB6中的.NET对象不使用regasm.exe?

我正在为学校建立软件的软件公司,所以我们的客户端机器通常被锁定,这使我们很难在其上安装任何东西。 我们的旧系统主要基于(非常大的)MS Access项目,因此只需从本地文件夹运行即可解决访问问题。 我已经被赋予了将一些系统重新开发到c#.NET的任务 – 但是在过渡阶段能够让访问项目解开.NET事件会很好。 我今天玩了几个小时的com interops但是afaik使这些工作的唯一方法是用RegAsm.exe注册它们 – 不幸的是,这不是客户端环境中的一个选项。 我尝试过GetObject / CreateObject,但在引用dll或tlb文件时都不起作用,还有其他方法可以实现吗? 理想的解决方案是将com interop dll放在与Access项目相同的目录中。 是的,在有人说之前,我知道MS Access是邪恶的,只适合非常小的项目 – 但我只是在4个月前来到这里… 马龙

如何从C#代码中捕获Microsoft Access VBA调试错误?

我有一个C#程序,它打开几个Microsoft Access文件,并从每个文件中执行function。 本质上,代码看起来像这样: Microsoft.Office.Interop.Access.Application app = new Microsoft.Office.Interop.Access.Application(); app.Visible = true; app.OpenCurrentDatabase(accessFileFullPath, false, “”); //Call the function app.Eval(function); 但是,当VBA代码中发生调试错误时,我想将其捕获到我的C#程序中。 请不要回答:“在您的VBA程序中捕获错误”。 由于我不会涉及的原因,这是不可能的。 我过去使用的一种方法是让一个线程间歇性地监视任何Visual Basic Debug窗口的句柄(FindWindowEx Win32函数返回非零值)。 我不喜欢这种方法,也不想继续使用它。 我找到了这个适用于Microsoft Excel的线程 。 本质上,它使用Microsoft.VisualBasic.CallByName()函数,它显然可以被捕获在try / catch块中,而无需用户交互。 但是,我无法使用Microsoft Access – 主要是因为我无法弄清楚如何使用此命令调用函数/ sub。 任何建议都将真诚地感谢! 编辑:正如我在下面的一个答案中提到的,我尝试将Eval()包装在try / catch块中,我的C#程序似乎忽略它,直到用户点击“Microsoft Visual Basic”上的“结束”按钮“错误对话框。 我不希望任何用户交互,而是想要捕获VBA错误以便在我的C#程序中处理。

如何获取Access(Jet)数据库中的表列表?

我需要查看我的c#程序使用的Access数据库中是否存在表。 知道有其他数据库的SQL命令将返回表列表。 Access / Jet数据库是否有这样的命令?

Microsoft.Jet.OLEDB.4.0替代MDB文件上的64位访问

我有许多其他问题,我无法使用Microsoft.Jet.OLEDB.4.0从我的64位计算机访问Microsoft Access(MDB文件)。 我知道它没有64位版本,我需要针对x86进行编译。 所以我的问题是:你知道任何其他支持64位访问的.NET Access for Microsoft Access吗?

如何使用oledb将记录插入访问表?

我在ms访问中有一个这个Items表 Items(Table) Item_Id(autonumber) Item_Name(text) Item_Price(currency) 我正在尝试使用此代码插入记录。 OleDbConnection myCon = new OleDbConnection(ConfigurationManager.ConnectionStrings[“DbConn”].ToString()); OleDbCommand cmd = new OleDbCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = “insert into Items ([Item_Name],[Item_Price]) values (‘” + itemNameTBox.Text + “‘,'” + Convert.ToDouble(itemPriceTBox.Text) + “‘)”; cmd.Connection = myCon; myCon.Open(); cmd.ExecuteNonQuery(); System.Windows.Forms.MessageBox.Show(“An Item has been successfully added”, “Caption”, MessageBoxButtons.OKCancel, MessageBoxIcon.Information); myCon.Close(); 代码运行没有错误,但最后没有在表中找到记录我正在做什么错误?