| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 924 人关注过本帖
标题:关于给存储过程传递参数的问题
只看楼主 加入收藏
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
结帖率:95.12%
收藏
已结贴  问题点数:10 回复次数:3 
关于给存储过程传递参数的问题
新人问题总是很多,麻烦高手们,先谢谢了!

下面是一段调用存储过程的代码,红色部分的代码我已经遇到过好几遍了,知道Parameter对象可以防止SQL注入,实现参数化查询。但我就是不理解Parameter的用法和它到底是运作的,Parameter到底是一个什么样的对象?

困惑:

SqlParameter sex = new SqlParameter("@sex", SqlDbType.VarChar, 5);//定义了一个SqlParameter对象sex,那么@sex是sex的参数?sex.value获取的值是不是就是@sex的值?如果是的话,有三个@sex这样的变量(@sex1,@sex2,@sex3)那sex.value表示的是谁的值?

mycmd.Parameters.Add(sex);//这句话的意思到底是什么哦?
将SqlParameter对象sex添加到command的Parameters集合中?Parameters集合又是啥?添加到Parameters集合中和传递参数有什么关系,其实这个参数到底是怎么传过去的我就是搞不清楚,不理解!执行到这句话的时候存储过程被调用了没有?怎么没有用到mycmd.ExecuteNonQuery();


        SqlConnection mycon = getconnection();
        mycon.Open();
        SqlCommand mycmd = new SqlCommand();
         = CommandType.StoredProcedure;
        mycmd.Connection = getconnection();
         = "get_student";

        
        SqlParameter sex = new SqlParameter("@sex", SqlDbType.VarChar, 5);
        sex.Value = DropDownList1.Text;
        mycmd.Parameters.Add(sex);


        SqlDataAdapter da = new SqlDataAdapter(mycmd);
        DataTable dt = new DataTable();
        da.Fill(dt);
        GridView1.DataSource = dt;
        GridView1.DataBind();
搜索更多相关主题的帖子: 参数 
2010-07-28 00:27
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:10 
SqlParameter sex = new SqlParameter("@sex", SqlDbType.VarChar, 5)
定义了一个SqlParameter对象sex,而这个对象所对应的是SQL语句或存储过程中的“@sex”变量,至于要个这个变量赋值成什么,是由
sex.Value = DropDownList1.Text;
控制的,这两句也就是在说,我要创建一个SqlParameter对象叫sex,他的值是DropDownList1.Text,而应该去对应SQL语句或存储过程里的"@sex"变量,给这个变量赋值
mycmd.Parameters.Add(sex);
而这句的意思你应该能猜的出来的,SqlCommand对象里有Parameters这个列表,在这个列表里有的SqlParameter对象,才会被传到SQL语句或存储过程里,所以要将你刚才创建的SqlParameter对象用Add方法添加到Parameters列表中。

至于你说的为什么没有mycmd.ExecuteNonQuery();这句
实际上关键点在下面这三句中
SqlDataAdapter da = new SqlDataAdapter(mycmd);
DataTable dt = new DataTable();
da.Fill(dt);
SqlDataAdapter对象da在创建的时候,已经得到了SqlCommand对象了,然后又创建了一个DataTable对象dt
da.Fill(dt);的意思是将da查询出来的记录赋值到dt中,其实在这句中已经执行了数据库访问操作,所以你看不到mycmd.ExecuteNonQuery();

以上的解释尽量用的是大白话,避免用到专业的术语,我想楼主应该能看明白了

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-07-28 09:36
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
收藏
得分:0 
谢谢,谢谢你的耐心,
2010-07-28 11:53
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
不客气,

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-07-28 11:55
快速回复:关于给存储过程传递参数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036671 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved