C# 怎么执行不带参数的存储过程?

乱舞清风 2015-05-08 06:47:18

public DataSet GetListWithProcedure(string strProcedureName, SqlParameter[] paras)
{
DataSet ds = new DataSet();
try
{
using (SqlConnection conn = new SqlConnection(stsqlcon))
{
using (SqlCommand command = new SqlCommand(strProcedureName, conn))
{
command.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < paras.Length; i++)
{
command.Parameters.Add(paras[i]);
}
SqlDataAdapter da = new SqlDataAdapter(command);
da.Fill(ds, "ds");
return ds;
}
}
}
catch
{
throw;
}
}


这是dbhelp 里面的一个类

我在前台调用的时候这样为什么不行呢?
DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",SqlParameter[]=null);
this.DgvPidData.DataSource = dt;

提示错误 请提供需要提供的值?
...全文
349 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
乱舞清风 2015-05-12
  • 打赏
  • 举报
回复
引用 9 楼 cxzzwb 的回复:
[quote=引用 8 楼 xiaoqiangzhang23 的回复:] [quote=引用 7 楼 cxzzwb 的回复:] DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",SqlParameter[]=null); this.DgvPidData.DataSource = dt; 既然你的存储过程没有参数,那就直接用null吧!! 改成 DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",null); this.DgvPidData.DataSource = dt;
不行提示 错误 3 非静态的字段、方法或属性“PublicHelpSql.DBHelpSQL.GetListWithProcedure(string, System.Data.SqlClient.SqlParameter[])”要求对象引用 [/quote] 运行都运行不了吗??还是运行后在某段代码出错提示的?? 你断点看看在哪句提示的!! 你这样 System.Data.SqlClient.SqlParameter[] sqlParas=null; DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",sqlParas); this.DgvPidData.DataSource = dt; 这样试试,应该没有问题的了[/quote] 感谢,已经搞定。也感谢积极回复的兄弟
wjq 2015-05-12
  • 打赏
  • 举报
回复
DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",new SqlParameter[]{});
redshiliu 2015-05-09
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
是的。每当提问时能够准确指明“是哪一行抛出异常”,对于你自己来说,是当务之急。 把问题集中到某一行上,首先你自己的编程态度就发生了巨大变化,不用仍出一大堆别人给你的无关代码再让第三人给你改了。
首先错误很简单,参数paras不能传null进去,另外为啥要一棵树上吊死,你完全可以用另外一个方法ExecuteNoQuery(应该会有这个方法)来执行一个无参数的存储过程。 另外sp1234这哥们好多帖子都能看到他的身影,按一般眼光来看说话不好听,但是说的都比较在理。
江南小鱼 2015-05-08
  • 打赏
  • 举报
回复
改成

   public DataSet GetListWithProcedure(string strProcedureName, params SqlParameter[] paras)
        {
            DataSet ds = new DataSet();
            try
            {
                using (SqlConnection conn = new SqlConnection(stsqlcon))
                {
                    using (SqlCommand command = new SqlCommand(strProcedureName, conn))
                    {
                        command.CommandType = CommandType.StoredProcedure;
if(paras != null)
{
                        for (int i = 0; i < paras.Length; i++)
                        {
                            command.Parameters.Add(paras[i]);
                        }
}
                        SqlDataAdapter da = new SqlDataAdapter(command);
                        da.Fill(ds, "ds");
                        return ds;
                    }
                }
            }
            catch
            {
                throw;
            }
        }
调用

DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",null);
             this.DgvPidData.DataSource = dt;
  • 打赏
  • 举报
回复
public DataSet GetListWithProcedure(string strProcedureName, SqlParameter[] paras)
        {
            DataSet ds = new DataSet();
            try
            {
                using (SqlConnection conn = new SqlConnection(stsqlcon))
                {
                    using (SqlCommand command = new SqlCommand(strProcedureName, conn))
                    {
                        command.CommandType = CommandType.StoredProcedure;
                    if(paras!=null&¶s.Length>0)  {  for (int i = 0; i < paras.Length; i++)
                        {
                            command.Parameters.Add(paras[i]);
                        }}
                        SqlDataAdapter da = new SqlDataAdapter(command);
                        da.Fill(ds, "ds");
                        return ds;
                    }
                }
            }
            catch
            {
                throw;
            }
        }
加上判断
  • 打赏
  • 举报
回复
你的那个方法里面没判断null,改下for代码,先判断null
程序猿老曾 2015-05-08
  • 打赏
  • 举报
回复
引用 8 楼 xiaoqiangzhang23 的回复:
[quote=引用 7 楼 cxzzwb 的回复:] DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",SqlParameter[]=null); this.DgvPidData.DataSource = dt; 既然你的存储过程没有参数,那就直接用null吧!! 改成 DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",null); this.DgvPidData.DataSource = dt;
不行提示 错误 3 非静态的字段、方法或属性“PublicHelpSql.DBHelpSQL.GetListWithProcedure(string, System.Data.SqlClient.SqlParameter[])”要求对象引用 [/quote] 运行都运行不了吗??还是运行后在某段代码出错提示的?? 你断点看看在哪句提示的!! 你这样 System.Data.SqlClient.SqlParameter[] sqlParas=null; DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",sqlParas); this.DgvPidData.DataSource = dt; 这样试试,应该没有问题的了
乱舞清风 2015-05-08
  • 打赏
  • 举报
回复
引用 7 楼 cxzzwb 的回复:
DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",SqlParameter[]=null); this.DgvPidData.DataSource = dt; 既然你的存储过程没有参数,那就直接用null吧!! 改成 DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",null); this.DgvPidData.DataSource = dt;
不行提示 错误 3 非静态的字段、方法或属性“PublicHelpSql.DBHelpSQL.GetListWithProcedure(string, System.Data.SqlClient.SqlParameter[])”要求对象引用
程序猿老曾 2015-05-08
  • 打赏
  • 举报
回复
DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",SqlParameter[]=null); this.DgvPidData.DataSource = dt; 既然你的存储过程没有参数,那就直接用null吧!! 改成 DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",null); this.DgvPidData.DataSource = dt;
乱舞清风 2015-05-08
  • 打赏
  • 举报
回复
引用 1 楼 tcmakebest 的回复:
有错误行号更有助于查询问题
提示 错误 5 “System.Data.SqlClient.SqlParameter”是“类型”,但此处被当做“变量”来使用
乱舞清风 2015-05-08
  • 打赏
  • 举报
回复
引用 3 楼 cxzzwb 的回复:
你用null的话应该是会出现异常 这里的for外面应该要加一个判断paras是否为null,如 if(paras!=null) { for (int i = 0; i < paras.Length; i++) { command.Parameters.Add(paras[i]); } } 另外你的代码还有一点错误的地方 GetListWithProcedure函数返回的是一个DataSet,而你却直接赋值给DataTable,这也会出现类型不正确的错误 应该为 DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",SqlParameter[]=null).Table[0]; this.DgvPidData.DataSource = dt;
不行哦 提示 提示 错误 5 “System.Data.SqlClient.SqlParameter”是“类型”,但此处被当做“变量”来使用
乱舞清风 2015-05-08
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
是的。每当提问时能够准确指明“是哪一行抛出异常”,对于你自己来说,是当务之急。 把问题集中到某一行上,首先你自己的编程态度就发生了巨大变化,不用仍出一大堆别人给你的无关代码再让第三人给你改了。
提示 错误 5 “System.Data.SqlClient.SqlParameter”是“类型”,但此处被当做“变量”来使用
程序猿老曾 2015-05-08
  • 打赏
  • 举报
回复
你用null的话应该是会出现异常 这里的for外面应该要加一个判断paras是否为null,如 if(paras!=null) { for (int i = 0; i < paras.Length; i++) { command.Parameters.Add(paras[i]); } } 另外你的代码还有一点错误的地方 GetListWithProcedure函数返回的是一个DataSet,而你却直接赋值给DataTable,这也会出现类型不正确的错误 应该为 DataTable dt = DBHelpSQL.GetListWithProcedure("sp_who_lock",SqlParameter[]=null).Table[0]; this.DgvPidData.DataSource = dt;
  • 打赏
  • 举报
回复
是的。每当提问时能够准确指明“是哪一行抛出异常”,对于你自己来说,是当务之急。 把问题集中到某一行上,首先你自己的编程态度就发生了巨大变化,不用仍出一大堆别人给你的无关代码再让第三人给你改了。
tcmakebest 2015-05-08
  • 打赏
  • 举报
回复
有错误行号更有助于查询问题

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧