用于访问和 SQL 服务器的 C# TableAdapter

C# TableAdapter for both Access and SQL Server

我正在尝试创建一款软件,允许客户将一台设备生成的数据上传到他们自己的数据库中。

为此,我在 Visual Studio 2015 年基于具有所需 table 的 *.mdb 文件设计了一个数据集。 table 适配器向导在为强类型数据集设计 table 适配器和查询方面做得非常出色。此 table 中的所有类型都是文本,但日期和时间字段除外,它们是 Date/Time。生成的语句如下:

INSERT INTO `tblVoltechRunID` (`RunID`, `Date`, `Time`, `ATUnitID`, `PartID`, `FixtureID`, `OperatorID`, `BatchID`, `TransformerSerialNo`, `OverallResult`) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

但是,当切换到 SQL 数据库时,重音符导致插入语句因语法错误而失败。手动删除重音符号导致查询成功。

是否可以使用visual studio的数据集设计器制作跨平台兼容的TableAdapter?

?不是您的 SqlCommand.Parameters 的有效名称参数。您应该使用名称参数。

SqlCommand cmd = new SqlCommand();
cmd.Connection = conn; //your SqlConnection object

cmd.CommandText = @"
INSERT INTO tblVoltechRunID 
     (RunID, Date, Time, ATUnitID, PartID, FixtureID, OperatorID, BatchID, TransformerSerialNo, OverallResult) 
VALUES 
     (@RunID, @Date, @Time, @AtUnitID, @PartID, @FixtureID, @OperatorID, @BatchID, @TransformerSerialNo, @)";

cmd.Parameters.AddWithValue("RunID", runID); //runID value which you want to put in RunID variable
//define other parameters in same way

Is it possible to use visual studio's dataset designer to make a cross platform compatible TableAdapter?

您也许可以利用...

  1. Access SQL 和 T-SQL 都支持方括号作为 table 和列名的分隔符,并且
  2. System.Data.OleDb 允许 命名参数,尽管它忽略 名称并将参数严格视为位置参数

... 并将为 InsertCommand 生成的 CommandText 破解为

INSERT INTO [tblVoltechRunID] 
([RunID], [Date], [Time], [ATUnitID], [PartID], [FixtureID], [OperatorID], [BatchID], [TransformerSerialNo], [OverallResult]) 
VALUES 
(@RunID, @Date, @Time, @ATUnitID, @PartID, @FixtureID, @OperatorID, @BatchID, @TransformerSerialNo, @OverallResult) 

我刚刚在 Access 数据库中用 TableAdapter 为 table 测试了类似的东西,它对我有用,尽管它破坏了 TableAdapter 的设计器视图(而且,老实说,这一切看起来对我来说有点太狡猾了。