2013-01-09 38 views
1

我试图用一个变量作为SQL列字段。然而,当我运行代码,我得到了以下错误:无效字符错误(ADO/ASP)


Microsoft VBScript compilation error '800a0408' 

Invalid character 

/junk/dbresults.htm, line 25 

DECLARE @cat char(20) 
--------^ 

的代码如下:

<% 
    Dim connectString, connect, conDB, con 
    connectString = "Driver={Microsoft Text Driver (*.txt; *.csv)}; DBQ=" & Server.MapPath("data") 
      src_abn = Request.QueryString("abn") 
      src_cat = Request.QueryString("cat") 
    set connect = Server.CreateObject("ADODB.connection") 
    connect.open connectString 

    DECLARE @cat char(20) 
    DECLARE @dynamicsql char(1000) 

    SET @cat = src_cat; 
    SET @dynamicsql = "SELECT * FROM cont.csv WHERE @cat='Yes'" 

    if src_abn = "all" then 
    conDB = EXEC (@DynamicSQL) 
    else 
    conDB = "SELECT * FROM cont.csv WHERE ucase(abn) LIKE ucase('%"+src_abn+"%')" 
    end if 

    set con = connect.execute(conDB) 
%> 

+0

你混合了ASP/VBScript中(其中在.asp文件''<%' and '%>之间去)和Microsoft SQL Server的Transact/SQL(你放入存储过程中的SQL服务器上)。 – webaware

回答

2

我还不能肯定你想要什么要做,但不能用传统的ASP运行SQL语法(即DECLARE @cat ...)。你想要做这样的事吗?

<% 
    //Request your variables 
    src_abn = Request.QueryString("abn") 
    src_cat = Request.QueryString("cat") 

    Dim connectionString, dbConn, rsResults, strSQL 

    //Setup your connection 
    connectionString = "Driver={Microsoft Text Driver (*.txt; *.csv)}; DBQ=" & Server.MapPath("data") 
    set dbConn= Server.CreateObject("ADODB.Connection") 
    dbConn.open connectionString 

    //Create your sql statement 
    if src_abn = "all" then 
     strSQL = "SELECT * FROM cont.csv WHERE " & src_cat & "='Yes'" 
    else 
     strSQL = "SELECT * FROM cont.csv WHERE ucase(abn) LIKE ucase('%" & src_abn & "%')" 
    end if 

    //Create your results 
    set rsResults = Server.CreateObject("ADODB.Recordset") 
    rsResults.open strSQL, dbConn 

    //Loop through your results 
    While Not rsResults.EOF 

     rsResults.MoveNext 
    Wend 

    //Closes results and connection 
    rsResults.Close 
    dbConn.Close 
%> 
+0

基本上我需要@cat是一个变量,它从src_cat获取它的值,我需要在SQL语句中使用它。 我在CSV文件中有一些字段。 A,B,C等我需要的sql语句应用到正确的字段(用户从另一个页面选择)该代码工作,其刚刚起步的变量是在SQL语句是问题的动态。 有可能是一个更好的办法做我想要做的,但我不能想什么。 案例研究: 用户选择类别B || (SQL语句的WHERE B =“是”“) 用户选择F类||(其中F =‘是’SQL语句” – sephiith

+0

啊,你想要的@cat变量是动态的列名) - 见上面的编辑。 – sgeddes

+0

这当然似乎是进步,但一个新的错误弹出与该代码如下, Microsoft OLE DB提供程序的ODBC驱动程序错误“80040E14” [微软] [ODBC文本驱动程序]语法错误(缺少运算符)查询表达式'='是''。 /junk/dbresults.htm 38行 – sephiith