cmd.Parameters.Add如何用,它的具体意思是什么

crystalbright 2008-11-24 11:34:58
如题,如下代码:请高手详解,小弟不悉丧尽家财,以求正解,谢谢
public int RunProc(string procName)
{
SqlCommand cmd = CreateCommand(procName, null);
cmd.ExecuteNonQuery();
this.Close();
return (int)cmd.Parameters["ReturnValue"].Value;
}
private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
{
// make sure connection is open
Open();

//command = new SqlCommand( sprocName, new SqlConnection( ConfigManager.DALConnectionString ) );
SqlCommand cmd = new SqlCommand(procName, con);
cmd.CommandType = CommandType.StoredProcedure;

// add proc parameters
if (prams != null)
{
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}

// return param
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));

return cmd;
}
...全文
2334 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
常熟老九 2008-11-25
  • 打赏
  • 举报
回复
ok.AddwithValue不错,以前一直用cmd.parameters.add();
hztltgg 2008-11-25
  • 打赏
  • 举报
回复
你的代码用了个循环加参数,其实现在都可以直接把数组传递给参数的,不用循环了,很简单的

if (prams != null)
{
cmd.Parameters.AddRange(prams);
}
hztltgg 2008-11-25
  • 打赏
  • 举报
回复
就是如果要查询一条记录
原来是写个查询字符串
"SELECT * FROM [ApplicationUser] WHERE ApplicationId = " & Request("ApplicationId")
这样,拼凑字符串,会导致SQL注入,如果Request("ApplicationId")输的是特殊字符,那你仔细这条语句就可能出问题了。

如果我们写成
"SELECT * FROM [ApplicationUser] WHERE ApplicationId = @ApplicationId"
这样,这个字符串不是拼凑了,前面加@符号的表示一个参数,等于多少?是什么数据类型?我们通过参数来生产
顺便说一下,Add过时了,用AddWithValue更好,你看得是ADO.Net 1.1的书吧?
cmd.Parameters.AddWithValue("@ApplicationId", Request("ApplicationId"))
这样,就给参数赋值了,再执行cmd就可以不用怕SQL注入什么的了,这儿没有确定数据类型,是它会自动确定的,你也可以指定数据类型,像5楼说的,还可以加很多参数
crystalbright 2008-11-25
  • 打赏
  • 举报
回复
还是不明白呀,那位给个详细介绍呀,晕了
bloodish 2008-11-24
  • 打赏
  • 举报
回复
cmd.Parameters.Add(
new SqlParameter("@ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));
qhdrenzhijie 2008-11-24
  • 打赏
  • 举报
回复
cmd.Parameters.Add已经过时了
freeboy827 2008-11-24
  • 打赏
  • 举报
回复
就是添加参数值,传递给存储过程
wenyegood 2008-11-24
  • 打赏
  • 举报
回复
添加存储参数
cmd.Parameters.Add(new SqlParameter(name,value));
wangzhenyue 2008-11-24
  • 打赏
  • 举报
回复
cmd.Parameters.Add如何用,它的具体意思是什么

这个是存储过程
  • 打赏
  • 举报
回复
比如 有个存储过程:
CREATE PROCEDURE [Test]
@TableName varchar(50)
as
declare
set nocount on
begin
exec ('Select * From '+@TableName+' Order By id')
end
GO

那么 如果你要调用这个存储过程 就得给它传递一个表名
SqlParameter param=null;
param = new SqlParameter("@TableName", tablename);//tablename是程序中传递进来的表名
cmd.Parameter.Add(param);
wuyq11 2008-11-24
  • 打赏
  • 举报
回复
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));
添加存储过程参数,主要是类型,值
lchh0917 2008-11-24
  • 打赏
  • 举报
回复
楼上说的是
justindreams 2008-11-24
  • 打赏
  • 举报
回复
用来存储参数用的。

111,130

社区成员

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

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

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