none
关于使用Access数据库和AccessDataSource数据源时的SQL问题 RRS feed

  • 问题

  • <asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/main.mdb"
                                    SelectCommand="SELECT [id], [title] FROM [price]"
                                    DeleteCommand="DELETE FROM [priceinfo] WHERE [pid]=@id   DELETE FROM [price] WHERE [id]=@id"></asp:AccessDataSource>

    首先这里面的DeleteCommand语句测试想当然的错误的(程序提示是 语法错误),但是我的业务是需要 先删除子表相关数据,然后再删除主表信息。请问该怎么实现?


    is first
    • 已移动 孟宪会Moderator 2010年5月5日 1:32 (发件人:.NET Framework 一般性问题讨论区)
    2010年5月2日 9:32

答案

  • 一般用sp。(access里叫查询[query])

    还可以尝试在两个sql中间加个 ; 来分隔,部分操作是支持多语句的,这个不清楚。

    如果不能用sp,那么尝试一下sql注入的方法(不得不承认,黑客用的技术要更牛一点,但很不推荐,只作为救急用)

    比如

    Select (DELETE FROM [priceinfo] WHERE [pid]=@id), (DELETE FROM [price] WHERE [id]=@id) From [price] where [pid] = 0;

    各个数据库对查询的对待方式不一样,得试试看了。


    霸王
    2010年5月2日 13:15
  • 在SQL 里  DELETE FROM [priceinfo] WHERE [pid]=@id   DELETE FROM [price] WHERE [id]=@id   这种一次执行N条命令的语法在SQLserver是可以的 。但我这里用的是Access ,过不去

    is first
    2010年5月2日 13:56

全部回复

  • 一般用sp。(access里叫查询[query])

    还可以尝试在两个sql中间加个 ; 来分隔,部分操作是支持多语句的,这个不清楚。

    如果不能用sp,那么尝试一下sql注入的方法(不得不承认,黑客用的技术要更牛一点,但很不推荐,只作为救急用)

    比如

    Select (DELETE FROM [priceinfo] WHERE [pid]=@id), (DELETE FROM [price] WHERE [id]=@id) From [price] where [pid] = 0;

    各个数据库对查询的对待方式不一样,得试试看了。


    霸王
    2010年5月2日 13:15
  • 在SQL 里  DELETE FROM [priceinfo] WHERE [pid]=@id   DELETE FROM [price] WHERE [id]=@id   这种一次执行N条命令的语法在SQLserver是可以的 。但我这里用的是Access ,过不去

    is first
    2010年5月2日 13:56
  • 假设您是显示主表数据,点击Delete自动删除子表相关数据,最后删除自身数据,请这样尝试:

    1)在GridView的以下事件中获取代码(获取删除的主键):

            void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
            {
                ViewState["id"] = e.Keys[e.RowIndex];
            }

    2)然后在AccessDataSource的Deleting事件中这样处理:

    void ads_Deleting(object sender, SqlDataSourceCommandEventArgs e)
            {
                string id = ViewState["id"].ToString();
                //您使用SqlCommand构造一个根据主表的id删除子表的所有内容,然后执行即可。
            }

    2010年5月3日 3:13
  • 你好,在Access數據庫中是不支持多條語句的,只有一條條的執行,即便是sql 數據庫中間也需要用分號隔開

    所以你可以按照他們幾位的建議 在事件中刪除


    I see you~http://hi.baidu.com/1987raymondMy Blog~~~
    2010年5月5日 1:22
    版主
  • 在cs代码实现很简单,为何非要使用DeleteCommand?
    【孟子E章】
    2010年5月5日 1:31
    版主
  • T-SQL习惯了。老感觉语句都可以拼一起的。
    is first
    2010年5月8日 13:00