2012-02-16 72 views
-2
da = New SqlDataAdapter("select * from revision_cycle_documenttype_mapping where project_id=" & Session("project_id"), con) 
cb = New SqlCommandBuilder(da) 
ds = New DataSet 
da.Fill(ds, "revision_cycle_documenttype_mapping") <<-- 
mapping_count = ds.Tables("revision_cycle_documenttype_mapping").Rows.Count 
Response.Write(mapping_count) 

我得到一个错误“不正确的语法附近'='”。 我已经展示了哪个部分抛出错误,即da.fill。ASP.net数据集

你能帮我吗?

+2

我会假设会话(“project_id”)为空或空。您应该使用命令参数而不是内联SQL来防止可能的SQL注入攻击。 – 2012-02-16 06:12:03

回答

0

编辑

如果它抛出错误上da.Fill然后尝试第一次看到生成的SQL代码。您的project_id可能为空。

编辑

这是一个可能的解决方案

Dim projectId As Integer 
If Session("project_id") IsNot Nothing AndAlso IsNumeric(Session("project_id")) Then 
    projectId = Session("project_id") 
    da = New SqlDataAdapter("select * from revision_cycle_documenttype_mapping where project_id=" & projectId, con) 
    cb = New SqlCommandBuilder(da) 
    ds = New DataSet 
    da.Fill(ds, "revision_cycle_documenttype_mapping") <<-- 
    mapping_count = ds.Tables("revision_cycle_documenttype_mapping").Rows.Count 
    Response.Write(mapping_count) 
End If 
0

我觉得你的会话Session("project_id")是空的,这不是在乌尔SQL语句添加参数的最佳途径。你的代码很容易被sql注入。 你应该首先检查你的会话是空的,那么你应该通过声明一个SqlCommand添加参数,并为它分配参数:

dim project_id as integer = 0 
If Session("project_id") IsNot Nothing AndAlso IsNumeric(Session("project_id")) Then 
project_id = Session("project_id") 
end if 
dim cmd as new sqlcommand 
cmd.parameters.add("@project_id",project_id) 

你的代码的其余部分将保持不变

0

使用的参数和检查空。

Dim projectid=0 
If Not IsNothing(Session("project_id")) Then 
    projectid=DirectCast(Session("project_id"),Integer) 
End If 

Dim sql="select * from revision_cycle_documenttype_mapping where [email protected]_id" 
dim cmd as new SqlCommand(sql,con) 
cmd.Parameters.AddWithValue("@project_id",projectid) 

da = New SqlDataAdapter=(cmd) 

cb = New SqlCommandBuilder(da) 
ds = New DataSet 
da.Fill(ds, "revision_cycle_documenttype_mapping")