none
asp.net 调用存储过程问题 返回结果为空? RRS feed

  • 问题

  • 存储过程

    set ANSI_NULLS ON

    set QUOTED_IDENTIFIER ON go ALTER procedure [dbo].[Sel]( @whereStr varchar(100),--根据那个字段查询 @selStr varchar(100) --查询内容 ) as declare @sql varchar(100) if (@whereStr='' or @selStr='') begin set @sql='select * from bjx_zt order by id desc' end else begin set @sql='select * from bjx_Zt where '+@whereStr+' like ''%'+@selStr+'%'' order by id desc' end print @sql exec(@sql)

    sql执行结果

    我在后台调用 老是没值呢

            SQLHelper.getConnection();
            Hashtable hashtable = new Hashtable();
            hashtable.Add("@whereStr", "title");
            hashtable.Add("@selStr", "测试");
            var test = SQLHelper.GetDTSP("Sel", hashtable);

    SQLHelper类的GetDTSP方法

     /// <summary>
        /// 根据条件返回指定存储过程的DataTable
        /// </summary>
        /// <param name="spName">存储过程的名称</param>
        /// <param name="ht">哈希表[存储过程中的变量名][value:值]</param>
        /// <returns></returns>
        public static DataTable GetDTSP(string spName, Hashtable ht)
        {
            DataTable datatable = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter();
            try
            {
                using (SqlConnection connection = new SqlConnection(StrConn))
                {
                    using (SqlCommand cmd = new SqlCommand(spName, connection))
                    {
                        try
                        {
                            connection.Open();
                            cmd.CommandType = CommandType.StoredProcedure;
                            SqlParameter[] prams = new SqlParameter[ht.Count];
                            int i = 0;
                            foreach (DictionaryEntry objDe in ht)
                            {
                                prams[i] = new SqlParameter(objDe.Key.ToString(), objDe.Value.ToString());
                                i++;
                            }
                            // 依次把参数传入命令文本
                            foreach (SqlParameter parameter in prams)
                            {
                                cmd.Parameters.Add(parameter);
                            }
    
                            da.SelectCommand = cmd;
                            da.Fill(datatable);
                        }
                        catch
                        {
                            connection.Close();
                        }
                    }
                }
            }
            catch { }
            return datatable;
        }
    这了返回的老是空,哪里错了呢?

    还望大家帮帮我,搞了一下午都没做出来...

    2012年7月9日 9:26

答案

  • 你好,

    那个存储过程只是执行了一条 select 语句,没有任何返回参数,你希望它返回什么呢?

    还有 Hashtable 的 Add() 方法的参数顺序为:键--值,所以你的代码应该是这样:

            hashtable.Add("title", "@whereStr");
            hashtable.Add("测试", "@selStr");

    这样 objDe.Value.ToString() 才能取到正确的值。

    希望能对你有所帮助!


    Tony Xiao [MSFT]
    MSDN Community Support | Feedback to us


    2012年7月11日 7:32
    版主