private  string SQL_Self1 = "SELECT * FROM SELF WHERE ID=@ID ";
        private  string parm_ID = "@ID";        public SelfInfo GetSelf(int ID)
        {
            try
            {
                SelfInfo selfInfo = new SelfInfo();                SqlParameter[] parms = { new SqlParameter(parm_ID, SqlDbType.Int) };                parms[0].Value = ID;                using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_Self1, parms))
                {
                    if (rdr.Read())
                        selfInfo = new SelfInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4), rdr.GetString(5));
                    else
                        selfInfo = new SelfInfo();
                }
                return selfInfo;
            }
            catch(Exception err) 
            {
                
                return null;
            }
        }
'*' 附近有语法错误。
必须声明标量变量
然后一直报这个错。
不知道啥原因!

解决方案 »

  1.   

    这么简单的SQL语句,不至于错吧,我试着改为SELECT * FROM SELF WHERE 1=1 ,直接加进去也报错。
      

  2.   

    下面是我的web.config<?xml version="1.0" encoding="utf-8"?>
    <!-- 
        注意: 除了手动编辑此文件以外,您还可以使用 
        Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
         “网站”->“Asp.Net 配置”选项。
        设置和注释的完整列表在 
        machine.config.comments 中,该文件通常位于 
        \Windows\Microsoft.Net\Framework\v2.x\Config 中
    -->
    <configuration> <connectionStrings>
    <add name="ConnectionString" connectionString="Data Source=kty;DataBase=test;User ID=sa;Password=@password"/>
    </connectionStrings>
    <appSettings>
    <add key="OrdersDAL" value=" MyWeb.SQLServer"/>
    </appSettings> <system.web>
            <!-- 
                设置 compilation debug="true" 将调试符号插入
                已编译的页面中。但由于这会 
                影响性能,因此只在开发过程中将此值 
                设置为 true。
            -->
            <compilation debug="true" />
            <!--
                通过 <authentication> 节可以配置 ASP.NET 使用的 
                安全身份验证模式,
                以标识传入的用户。 
            -->
            <authentication mode="Windows" />
            <!--
                如果在执行请求的过程中出现未处理的错误,
                则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
                开发人员通过该节可以配置
                要显示的 html 错误页
                以代替错误堆栈跟踪。        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
        </system.web>
    </configuration>
      

  3.   

     private  string SQL_Self1 = "SELECT * FROM SELF WHERE ID=@ID ";
            private  string parm_ID = "@ID";        public SelfInfo GetSelf(int ID)
            {
                try
                {
                    SelfInfo selfInfo = new SelfInfo();                SqlParameter[] parms = { new SqlParameter(parm_ID, SqlDbType.Int) };                parms[0].Value = ID;                using (SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_Self1, parms))
                    {
                        if (rdr.Read())
                            selfInfo = new SelfInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetString(4), rdr.GetString(5));
                        else
                            selfInfo = new SelfInfo();
                    }
                    return selfInfo;
                }
                catch(Exception err) 
                {
                    
                    return null;
                }
            }使用SQL_Self1是参数@ID,为声明也未赋值!
      

  4.   

    你直接在数据库里运行你的sql语句看是错的不
      

  5.   

    使用SQL_Self1是参数@ID,为声明也未赋值!没明白楼上的意思
      

  6.   

    Password=@password
    你的密码是“@password”吗还带这个“@”,打开数据库连接没问题吧
      

  7.   

    "SELECT * FROM SELF WHERE ID='"+parm_ID+"' "
    或者 string sql=string.format("SELECT * FROM SELF WHERE ID={0}",parm_ID);
      

  8.   

    楼主还是断点到这个函数里面看看
    SqlHelper.ExecuteReader
      

  9.   

    要不楼主把这个函数:
    SqlHelper.ExecuteReader()
    贴上来大家帮你看看哈~
      

  10.   

            public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) {
                SqlCommand cmd = new SqlCommand();            using (SqlConnection connection = new SqlConnection(connectionString)) {
                    PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
                    object val = cmd.ExecuteScalar();
                    cmd.Parameters.Clear();
                    return val;
                }
            }
      

  11.   


    //private  string SQL_Self1 = "SELECT * FROM SELF WHERE ID=@ID ";
    //可能是SQL语句里,使用了保留字self做表名
    private  string SQL_Self1 = "SELECT * FROM [SELF] WHERE ID=@ID ";
      

  12.   

    困惑: 你的 @ID 到底应该是什么类型?如果是: string 类型, 则
                               private  string SQL_Self1 = "SELECT * FROM SELF WHERE ID=@ID ";
    应为:                     private  string SQL_Self1 = "SELECT * FROM SELF WHERE ID='@ID' ";
    否则:        private  string parm_ID = "@ID";
    应为:        private  int    parm_ID = "@ID";
    其次, 在 SqlParameter[] parms = { new SqlParameter(parm_ID, SqlDbType.Int) }; 中
    根据你的 parm_ID 类型决定是否为 SqlDbType.Int 类型。