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

zyydj_10 2015-05-07 04:40:14
我找了半天,没有找到我没有声明的变量啊,只能求助了,断点也看不出来哪里有问题。
我的代码如下

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);

}
...全文
176 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
结贴了,为啥没显示分数给谁了
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
引用 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所有,介个,你不是偶尔报错吧?! [/quote]报这个错误 Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。[/quote] 哥醉了。。。 你单步调试下,抛出这个异常的时候,哪行代码报错?[/quote]

 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();
[/quote] 哥是真醉了! 1、SqlCommand是引用类型,你在PrepareCommand方法已赋值,你还再AddRange一次干神马呢? 2、PrepareCommand执行完,cmd已经添加cmdParms了[/quote] 非常感谢你的帮助,我把这句话注释了,就好了,是我写的时候没有注意,调试的时候就忘记了。谢谢
江南小鱼 2015-05-07
  • 打赏
  • 举报
回复
引用 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所有,介个,你不是偶尔报错吧?! [/quote]报这个错误 Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。[/quote] 哥醉了。。。 你单步调试下,抛出这个异常的时候,哪行代码报错?[/quote]

 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();
[/quote] 哥是真醉了! 1、SqlCommand是引用类型,你在PrepareCommand方法已赋值,你还再AddRange一次干神马呢? 2、PrepareCommand执行完,cmd已经添加cmdParms了
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
引用 15 楼 lovelj2012 的回复:
[quote=引用 12 楼 zyydj_10 的回复:] [quote=引用 11 楼 lovelj2012 的回复:] [quote=引用 8 楼 feiyun0112 的回复:] cmd.Parameters.Add(parameter); cmd.Parameters.Clear(); 我晕!!!!
+1 你Add一次,Clear所有,介个,你不是偶尔报错吧?! [/quote]报这个错误 Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。[/quote] 哥醉了。。。 你单步调试下,抛出这个异常的时候,哪行代码报错?[/quote]

 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();
江南小鱼 2015-05-07
  • 打赏
  • 举报
回复
引用 12 楼 zyydj_10 的回复:
[quote=引用 11 楼 lovelj2012 的回复:] [quote=引用 8 楼 feiyun0112 的回复:] cmd.Parameters.Add(parameter); cmd.Parameters.Clear(); 我晕!!!!
+1 你Add一次,Clear所有,介个,你不是偶尔报错吧?! [/quote]报这个错误 Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。[/quote] 哥醉了。。。 你单步调试下,抛出这个异常的时候,哪行代码报错?
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
去掉cmd.Parameters.Clear();更新的时候报Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。 不去掉的时候新增报 必须声明标量变量 "@IfConcel"
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
引用 10 楼 feiyun0112 的回复:
cmd.Parameters.Clear(); 你明不明白这句的作用?
明白是明白,但是去掉以后就报Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
引用 11 楼 lovelj2012 的回复:
[quote=引用 8 楼 feiyun0112 的回复:] cmd.Parameters.Add(parameter); cmd.Parameters.Clear(); 我晕!!!!
+1 你Add一次,Clear所有,介个,你不是偶尔报错吧?! [/quote]报这个错误 Sys.WebForms.PageRequestManagerServerErrorException: 另一个 SqlParameterCollection 中已包含 SqlParameter。
江南小鱼 2015-05-07
  • 打赏
  • 举报
回复
引用 8 楼 feiyun0112 的回复:
cmd.Parameters.Add(parameter); cmd.Parameters.Clear(); 我晕!!!!
+1 你Add一次,Clear所有,介个,你不是偶尔报错吧?!
feiyun0112 2015-05-07
  • 打赏
  • 举报
回复
cmd.Parameters.Clear();
你明不明白这句的作用?
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
引用 8 楼 feiyun0112 的回复:
cmd.Parameters.Add(parameter); cmd.Parameters.Clear(); 我晕!!!!
把这个去了更新时候报错
feiyun0112 2015-05-07
  • 打赏
  • 举报
回复
cmd.Parameters.Add(parameter);
cmd.Parameters.Clear();

我晕!!!!
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
引用 6 楼 lovelj2012 的回复:
[quote=引用 5 楼 zyydj_10 的回复:] 之前更新数据也报错,调了两下也没改啥,自己就好了
还是要找到原因,不然系统隐藏着不稳定的bug。 PrepareCommand方法的代码贴出来~[/quote]

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();
                }
            }
江南小鱼 2015-05-07
  • 打赏
  • 举报
回复
引用 5 楼 zyydj_10 的回复:
之前更新数据也报错,调了两下也没改啥,自己就好了
还是要找到原因,不然系统隐藏着不稳定的bug。 PrepareCommand方法的代码贴出来~
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
之前更新数据也报错,调了两下也没改啥,自己就好了
zyydj_10 2015-05-07
  • 打赏
  • 举报
回复
引用 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;
                    }
                }
            }
        }
  • 打赏
  • 举报
回复
GetSingle看名字也是取数据 你应该用ExecuteNonQuery对应的方法
江南小鱼 2015-05-07
  • 打赏
  • 举报
回复
这个要看你的GetSingle方法吧
feiyun0112 2015-05-07
  • 打赏
  • 举报
回复
看SQLHelper.GetSingle用了parameters没

110,536

社区成员

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

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

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