2012-02-16 52 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")