日期:2014-05-17  浏览次数:20575 次

asp.net 调用存储过程问题...
存储过程
SQL code


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执行结果


我在后台调用 老是没值呢

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