读书人

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

发布时间: 2012-08-03 00:12:14 作者: rapoo

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跟踪一下,看看传过来的参数
[解决办法]
我测试了下你的代码,没有问题,返回的数据正确
你是不是连错数据库了?

读书人网 >asp.net

热点推荐