asp.net中常量放在app_code中CS文件中引起的诡异问题

flying02 2017-04-16 03:54:53
C#的asp.net 项目,项目中有几个常量,放在app_code目录中,新建了一个config.cs文件,类似这样:
public class config{
public const int newid1 = 2;
.....
}

在aspx的CS文件中,调用config.newid1 ,测试时没发现问题,发布到服务器后(编译成app_code.dll),用户在正常使用时,偶尔会出现config.newid1取不到的情况,注意不是全部,是偶尔有人报错,从切图看就是这个值没取到。

这个问题看似简单,但对于目前的情况,完全摸不着头脑,不知道这里面有什么门道,难道常量放入app_code.dll 就会偶尔取不到值吗?如果真这样, 是不是应该放到web.config? 通常大家都怎么做的?谢谢。
...全文
158 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 2017-04-17
  • 打赏
  • 举报
回复
sobj.Parameters.Add(config.newid3); 这个config.newid3是什么东西? @1还是 @1的值? 正确赋值步骤应该如下 SqlCommand command = new SqlCommand(commandText, connection); command.Parameters.Add("@ID", SqlDbType.Int); command.Parameters["@ID"].Value = customerID;
wind_msh 2017-04-17
  • 打赏
  • 举报
回复
引用 7 楼 diaodiaop 的回复:
而且 @数字.. 这也好奇葩吧. 一般不都是@字母 吗?
的确看起来非常奇怪.....
by_封爱 2017-04-17
  • 打赏
  • 举报
回复
而且 @数字.. 这也好奇葩吧. 一般不都是@字母 吗?
by_封爱 2017-04-17
  • 打赏
  • 举报
回复
既然是常理..直接取就完了 何必还在cs里做下配置...
wind_msh 2017-04-17
  • 打赏
  • 举报
回复
引用 3 楼 flying02 的回复:
出错代码: SqlObject sobj = new SqlObject(); sobj.MainCommand = "select * from b_news where id=@1 and isvalid=1"; sobj.Parameters.Add(config.newid3); DataSet ds = sobj.ExecuteQuery(); // 错误类型为sqlExeception ,应该是这一句报错 sobj.CloseConnection(); 错误信息:必须声明标量变量 “@1” sobj.Parameters.Add(config.newid3); 而这一句就是给@1传参的。 sobj.ExecuteQuery()方法内部会把@1换成config.newid3的值 ,如果运行正常,最终的SQL语句应该是: select * from b_news where id=1123 and isvalid=1 现在报错信息来看是找不到@1,说明没有把@1换成config.newid3的值 ,但这应该不是说config.newid3 没有值对吧? 这应该推反了我之前的判断,没有替换的原因还要去查,但无config.newid3是否有值无关?
从我在上面的回复可以看出来: cmd.Parameters.Add("@monthNo", System.Data.SqlDbType.Int); cmd.Parameters["@monthNo"].Value = 2; 这两行代码定义了参数 @monthNo 并传入了参数的值。 在你的代码里面貌似并没有定义参数的代码,而错误信息正好是参数没有定义。
wind_msh 2017-04-17
  • 打赏
  • 举报
回复
引用 3 楼 flying02 的回复:
出错代码: SqlObject sobj = new SqlObject(); sobj.MainCommand = "select * from b_news where id=@1 and isvalid=1"; sobj.Parameters.Add(config.newid3); DataSet ds = sobj.ExecuteQuery(); // 错误类型为sqlExeception ,应该是这一句报错 sobj.CloseConnection(); 错误信息:必须声明标量变量 “@1” sobj.Parameters.Add(config.newid3); 而这一句就是给@1传参的。 sobj.ExecuteQuery()方法内部会把@1换成config.newid3的值 ,如果运行正常,最终的SQL语句应该是: select * from b_news where id=1123 and isvalid=1 现在报错信息来看是找不到@1,说明没有把@1换成config.newid3的值 ,但这应该不是说config.newid3 没有值对吧? 这应该推反了我之前的判断,没有替换的原因还要去查,但无config.newid3是否有值无关?
从你的错误信息来看,应该不是没有取到 newid3的值, 这个网址有个例子: https://www.mssqltips.com/sqlservertip/2981/using-parameters-for-sql-server-queries-and-stored-procedures/ using (SqlConnection conn = new SqlConnection("YourConnectionString")) { conn.Open(); string sqlCom = "select SalesPerson from dbo.SalesData where mon = @monthNo and amount > @minAmount"; SqlCommand cmd = new SqlCommand(sqlCom, conn); cmd.Parameters.Add("@monthNo", System.Data.SqlDbType.Int); cmd.Parameters["@monthNo"].Value = 2; cmd.Parameters.Add("@minAmount", System.Data.SqlDbType.Decimal); cmd.Parameters["@minAmount"].Value = 100.00; SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { Console.WriteLine("SalesPerson = {0}", reader[0]); } reader.Close(); } 你可以看看,希望有帮助。
flying02 2017-04-16
  • 打赏
  • 举报
回复
出错代码: SqlObject sobj = new SqlObject(); sobj.MainCommand = "select * from b_news where id=@1 and isvalid=1"; sobj.Parameters.Add(config.newid3); DataSet ds = sobj.ExecuteQuery(); // 错误类型为sqlExeception ,应该是这一句报错 sobj.CloseConnection(); 错误信息:必须声明标量变量 “@1” sobj.Parameters.Add(config.newid3); 而这一句就是给@1传参的。 sobj.ExecuteQuery()方法内部会把@1换成config.newid3的值 ,如果运行正常,最终的SQL语句应该是: select * from b_news where id=1123 and isvalid=1 现在报错信息来看是找不到@1,说明没有把@1换成config.newid3的值 ,但这应该不是说config.newid3 没有值对吧? 这应该推反了我之前的判断,没有替换的原因还要去查,但无config.newid3是否有值无关?
flying02 2017-04-16
  • 打赏
  • 举报
回复
报谦,描述不详细。 是有抛出异常页面,而且指向这里无值,只是我试了几次异常切图没从手机上弄出来
  • 打赏
  • 举报
回复
你凭猜来说“取不到”?而且你的意识中,“取不到值”的这个概念不抛出异常、而是“切图给你个人看”? 你的问题实际上描述不出来真实 debug 信息。

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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