写一执行存储过程的函数

benbenkui 2008-03-22 06:54:38
因为程序中要频繁执行存储过程,想写一通用方法。我写了一个,不过老是报错“过程需要参数,但参数值没有传进去”.
public DataTable selectDB(string strSql,int num,string[] par)
{
string strConn = @"server=.;database=Dbtxt;Integrated Security=true";
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = strSql;
for (num = 0; num < par.Length; num++)
{
cmd.Parameters.AddWithValue("?",par[num]);
}
this.sda = new SqlDataAdapter(strSql,creatConn());
this.ds.Clear();
sda.Fill(ds);
return ds.Tables[0];
}
...全文
154 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
benbenkui 2008-03-23
  • 打赏
  • 举报
回复
广告太猖獗了,版主应该出来管管了
benbenkui 2008-03-23
  • 打赏
  • 举报
回复
恩,我看了下网上的一篇文章。“编写通用数据访问层”,解决了。
谢谢大家
ndsc_cherry 2008-03-23
  • 打赏
  • 举报
回复
public void TransplantShoppingCart(String oldCartId, String newCartId)
{

//创建数据库连接和命令的对象
SqlConnection myConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand myCommand = new SqlCommand("TransplantShoppingCart", myConnection);

//指明Sql命令的操作类型是使用存储过程
myCommand.CommandType = CommandType.StoredProcedure;

//给存储过程添加参数
SqlParameter cart1 = new SqlParameter("@OldCartIDString", SqlDbType.NVarChar, 50);
cart1.Value = oldCartId;
myCommand.Parameters.Add(cart1);

SqlParameter cart2 = new SqlParameter("@NewCartIDString", SqlDbType.NVarChar, 50);
cart2.Value = newCartId;
myCommand.Parameters.Add(cart2);

myConnection.Open();
myCommand.ExecuteNonQuery();
myConnection.Close();
}
根据自己的情况改改吧!
dancingbit 2008-03-23
  • 打赏
  • 举报
回复
params[0]=new SqlParameter("paramName"); 这种初始化方法不对。
------------------------------------------
params[0]=new SqlParameter();
params[0].ParameterName="....";
params[0].Value=....;
DshirenJ 2008-03-23
  • 打赏
  • 举报
回复
下个 ms 的 DAAB程序块就搞定了
benbenkui 2008-03-22
  • 打赏
  • 举报
回复
怎样初始化 SqlParameter[] pars参数呢?
benbenkui 2008-03-22
  • 打赏
  • 举报
回复
谢谢楼上的,我先去试一下
benbenkui 2008-03-22
  • 打赏
  • 举报
回复
赶紧顶一下
yangpeiyu 2008-03-22
  • 打赏
  • 举报
回复
根据具体情况再改一下就可以了。

public static int ExecProcedure(string ProcName, params SqlParameter[] MyComParameters)
{
string connStr = System.Configuration.ConfigurationSettings.AppSettings["lj"];
SqlConnection MyConn = new SqlConnection(connStr);

try
{
MyConn.Open();
SqlCommand MyCom = new SqlCommand(ProcName, MyConn);
MyCom.CommandType = CommandType.StoredProcedure;

//填充存储过程的参数
if (MyComParameters != null)
{
foreach (SqlParameter MyParm in MyComParameters) MyCom.Parameters.Add(MyParm);
}

int ReturnVal = MyCom.ExecuteNonQuery();

MyCom.Parameters.Clear();
return ReturnVal;

}
catch
{
throw;
}
finally
{
MyConn.Close(); MyConn.Dispose();
}

}
benbenkui 2008-03-22
  • 打赏
  • 举报
回复
如果是具体的参数名,则不能做为一个通用的方法了。
我也想过这个办法。
kao19791 2008-03-22
  • 打赏
  • 举报
回复
低价转让:中#美#爱#梯#科技.Net软件工程师培训课程内容(共35G),声音清晰,课程完整!
需要这个培训视频的朋友请联系 QQ 936652114
benbenkui 2008-03-22
  • 打赏
  • 举报
回复
public DataTable selectDB(string procName,SqlParameter[] pars,string[] values)
{
string strConn = @"server=hugebenz\SQLEXPRESS;database=Dbtxt;Integrated Security=true";
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = new SqlCommand(procName,conn);
cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < pars.Length;i++ )
{
cmd.Parameters.AddWithValue(pars[i].ToString(),values[i]);
}
sda = new SqlDataAdapter(procName,conn);
sda.Fill(ds);
return ds.Tables[0];
}
用SqlParameter[] params=new SqlParameter[paramCount];
params[0]=new SqlParameter("paramName"); 这种初始化方法不对。
simsure 2008-03-22
  • 打赏
  • 举报
回复
AddWithValue(paramName,paramValue)
用问号似乎不可以的,最好指定参数名字,如果数据库是sqlserver,数据库接到存储过程时,会用传入参数个数按顺序和存储过程需要的参数一一对比。
用问号会不会被看作同一个参数。
没用过“?”
仅供参考

可以把问号改成具体名字试试应该可以的
benbenkui 2008-03-22
  • 打赏
  • 举报
回复
原代码有点小问题,先更改一下。
public DataTable selectDB(string strSql,int num,string[] par)
{
string strConn = @"server=.;database=Dbtxt;Integrated Security=true";
SqlConnection conn = new SqlConnection(strConn);
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = strSql;
for (num = 0; num < par.Length; num++)
{
cmd.Parameters.AddWithValue("?",par[num]);
}
SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
DataSet ds=new DataSet();
sda.Fill(ds);
return ds.Tables[0];
}
benbenkui 2008-03-22
  • 打赏
  • 举报
回复
sf,谁有现成的给发个也行。
hugebenz@live.cn
小弟,在此先谢谢各位了
simsure 2008-03-22
  • 打赏
  • 举报
回复
SqlParameter[] params=new SqlParameter[paramCount];
params[0]=new SqlParameter("paramName");
params[0].Value=paramValue;
.......

或者用:
bool ExecProc(string proc,string[] paramNames,string[] paramValues)
{
if(paramNames.Length!=paramValues.Length)return false;
...
for(int i=0;i<paramsNames.Lenth;i++)
{
cmd.Parameters.AddWithValue(paramNames[i],paramsValues[i]]);
}
...
}

110,535

社区成员

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

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

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