必须声明标量变量 "@IfConcel"

.Net技术 码拜 10年前 (2015-05-11) 1059次浏览 0个评论
 

我找了半天,没有找到我没有声明的变量啊,只能求助了,断点也看不出来哪里有问题。
我的代码如下

StringBuilder strSql = new StringBuilder();
            strSql.Append("insert into YyInfo(");
            strSql.Append("IfConcel,SPID,CgDay,CgTime,PeopNum,UnitName,AddressID,YyName,YyPhoneNum,UserID");
            strSql.Append(") values (");
            strSql.Append("@IfConcel,@SPID,@CgDay,@CgTime,@PeopNum,@UnitName,@AddressID,@YyName,@YyPhoneNum,@UserID");
            strSql.Append(") ");
            strSql.Append(";");
            //strSql.Append(";select @@IDENTITY");
            SqlParameter[] parameters = {
			            new SqlParameter("@IfConcel", SqlDbType.Int,4) ,            
                        new SqlParameter("@SPID", SqlDbType.Int,4) ,            
                        new SqlParameter("@CgDay", SqlDbType.DateTime) ,            
                        new SqlParameter("@CgTime", SqlDbType.Char,20) ,            
                        new SqlParameter("@PeopNum", SqlDbType.Int,4) ,            
                        new SqlParameter("@UnitName", SqlDbType.Char,50) ,            
                        new SqlParameter("@AddressID", SqlDbType.Int,4) ,            
                        new SqlParameter("@YyName", SqlDbType.Char,50) ,            
                        new SqlParameter("@YyPhoneNum", SqlDbType.Char,20) ,            
                        new SqlParameter("@UserID", SqlDbType.Int,4)             
              
            };

            parameters[0].Value = model.IfConcel;
            parameters[1].Value = model.SPID;
            parameters[2].Value = model.CgDay;
            parameters[3].Value = model.CgTime;
            parameters[4].Value = model.PeopNum;
            parameters[5].Value = model.UnitName;
            parameters[6].Value = model.AddressID;
            parameters[7].Value = model.YyName;
            parameters[8].Value = model.YyPhoneNum;
            parameters[9].Value = model.UserID;

            object obj = SQLHelper.GetSingle(strSql.ToString(), parameters);
            if (obj == null)
            {
                return 0;
            }
            else
            {

                return Convert.ToInt32(obj);

            }
看SQLHelper.GetSingle用了parameters没
这个要看你的GetSingle方法吧
GetSingle看名字也是取数据
你应该用ExecuteNonQuery对应的方法
引用 1 楼 feiyun0112 的回复:

看SQLHelper.GetSingle用了parameters没

public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        cmd.Parameters.Clear();
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        object obj = cmd.ExecuteScalar();
                        cmd.Parameters.Clear();
                        if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                        {
                            return null;
                        }
                        else
                        {
                            return obj;
                        }
                    }
                    catch (System.Data.SqlClient.SqlException e)
                    {
                        throw e;
                    }
                }
            }
        }
之前更新数据也报错,调了两下也没改啥,自己就好了
引用 5 楼 zyydj_10 的回复:

之前更新数据也报错,调了两下也没改啥,自己就好了

还是要找到原因,不然系统隐藏着不稳定的bug。

PrepareCommand方法的代码贴出来~

引用 6 楼 lovelj2012 的回复:
Quote: 引用 5 楼 zyydj_10 的回复:

之前更新数据也报错,调了两下也没改啥,自己就好了

还是要找到原因,不然系统隐藏着不稳定的bug。

PrepareCommand方法的代码贴出来~

private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
        {
            if (conn.State != ConnectionState.Open)
                conn.Open();
            cmd.Connection = conn;
            cmd.CommandText = cmdText;
            if (trans != null)
                cmd.Transaction = trans;
            cmd.CommandType = CommandType.Text;//cmdType;
            if (cmdParms != null)
            {

                //cmd.Parameters.Clear();
                foreach (SqlParameter parameter in cmdParms)
                {
                    if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
                        (parameter.Value == null))
                    {
                        parameter.Value = DBNull.Value;
                    }
                    cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();
                }
            }
cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

引用 8 楼 feiyun0112 的回复:

cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

把这个去了更新时候报错

cmd.Parameters.Clear();
你明不明白这句的作用?
引用 8 楼 feiyun0112 的回复:

cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

+1
你Add一次,Clear所有,介个,你不是偶尔报错吧?!

引用 11 楼 lovelj2012 的回复:
Quote: 引用 8 楼 feiyun0112 的回复:

cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

+1
你Add一次,Clear所有,介个,你不是偶尔报错吧?!

报这个错误
Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。

引用 10 楼 feiyun0112 的回复:

cmd.Parameters.Clear();
你明不明白这句的作用?

明白是明白,但是去掉以后就报Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。

去掉cmd.Parameters.Clear();更新的时候报Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。 
不去掉的时候新增报 必须声明标量变量 “@IfConcel”
引用 12 楼 zyydj_10 的回复:
Quote: 引用 11 楼 lovelj2012 的回复:
Quote: 引用 8 楼 feiyun0112 的回复:

cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

+1
你Add一次,Clear所有,介个,你不是偶尔报错吧?!

报这个错误
Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。

哥醉了。。。
你单步调试下,抛出这个异常的时候,哪行代码报错?

引用 15 楼 lovelj2012 的回复:
Quote: 引用 12 楼 zyydj_10 的回复:
Quote: 引用 11 楼 lovelj2012 的回复:
Quote: 引用 8 楼 feiyun0112 的回复:

cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

+1
你Add一次,Clear所有,介个,你不是偶尔报错吧?!

报这个错误
Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。

哥醉了。。。
你单步调试下,抛出这个异常的时候,哪行代码报错?

 public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        cmd.Parameters.AddRange(cmdParms);//这里报错
                        int rows = cmd.ExecuteNonQuery();
20分
引用 16 楼 zyydj_10 的回复:
Quote: 引用 15 楼 lovelj2012 的回复:
Quote: 引用 12 楼 zyydj_10 的回复:
Quote: 引用 11 楼 lovelj2012 的回复:
Quote: 引用 8 楼 feiyun0112 的回复:

cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

+1
你Add一次,Clear所有,介个,你不是偶尔报错吧?!

报这个错误
Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。

哥醉了。。。
你单步调试下,抛出这个异常的时候,哪行代码报错?

 public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        cmd.Parameters.AddRange(cmdParms);//这里报错
                        int rows = cmd.ExecuteNonQuery();

哥是真醉了!
1、SqlCommand是引用类型,你在PrepareCommand方法已赋值,你还再AddRange一次干神马呢?
2、PrepareCommand执行完,cmd已经添加cmdParms了

引用 17 楼 lovelj2012 的回复:
Quote: 引用 16 楼 zyydj_10 的回复:
Quote: 引用 15 楼 lovelj2012 的回复:
Quote: 引用 12 楼 zyydj_10 的回复:
Quote: 引用 11 楼 lovelj2012 的回复:
Quote: 引用 8 楼 feiyun0112 的回复:

cmd.Parameters.Add(parameter);
                    cmd.Parameters.Clear();

我晕!

+1
你Add一次,Clear所有,介个,你不是偶尔报错吧?!

报这个错误
Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。

哥醉了。。。
你单步调试下,抛出这个异常的时候,哪行代码报错?

 public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                using (SqlCommand cmd = new SqlCommand())
                {
                    try
                    {
                        PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                        cmd.Parameters.AddRange(cmdParms);//这里报错
                        int rows = cmd.ExecuteNonQuery();

哥是真醉了!
1、SqlCommand是引用类型,你在PrepareCommand方法已赋值,你还再AddRange一次干神马呢?
2、PrepareCommand执行完,cmd已经添加cmdParms了

非常感谢你的帮助,我把这句话注释了,就好了,是我写的时候没有注意,调试的时候就忘记了。谢谢

结贴了,为啥没显示分数给谁了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明必须声明标量变量 "@IfConcel"
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!