【问题标题】:C# TableAdapter for both Access and SQL Server适用于 Access 和 SQL Server 的 C# TableAdapter
【发布时间】:2016-10-25 21:28:48
【问题描述】:

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

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

插入到`tblVoltechRunID`(`RunID`、`Date`、`Time`、`ATUnitID`、`PartID`、`FixtureID`、`OperatorID`、`BatchID`、`TransformerSerialNo`、`OverallResult`)值(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

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

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

【问题讨论】:

    标签: c# sql sql-server ms-access tableadapter


    【解决方案1】:

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

    您也许可以利用...

    1. Access SQL 和 T-SQL 都支持方括号作为表名和列名的分隔符,并且
    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) 
    

    我刚刚使用 TableAdapter 为 Access 数据库中的表测试了类似的东西,它对我有用,尽管它破坏了 TableAdapter 的设计器视图(老实说,这对我来说似乎有点太狡猾了喜欢)。

    【讨论】:

    • 感谢您的宝贵反馈。我同意破解生成的命令文本是狡猾的,但是如果使用 SQL 数据库,命令文本会像这样生成,所以可能不需要破解。
    【解决方案2】:

    ?不是您的 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
    

    【讨论】:

    • 关于参数名称的观点很好,但是SqlCommand#ExecuteNonQuery() 在遇到列名周围的反引号时仍然会抛出异常。
    • @GordThompson 啊,我记得你可以在这里转义这样的字段,看来我弄错了。
    猜你喜欢
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    相关资源
    最近更新 更多