Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取.net ExecuteOnQuery上的奇数错误_.net_Sql Server - Fatal编程技术网

获取.net ExecuteOnQuery上的奇数错误

获取.net ExecuteOnQuery上的奇数错误,.net,sql-server,.net,Sql Server,我在.NET中工作,后端使用SQL server 我有一个数据库,我使用web控件创建了一个记录,然后我需要更新一些字段。 我可以捕获sql语句并在sql server中成功运行它-但是,当我尝试运行execute non query时,会出现以下错误: 未处理的执行错误 “附近的语法不正确在我查看错误的位置之前,我建议您立即停止所做的工作,首先更改所有sql代码以使用参数。如果您不这样做,您的站点将受到sql注入攻击,这些攻击可能会破坏您的数据库 要找出问题所在,请运行探查器并检查stmt:s

我在.NET中工作,后端使用SQL server

我有一个数据库,我使用web控件创建了一个记录,然后我需要更新一些字段。 我可以捕获sql语句并在sql server中成功运行它-但是,当我尝试运行execute non query时,会出现以下错误:

未处理的执行错误
“附近的语法不正确在我查看错误的位置之前,我建议您立即停止所做的工作,首先更改所有sql代码以使用参数。如果您不这样做,您的站点将受到sql注入攻击,这些攻击可能会破坏您的数据库


要找出问题所在,请运行探查器并检查stmt:starting和stmt:completed事件。

第一件事优先;设置为在异常时停止,以便您可以看到它是哪个非查询-然后您将能够看到出错的命令文本


我还建议将这些查询转换为存储过程或至少参数化查询;不仅是执行计划的性能提升,而且从安全的角度考虑TXTEMARE.Text是什么;下拉表vti_联系人信息;选择“

”,除了上面关于的其他答案外,您还需要查看:

... " & CoId & " ...

... " & myCDataReader.GetValue(0) & " ...

... " & srId & " ...

这些语句不会转义,因此您的错误很有可能存在。

很可能将此代码转换为参数化查询所需的时间比跟踪问题所需的时间要短。没有更多的SQL注入风险,更易于阅读,并且您可以得到一个执行计划。三赢


这样连接字符串很容易出错,这是避免以这种方式执行SQL的另一个原因

我的看法是在执行命令之前中断。打印commandtext,切换到sql查询分析器并将sql字符串粘贴到那里,然后运行。然后,如果问题在命令中,您将确切地看到问题所在


我认为您的值转义了sql字符串,并且包含“<或其他内容。

您确定UPDATE语句中存在错误吗? 我想它在SELECT语句中,正如我从stacktrace中看到的那样。为什么不在语句中使用参数呢

除此之外,您的代码编写效率要高得多。 现在,执行SELECT语句,并对结果集中的每条记录执行更新查询。 要知道SQL是基于集合的,并且这可以写在一条语句中

诸如此类:

UPDATE sr_service
   SET contact_name = vti_ContactInformation.FirstName + ' ' + vti_ContactInformation.LastName
   ... your other columns ..
FROM vti_ContactInformation
WHERE sr_service.sr_service_recid = {yourid}
确保用适当的列替换{yourid}。
我没有这样做,因为我无法直接看到您分配给srId变量的值。

谢谢大家-当我将所有内容更改为参数时,我发现srId变量中的值有一些隐藏文本和一些xml标记遗留。一旦我弄清楚了,它就工作得很好


谢谢你的指点和良好的方向

如果我注释掉ExecuteOnQuery行,它可以正确运行。我之所以没有将其作为一条语句来执行,是因为如果联系人表中不存在该用户,我不会执行更新,我允许保留默认联系人。如果该用户不存在,则也不会更新任何内容,因为contacts表中没有记录,或者我的假设是错误的吗?我仍然认为您应该可以在一个查询中实现这一点:
UPDATE sr_service
   SET contact_name = vti_ContactInformation.FirstName + ' ' + vti_ContactInformation.LastName
   ... your other columns ..
FROM vti_ContactInformation
WHERE sr_service.sr_service_recid = {yourid}