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