当前位置: 代码迷 >> C# >> 异常提示: 必须声明标量变量 "@pwd
  详细解决方案

异常提示: 必须声明标量变量 "@pwd

热度:66   发布时间:2016-05-05 03:37:22.0
错误提示: 必须声明标量变量 "@pwd
代码如下

            string constr = @"Data Source=TESTSERVERIT;Initial Catalog=khgltest;Persist Security Info=True;User ID=sa;Password=abc.123";
            using (SqlConnection con=new SqlConnection(constr))
            {
                con.Open();
                string sql = @"select USERID from wh_user where [PASSWORD][email protected]";
                using (SqlCommand com=new SqlCommand(sql,con))
                {

                    SqlParameter para = new SqlParameter("@pwd", SqlDbType.VarChar, 18);
                    //com.Parameters.AddWithValue("@pwd","abc.123");
                    para.Value = "abc.123";
                    SqlDataAdapter adp = new SqlDataAdapter(com.CommandText,con);
                    DataTable dt = new DataTable();
                    adp.Fill(dt);
                    foreach (DataRow dr in dt.Rows )
                    {
                        DataColumn dc = dt.Columns["USERID"];
                        string uid= (string)dr[dc];
                        
                    }



这里SqlParameter para = new SqlParameter("@pwd", SqlDbType.VarChar, 18);
                    //com.Parameters.AddWithValue("@pwd","abc.123");
                    para.Value = "abc.123";不是已经申明了吗,为什么还是报错??
------解决思路----------------------
你的 adp 跟 cmd.Parameters 没有半点关系啊。你的 cmd 就是一个摆设,除了它的 Text 属性当个字符串变量来滥用,其它东西都没用。
------解决思路----------------------
按照你的代码的逻辑,你删除 cmd 就行了,只要有个 sql 变量就行了,要 cmd.Text 干什么呢?

会删除代码,才能看懂你自己的程序。许多人之所以不会写代码,不是因为代码少,而是就是因为代码写的太多了而不会删除。
------解决思路----------------------
引用:
Quote: 引用:

按照你的代码的逻辑,你删除 cmd 就行了,只要有个 sql 变量就行了,要 cmd.Text 干什么呢?

会删除代码,才能看懂你自己的程序。许多人之所以不会写代码,不是因为代码少,而是就是因为代码写的太多了而不会删除。


谢谢,因为是刚学,所以对很多类的具体用法都不太会,我再改改,谢谢

新手就先直接拼接SQL语句吧,别玩参数化什么高大上的写法了
估计你写的东西根本没法实际应用,所以也根本不需要考虑什么SQL注入之类的问题
------解决思路----------------------
这就跟农民造飞机一样

先飞起来再说吧

别还停留在理论研究,就老想着什么飞机安全性问题了
  相关解决方案