小弟用如下C#代码调用之后的存储过程,为什么总提示
异常详细信息: System.Data.SqlClient.SqlException: 'read_user' 附近有语法错误。---------------------------        SqlConnection myConn = new SqlConnection(sqlString);
        SqlCommand myCmd = new SqlCommand("read_user", myConn);
        myCmd.Parameters.Add("@vvfe", SqlDbType.NVarChar).Value = "user_name";
        myConn.Open();        SqlDataReader myReader = myCmd.ExecuteReader();----SQL---------------------ALTER PROCEDURE [dbo].[read_user] (
@vvfe nvarchar(50)
)
as
BEGIN
Declare @Sql nVarchar(1000)
Set @Sql='select ' + @vvfe + ' from userinfo'
END---------------------------由于工作需要我现在急需很快的了解存储过程,不然可能就要失业了,各位大哥帮帮忙,小弟给诸位作揖了。C#怎么传参数给存储过程?存储过程怎么接收?
存储过程怎么传参数给C#?C#怎么接收?

解决方案 »

  1.   

    SqlCommand cmd = new SqlCommand("exec read_user @vvfe = user_name",conn);
    cmd.ExecuteReader(); 参考:http://blog.54master.com/index.php/586951/viewspace-19909
      

  2.   


    /// <summary>
            /// 在数据库中写入创建的房间
            /// 调用CreatRoom存储过程
            /*CREATE PROCEDURE CreatRoom  
                @Name varchar(50),
                @Owner varchar(50)
                AS
                Insert into OnLineRooms
                (R_Name,R_Owner)
                values
                (@Name,@Owner)
                select @@rowcount            GO
             */
            /// </summary>
            /// <param name="RName">房间名</param>
            /// <param name="ROwner">房主名</param>
            /// <returns>成功 ture</returns>
            public bool CreatRoom(string RName, string ROwner)
            {
                OpenDB();            using (SqlCommand com = new SqlCommand("CreatRoom", _conn))
                {                com.CommandType = System.Data.CommandType.StoredProcedure;//你的程序中没有指定是存储过程                SqlParameter paramRName = new SqlParameter("@Name", SqlDbType.VarChar, 50);
                    paramRName.Value = RName;
                    com.Parameters.Add(paramRName);                SqlParameter paramROwner = new SqlParameter("@Owner", SqlDbType.VarChar, 50);
                    paramROwner.Value = ROwner;
                    com.Parameters.Add(paramROwner);                if (com.ExecuteNonQuery() == 1)
                        return true;
                    else
                        return false;
                }        }
      

  3.   

    ALTER   PROCEDURE   [dbo].[read_user]   ( 
    @vvfe   nvarchar(50) 

    as 
    BEGIN 
    Declare   @Sql   nVarchar(1000) 
    Set   @Sql='select   '   +   @vvfe   +   '   from   userinfo' 
    Exec(@Sql)
    END谢谢各位现在问题是解决了,可是该怎么接收存储过程返回的参数呢?
      

  4.   

    SqlDataReader sdr = cmd.ExecuteReader();
    while(sdr.read())
    {
    MessageBox.show(sdr["字段名"].toString());
    }  
      

  5.   

     /* CREATE PROCEDURE GetHost
             @RName varchar(80),
         //返回的参数
             @Host varchar(80) output
              AS
             select  @Host = R_Owner from OnLineRooms where R_Name = @RName
             GO
            */
            /// <summary>
            /// 返回房主名
            /// </summary>
            /// <param name="rname">房间名</param>
            /// <returns>房主名:string</returns>
            public string GetHost(string rname)
            {            OpenDB();            using (SqlCommand com = new SqlCommand("GetHost", _conn))
                {
                    com.CommandType = CommandType.StoredProcedure;                SqlParameter paramName = new SqlParameter("@RName", SqlDbType.VarChar, 80);
                    paramName.Value = rname;
                    com.Parameters.Add(paramName);
                    //下面这个就是返回参数  
                    SqlParameter paramHost = new SqlParameter("@Host", SqlDbType.VarChar, 80);
                    paramHost.Direction = ParameterDirection.Output;
                    com.Parameters.Add(paramHost);                com.ExecuteNonQuery();
             //下面是读取返回值
                    return paramHost.Value.ToString(); ;            }
            }