Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
VS TableAdapter查询配置向导中的SQL查询_Sql_Visual Studio_Tableadapter - Fatal编程技术网

VS TableAdapter查询配置向导中的SQL查询

VS TableAdapter查询配置向导中的SQL查询,sql,visual-studio,tableadapter,Sql,Visual Studio,Tableadapter,我正在尝试在Visual Studio TableAdapter查询向导中编写SQL查询 我的SQL查询是: DECLARE @SQL varchar(255); SET @SQL = ' SELECT * FROM dbAddress WHERE 1 = 1' IF @ApexLine1 = '' BEGIN SET @SQL = @SQL + ' AND addLine1 IS NULL ' END ELSE BEGIN S

我正在尝试在Visual Studio TableAdapter查询向导中编写SQL查询

我的SQL查询是:

    DECLARE @SQL varchar(255);

SET @SQL = ' SELECT * FROM dbAddress WHERE 1 = 1'

IF @ApexLine1 = ''
    BEGIN
        SET @SQL = @SQL + ' AND addLine1 IS NULL '
    END
ELSE
    BEGIN
        SET @SQL = @SQL + ' AND addLine1 = ''' + @ApexLine1 + ''''
    END

IF @ApexLine2 = ''
    BEGIN
        SET @SQL = @SQL + ' AND addLine2 IS NULL '
    END
ELSE
    BEGIN
        SET @SQL = @SQL + ' AND addLine2 = ''' + @ApexLine2 + ''''
    END

IF @ApexLine3 = ''
    BEGIN
        SET @SQL = @SQL + ' AND addLine3 IS NULL '
    END
ELSE
    BEGIN
        SET @SQL = @SQL + ' AND addLine3 = ''' + @ApexLine3 + ''''
    END

IF @ApexZip = ''
    BEGIN
        SET @SQL = @SQL + ' AND addPostCode IS NULL '
    END
ELSE
    BEGIN
        SET @SQL = @SQL + ' AND addPostCode = ''' + @ApexZip + ''''
    END

IF @ApexCity = ''
    BEGIN
        SET @SQL = @SQL + ' AND addLine4 IS NULL '
    END
ELSE
    BEGIN
        SET @SQL = @SQL + ' AND addLine4 = ''' + @ApexCity + ''''
    END

IF @ApexProv = ''
    BEGIN
        SET @SQL = @SQL + ' AND addLine5 IS NULL '
    END
ELSE
    BEGIN
        SET @SQL = @SQL + ' AND addLine5 = ''' + @ApexProv + ''''
    END

EXEC(@SQL)
我得到一个错误:

'不支持Declare SQL contruct或语句'

如果删除Declare语句,则会出现错误:

'不支持Set SQL构造或语句'

这有什么办法吗

谢谢。

诸如此类:

SET @SQL = @SQL + ' AND addLine1 = ''' + @ApexLine1 + ''''
是邪恶的。不要这样做。像@ApexLine1这样的变量可以包含任何内容,甚至包括以下内容:

",;删除表dbAddress--

仔细考虑如果有人在您的地址行1字段中输入类似的内容会发生什么。这里唯一正确的解决方案是使用内置的
sp_executesql
存储过程。学习它,使用它

除此之外,我认为至少部分问题可能是@SQL变量只有255个字符。很有可能您的查询空间不足。

类似的内容:

SET @SQL = @SQL + ' AND addLine1 = ''' + @ApexLine1 + ''''
是邪恶的。不要这样做。像@ApexLine1这样的变量可以包含任何内容,甚至包括以下内容:

",;删除表dbAddress--

仔细考虑如果有人在您的地址行1字段中输入类似的内容会发生什么。这里唯一正确的解决方案是使用内置的
sp_executesql
存储过程。学习它,使用它


除此之外,我认为至少部分问题可能是@SQL变量只有255个字符。很可能是您的查询空间不足。

NeverNEVER从未构建过这样的查询字符串。NeverNEVER从未构建过这样的查询字符串。我不太担心SQL注入问题,因为参数不是从文本框或任何东西获取的。它们是从代码隐藏中的另一个数据库中提取的。此外,这是一个本地intranet应用程序,我们公司以外的任何人都无法访问。这只是一个测试查询,255个字符在工作后将被删除,但这不是问题所在。它们是否从另一个数据库中提取并不重要。这仍然是一个注入风险(二阶注入),因为该数据库可能是在某个地方手工填充的。“本地内联网”从来不是借口——大多数攻击都是在作业内部进行的。即使这些都是正当的借口,为什么不做对呢?这并不难。你对那个查询所做的是完全错误的。我明白了。我会采取必要的措施来修复。谢谢。我不太担心SQL注入问题,因为参数不是从文本框或任何东西获取的。它们是从代码隐藏中的另一个数据库中提取的。此外,这是一个本地intranet应用程序,我们公司以外的任何人都无法访问。这只是一个测试查询,255个字符在工作后将被删除,但这不是问题所在。它们是否从另一个数据库中提取并不重要。这仍然是一个注入风险(二阶注入),因为该数据库可能是在某个地方手工填充的。“本地内联网”从来不是借口——大多数攻击都是在作业内部进行的。即使这些都是正当的借口,为什么不做对呢?这并不难。你对那个查询所做的是完全错误的。我明白了。我会采取必要的措施来修复。非常感谢。