我有一个控件,在回发时,将表单结果保存回数据库.它通过遍历查询字符串来填充要保存的值.因此,对于以下SQL语句(为了讨论而大大简化)......
UPDATE MyTable
SET MyVal1 = @val1,
MyVal2 = @val2
WHERE @id = @id
Run Code Online (Sandbox Code Playgroud)
...它会循环通过查询字符串键:
For Each Key As String In Request.QueryString.Keys
Command.Parameters.AddWithValue("@" & Key, Request.QueryString(Key))
Next
Run Code Online (Sandbox Code Playgroud)
但是,我现在遇到的情况是,在某些情况下,这些变量中的某些变量可能不存在于查询字符串中.如果我不在querystring中传递val2,我会收到一个错误:System.Data.SqlClient.SqlException: Must declare the scalar value "@val2".
尝试检测SQL语句中的缺失值...
IF @val2 IS NOT NULL
UPDATE MyTable
SET MyVal1 = @val1,
MyVal2 = @val2
WHERE @id = @id
Run Code Online (Sandbox Code Playgroud)
... 失败了.
攻击它的最佳方法是什么?我必须用RegEx解析SQL块,扫描查询字符串中不存在的变量名吗?或者,有更优雅的方法吗?
更新:检测VB代码隐藏中的空值会破坏将代码与其上下文分离的目的.我宁愿不为每个可能传递或不传递的可能变量的条件丢弃我的函数.
如果没有从任何地方调用foo(),我想删除foo().
我一直在尝试编写一个Lisp宏,它会出于语义原因而在其他编程语言中使用相当于++的++.我试图用几种不同的方式做到这一点,但它们似乎都没有用,并且所有都被解释器接受,所以我不知道我是否有正确的语法.我对如何定义它的想法是
(defmacro ++ (variable)
(incf variable))
Run Code Online (Sandbox Code Playgroud)
但是在尝试使用它时,这给了我一个简单的错误.什么会使它工作?
我是一名长期从事PHP项目的Java程序员,我正在努力让PHPUnit工作起来.在Java中进行单元测试时,通常将测试用例类和常规类放入不同的目录中,如下所示 -
/src
MyClass.java
/test
MyClassTest.java
Run Code Online (Sandbox Code Playgroud)
等等.
使用PHPUnit进行单元测试时,遵循相同的目录结构是否常见,或者是否有更好的方法来布置测试类?到目前为止,我能让"include("MyClass.php")"语句正常工作的唯一方法是将测试类包含在同一目录中,但是当我推送到时,我不想包含测试类生产.
当使用DataReader对象通过存储过程从数据库(例如SQL Server)访问数据时,在执行之前添加到Command对象的任何输出参数在读取后都不会被填充.我可以很好地读取行数据,以及所有输入参数,但不能读取输出参数.
有人告诉我,使用StringBufferJava连接字符串比使用+运算符Strings 更有效.当你这样做时会发生什么?有什么StringBuffer不同的做法?
我一直在寻找在浏览器中实现类似gmail的消息传递的方法,并得出了Comet的概念.但是,我还没有找到一个很好的.NET实现,允许我在IIS中执行此操作(我们的应用程序是用ASP.NET 2.0编写的).
我找到的解决方案(或者可以想到的解决方案)需要为每个用户留下一个正在运行的线程 - 这样一旦收到消息就可以向他返回响应.当然,这根本不可扩展.
所以我的问题是 - 你知道Comet的ASP.NET实现以不同的方式工作吗?这甚至可以用于IIS吗?
我想知道如何用Zend_Test编写PHPUnit测试,一般用PHP编写.
也许这是一个愚蠢的问题,但我总是假设每个数字描述的时期代表了软件的一个组成部分.如果这是真的,他们会代表不同的东西吗?我想开始为我的软件的不同版本分配版本,但我不确定它应该如何构建.我的软件有五个不同的组件.
众所周知,Visual C++运行时标记未初始化或刚刚释放的具有特殊非零标记的内存块.有没有办法完全禁用此行为,而无需手动将所有未初始化的内存设置为零?这是因为我的有效非空检查造成了破坏0xFEEEFEEE != 0.
嗯,也许我应该更好地解释一下.我创建并初始化一个变量(通过new),一切都很好.当我释放它(通过删除)时,它将指针设置为0xFEEEFEEE而不是NULL.当我插入一个适当的检查NULL,因为所有管理自己的内存的好程序应该,我提出问题,因为0xFEEEFEEE通过NULL检查没有问题.有没有什么好的方法,除了NULL在删除它们时手动设置所有指针,以检测何时已释放内存?我宁愿不使用Boost只是因为我不想要开销,虽然它可能很小,因为这是我唯一使用Boost的东西.
.net ×2
ado.net ×2
php ×2
phpunit ×2
unit-testing ×2
allocation ×1
asp.net ×1
c# ×1
c++ ×1
comet ×1
common-lisp ×1
datareader ×1
iis ×1
java ×1
lisp ×1
macros ×1
memory ×1
optimization ×1
parameters ×1
sql ×1
testing ×1
vb.net ×1
versions ×1