当前位置: 代码迷 >> ASP.NET >> asp.net 调用存储过程有关问题.
  详细解决方案

asp.net 调用存储过程有关问题.

热度:322   发布时间:2013-02-25 00:00:00.0
asp.net 调用存储过程问题...
存储过程
SQL code
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER procedure  [dbo].[Sel](@whereStr varchar(100),--根据那个字段查询@selStr varchar(100) --查询内容)as declare @sql varchar(100)if (@whereStr='' or @selStr='')beginset @sql='select * from bjx_zt order by id desc'endelsebeginset @sql='select * from bjx_Zt where '+@whereStr+' like ''%'+@selStr+'%'' order by id desc'endprint @sqlexec(@sql)

sql执行结果


我在后台调用 老是没值呢

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

SQLHelper类的GetDTSP方法
C# code
 /// <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;    }


这了返回的老是空,哪里错了呢?

------解决方案--------------------------------------------------------
vs->工具->数据库连接->存储过程->单步执行存储过程

数据库和vs在同一台机器上可以进行调试。
------解决方案--------------------------------------------------------
把你的prams[i]的SqlDbType,Size指定個參數類型及大小應該就可以了
------解决方案--------------------------------------------------------
应该数据类型长度的问题,建议使用sql跟踪一下,看看传过来的参数
------解决方案--------------------------------------------------------
我测试了下你的代码,没有问题,返回的数据正确
你是不是连错数据库了?
  相关解决方案