A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天高地阔 中级黑马   /  2012-4-10 10:04  /  3325 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

private void cmb省_SelectedIndexChanged(object sender, EventArgs e)
        {
            ProvinceItem item = (ProvinceItem)cmb省.SelectedItem;
            int proId = item.Id;
            cmb市.Items.Clear();//清空上一次的选择数据
            using (SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDBFilename=|DataDirectory|\SS.mdf;
            Integrated Security=true;user instance=true"))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = "select * from city where proID=@proID";
                    cmd.Parameters.Add(new SqlParameter("proID", proId));
                    using (SqlDataReader dataReader = cmd.ExecuteReader())
                    {
                        while (dataReader.Read())
                        {
                            string cityName=dataReader.GetString(dataReader.GetOrdinal("cityName"));
                            cmb市.Items.Add(cityName);
                        }
                    }
                }
            }
        }
这里我int proId = item.Id; proId用的小写的d,
cmd.CommandText = "select * from city where proID=@proID";这里最后这个@proID我改成proId以后,运行的结果和原来一样的,
@XXX我知道是表示此处用参数代替的意思,是向Parameters中添加参数,
可是我想知道这里这个到底是怎么个情况,这里到底代表的是什么,哪个参数用来代替@XXX的,
本人比较菜,问题或许说的还不是很明了,请各位大神谅解,

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

6 个回复

倒序浏览
cmd.CommandText = "select * from city where proID=@proID";
cmd.Parameters.Add(new SqlParameter("@proID", proId));
int proId = item.Id;
其实你写错了一个地方,cmd.Parameters.Add(new SqlParameter("@proID", proId));这里你少写了一个@符号,其实是用int proId = item.Id;proId的值赋给@proID,然后传递到sql语句中,这样的问题你调试一下就可以调试出来的。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
蔡红微 发表于 2012-4-10 10:47
cmd.CommandText = "select * from city where proID=@proID";
cmd.Parameters.Add(new SqlParameter("@p ...

那是不是
ProvinceItem item = (ProvinceItem)cmb省.SelectedItem;先取出省,
int proId = item.Id;  然后把省的ID赋给proId,
cmd.Parameters.Add(new SqlParameter("@proID", proId));再然后把proId赋给@proID,
cmd.CommandText = "select * from city where proID=@proID"; 当这里执行语句的时候就取出@proID的值来看是否等于,
是不是这样的?
回复 使用道具 举报
嗯,是这样的。
回复 使用道具 举报
蔡红微 发表于 2012-4-10 11:27
嗯,是这样的。

调试了调试,现在明白了,豁然开朗,
谢谢啦,:hug:
回复 使用道具 举报
@表示参数化查询,在cmd.CommandText = "select * from city where proID=@proID"; ,where 后面的proID指的是数据库定义的,而@proID是自己定义的,也可以写成这样"select * from city where proID=@Id.
在cmd.Parameters.Add(new SqlParameter("proID", proId));这句里第一个参数要跟你定义的参数化一样(即跟@proID一样);如果你在select语句里面定义成@Id,你的第一个参数就是Id
后面的参数就是你在上面定义的变量 int proId = item.Id;

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
赵潮江 来自手机 中级黑马 2012-4-10 13:45:50
7#
局部变量:
局部变量必须以标记@作为前缀 ,如@age
局部变量的使用也是先声明,再赋值

全局变量:
全局变量必须以标记@ @作为前缀,如@@version
全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值


局部变量:一般出现在批处理、存储过程、触发器中。
定义:DECLARE @变量名 类型,@变量名 类型.....
默认值为NULL
赋值:SELECT @变量名=值
              SET @变量名=值
引用:SELECT @变量名
              PRINT @变量名

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马