none
请教:必须声明变量 RRS feed

  • 问题

  • 这是我的代码:
     <asp:SqlDataSource ID="SqlDataSource3" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString3 %>"
            ProviderName="<%$ ConnectionStrings:ConnectionString3.ProviderName %>" SelectCommand="SELECT * FROM [vwICBill_26] where fsupplyidname=(select fname from t_supplier where (fnumber=@fnumber as string))" >
            <SelectParameters>
                <asp:SessionParameter Name="fnumber" SessionField="username" Type="String" />
            </SelectParameters>
        </asp:SqlDataSource>

    结果运行后却出现以下错误:


    必须声明变量 '@fnumber'。

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.Data.OleDb.OleDbException: 必须声明变量 '@fnumber'。

    源错误:

    执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息
    2009年6月25日 12:10

答案

  • 还是不行啊,说[dbo].[GetOrdersByUserName]是无效对象,晕,怎么回事?
    俺是新手,新人的新,新手的手!!

    ALTER 事修改,换成 Create 你数据库里没创建存储过程 ,先创建就可以了
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月27日 14:25
    版主

全部回复

  • as string

    去掉试验一下


    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月26日 11:36
    版主
  • 去掉不行才加上的啊,加上也不行。


    俺是新手,新人的新,新手的手!!

    是不是在嵌套的WHERE里不能加上变量啊!!

    昨天晚上我还换了成了join的,也还是不行!!
    2009年6月26日 12:29
  • 去掉不行才加上的啊,加上也不行。


    俺是新手,新人的新,新手的手!!

    是不是在嵌套的WHERE里不能加上变量啊!!

    昨天晚上我还换了成了join的,也还是不行!!

    你能说你想实现什么,我看看能不能给些参考意见,知道你这个事隔数据源,但是不知道你想使用sql语句实现什么功能的查询~
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月26日 13:54
    版主
  • 我想实现的功能是:
      以登陆用户名作为查询条件,在第一张表里查询出客户公司的名字,然后,再以这个名字查询这个客户的订单(订单是一个视图)。就是这个样


    也就是说,客户用他的用户名登陆,只能看到他自己的订单情况。
    登陆名是客户的代码,和用户名一起放在一张表里,订单是另一张表(一个视图)里只有客户的名字及其订单情况。


    俺是新手,新人的新,新手的手!!
    2009年6月27日 3:30
  • 我想实现的功能是:
      以登陆用户名作为查询条件,在第一张表里查询出客户公司的名字,然后,再以这个名字查询这个客户的订单(订单是一个视图)。就是这个样


    也就是说,客户用他的用户名登陆,只能看到他自己的订单情况。
    登陆名是客户的代码,和用户名一起放在一张表里,订单是另一张表(一个视图)里只有客户的名字及其订单情况。


    俺是新手,新人的新,新手的手!!
    这个可以再存储过程里实现,或者SQL语句,你分开做也可以,第一步根据用户查询公司的名字,第二部根据公司名字查询订单。也可以放在一个SQL语句里执行,最好是放存储过程里,这样的话效率高,而且两部可以再一个存储过程里实现~
      我先去银行一下,下午回来给你写个参考的SQL代码。

    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月27日 3:38
    版主
  • 谢谢!!啊,谢谢!!


    俺是用在APS.NET 2.0里的
    俺是新手,新人的新,新手的手!!
    2009年6月27日 3:55
  • 谢谢!!啊,谢谢!!


    俺是用在APS.NET 2.0里的
    俺是新手,新人的新,新手的手!!

    写了好一个存储过程的参考代码,主要思路就是,用户名作为参数、根据用户名查询公司名字、根据公司名字查询该公司的全部订单。根据你实际的表字段替换,在数据库里创建完毕。然后你需要在ADO.NET数据源控件里里选择存储过程,你也可以自己写代码调用该存储过程,网上很多代码,你搜索一下就可以。
    下面是参考代码:
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER procedure [dbo].[GetOrdersByUserName]
        @UserName   nvarchar(50)         -- name of user存储过程的参数名,用户名
    as
    set nocount on
        declare @CompanyName  nvarchar(50)--companyname of the user变量放公司名字的
        ---get the companyname according to the username获取公司名字根据用户名
        select @CompanyName = CompanyName from tb_company
        where username = @UserName
        --get all order by companyname根据公司名字查询该公司所有的订单信息,返回的字段你根据自己的表来决定
        SELECT [orderid]
          ,[odername]
          ,[companyname]
        FROM [TestDB].[dbo].[tb_order]
        where [companyname] =@CompanyName

       有啥问题在交流~
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月27日 5:29
    版主
  • 非常感谢啊,等下了班来试一下。


    俺是新手,新人的新,新手的手!!
    2009年6月27日 7:37
  • 还是不行啊,说[dbo].[GetOrdersByUserName]是无效对象,晕,怎么回事?
    俺是新手,新人的新,新手的手!!
    2009年6月27日 11:54
  • 还是不行啊,说[dbo].[GetOrdersByUserName]是无效对象,晕,怎么回事?
    俺是新手,新人的新,新手的手!!

    ALTER 事修改,换成 Create 你数据库里没创建存储过程 ,先创建就可以了
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月27日 14:25
    版主
  • 还是不行啊,说[dbo].[GetOrdersByUserName]是无效对象,晕,怎么回事?
    俺是新手,新人的新,新手的手!!

    ALTER 事修改,换成 Create 你数据库里没创建存储过程 ,先创建就可以了
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com

    啊,是的,ALTER只在有了的情况下才能用,新建的情况下只能用CREATE

    测试的最终结果是。。。。。。啊!!!!!!!!!!成功了,嘿嘿

    今天晚上回去再把存储过程那几章翻来看看,嘿嘿

    谢谢啦!!

    有联系方式不?留一个吧,有问题好直接向你请教!!
    俺是新手,新人的新,新手的手!!
    2009年6月28日 12:25
  • 还是不行啊,说[dbo].[GetOrdersByUserName]是无效对象,晕,怎么回事?
    俺是新手,新人的新,新手的手!!

    ALTER 事修改,换成 Create 你数据库里没创建存储过程 ,先创建就可以了
    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com

    啊,是的,ALTER只在有了的情况下才能用,新建的情况下只能用CREATE

    测试的最终结果是。。。。。。啊!!!!!!!!!!成功了,嘿嘿

    今天晚上回去再把存储过程那几章翻来看看,嘿嘿

    谢谢啦!!

    有联系方式不?留一个吧,有问题好直接向你请教!!
    俺是新手,新人的新,新手的手!!
    msn群:group535993@msnzone.cn,你直接加就可以了~

    Frank.Xu Lei--谦卑若愚,好学若饥
    专注于.NET平台下分布式应用系统开发和企业应用系统集成
    Focus on Distributed Applications Development and EAI based on .NET
    老徐的博客:http://frank_xl.cnblogs.com
    2009年6月28日 12:34
    版主