【问题标题】:Trouble Creating Stored Procedure Insert Statement in .NET with VisualStudio/TableAdapter使用 VisualStudio/TableAdapter 在 .NET 中创建存储过程插入语句时遇到问题
【发布时间】:2014-03-12 04:59:37
【问题描述】:

我正在尝试为我的持久层的类型化 DataSet 创建一个TableAdapter。我将从文件中读取信息,然后将其插入数据库中。

  • 文件中的信息是序列号、VOCLevel、日期、时间、准确度。
  • 我需要插入的信息是 MonitorID、VOCLevel、Date、Time、Accuracy。

SerialNumber 与数据库中的 MonitorID 相关。我试图在 Visual Studio 的 TableAdapter 配置向导中编写的插入是:

INSERT INTO VOCReading (MonitorID, Level, Date, Time, Accuracy)
VALUES( (SELECT MonitorID FROM Monitor WHERE SerialNumber= @SerialNumber), @Level, @Date, @Time, @Accuracy)

我得到的错误是

必须声明标量变量'@SerialNumber'

我该如何解决这个问题? SerialNumberMonitor 表中,但我需要插入的表是VOCReading

【问题讨论】:

  • 你的命令参数列表中有@SerialNumber吗?另外,您的插入查询是错误的。
  • 是的,我不小心输入了几次 SensorName 而不是 SerialNumber 几次,但这已得到修复。 SerialNumber 不是我要插入的表中的列。序列号来自 Arduino。但是,每个 SerialNumber 都直接映射到 MonitorID,它是 Monitor 表的主键。

标签: sql .net visual-studio sql-insert tableadapter


【解决方案1】:

INSERT 命令有两种形式:

(1) 要么您拥有所有可用的值,如文字或 SQL Server 变量 - 在这种情况下,您可以使用 INSERT .. VALUES() 方法:

INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
VALUES(Value1, Value2, @Variable3, @Variable4, ...., ValueN)

注意:我建议总是明确指定要插入数据的列列表 - 这样,如果您的表突然有一个额外的列,或者如果您的表有一个 IDENTITY 或计算列。是的 - 需要做更多的工作 - 一次 - 但是你的 INSERT 声明尽可能可靠,如果你的表发生变化,你就不必经常摆弄它。

(2) 如果您将所有值都作为文字和/或变量,但是您想依赖另一个表、多个表或视图,提供值,那么您可以使用INSERT ... SELECT ... 方法:

INSERT INTO dbo.YourTable(Col1, Col2, ...., ColN)
   SELECT
       SourceColumn1, SourceColumn2, @Variable3, @Variable4, ...., SourceColumnN
   FROM
       dbo.YourProvidingTableOrView

在这里,您必须在 SELECT 中定义与 INSERT 期望的一样多的项目 - 这些可以是表(或视图)中的列,也可以是文字或变量.再次:明确提供要插入的列列表 - 见上文。

你可以使用一个或另一个 - 但你不能混合使用这两个 - 你不能使用 VALUES(...) 然后在中间有一个 SELECT 查询你的价值观列表 - 选择两者之一 - 坚持下去。

因此,在您的情况下,您必须使用 INSERT .. SELECT 方法,因为您需要从表中选择某些内容 - 您不能使用 VALUES 方法:

INSERT INTO VOCReading (MonitorID, Level, Date, Time, Accuracy)
    SELECT MonitorID, @Level, @Date, @Time, @Accuracy
    FROM Monitor 
    WHERE SerialNumber = @SerialNumber

【讨论】:

  • 你我的朋友,真棒!
猜你喜欢
  • 2011-02-18
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
相关资源
最近更新 更多