【问题标题】:I am getting the error while Adding Multiple Records to table using mssql views join使用 sql 视图连接向表添加多条记录时出现错误
【发布时间】:2014-03-05 17:11:34
【问题描述】:

我有 3 个或更多不同的表: products 、 pruducts_features 、 Pruduct_Prices 等。

在插入数据时,我得到了这个错误:

视图或函数“View_1”不可更新,因为修改会影响多个基表。`

        SqlCommand cmd = new SqlCommand("Insert into View_1 
       (pname,pcount,pprice,pInfo) values(@pname,@pcount,@pprice,@pInfo)"
       , baglanti);

        cmd.Parameters.Add("@pname",  txt1.Text);
        cmd.Parameters.Add("@pprice", txt2.Text);
        cmd.Parameters.Add("@pprice", txt3.Text);
        cmd.Parameters.Add("@pInfo",  txt4.Text);
        cmd.ExecuteNonQuery();

`

我需要什么来解决这个问题?

【问题讨论】:

    标签: asp.net sql sql-server join view


    【解决方案1】:

    只有在投影一个表时,View 才能处理插入 - 这个错误消息说得很清楚。如果你真的想更新几个表中的数据 - 你应该为此运行几个 sql 查询,可能在一个事务中。另一方面,如果您只想更新一个表 - 在查询中指定其名称而不是 View_1

    还要确保指定完整的参数名称,包括@ 符号:

    cmd.Parameters.Add("@pname",  txt1.Text);
    

    【讨论】:

    • “在交易中”是什么意思?我可能可以在我的代码中使用事务,但我以前从未听说过。
    • @MarkLaREZZA,我的意思是:SQl transactions 以及如何在ADO.NET 中使用它们
    • 我在写作过程中忘记了@符号,我明白了,你能给我一些关于那个的例子或链接吗?我也不能这样做,第二种替代方法是什么?触发或存储过程?我用的是哪一个?
    • @neon,对于交易有很多例子,只要谷歌搜索“ado.net transaction”。例如,这里是one。在最简单的情况下,只需在正确的位置调用BeginTransactionCommit。存储过程绝对是一个有效的替代方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2013-07-02
    相关资源
    最近更新 更多