2015-09-05 41 views
0

如果我單擊搜索按鈕,我不斷收到IDNo的值錯誤,'11111'附近的語法錯誤可以有人幫助我嗎?使用存儲過程顯示數據vb.net

With acc 
     IDNo = .IDNo 
     StartDate = DateTime.Parse(.StartDate).ToString("M/d/yyyy") 
     EndDate = DateTime.Parse(.EndDate).ToString("M/d/yyyy") 
     ProjectName = .ProjectName 
     ReferenceNo = .ReferenceNo 
     TaskCode = .TaskCode 
     FileName = .Filename 
    End With 

    dgAccomplishment.DataSource = Nothing 
    dgAccomplishmentPT.DataSource = Nothing 
    da = New SqlDataAdapter("dbo.process_time @User='" & IDNo & "' ,@From='" & StartDate & "',@To='" & EndDate & " 11:59:59 PM'", DB.GetConnection) 
    dt = New DataTable 
    da.Fill(dt) 
    dgAccomplishment.DataSource = dt 
    dgAccomplishment.Columns("ID").Visible = False 
    dgAccomplishment.Columns("TimeSave").Visible = False 
    da.Dispose() 
    dt.Dispose() 

這是我的存儲過程

SELECT a.ID, RTRIM(a.Last_User) [ID No.], 
    RTRIM(Users.FIRSTNAME + ' ' + Users.INITIAL + '. ' + Users.LASTNAME) [Name], 
    RTRIM(a.ProjectName) [Project Name], 
    a.ProjectNo, a.ProjectCode, 
    RTRIM(a.Filename) [Filename], 
    RTRIM(a.Filesize) [Filesize], 
    RTRIM(a.filesizeunit) [FileSizeUnit], 
    a.TimeSave [TimeSave] 
from DBase.dbo.Acc a 
    INNER JOIN dbo.Users ON a.Last_User = Users.IDNo 
WHERE a.Last_User in (@user) 
    and CONVERT(VARCHAR(10),timesave,101) BETWEEN @From AND @To 
ORDER BY RTRIM(a.SubGroup), RTRIM(a.Last_User) 

但是當我嘗試運行一個查詢的程序效果很好。

+0

什麼是傳遞給@user參數的值? – Harsh

+0

您需要告訴適配器您正在使用存儲過程來檢索您的記錄,否則它認爲您正在使用SELECT命令 – Steve

+0

@User varchar(50) –

回答

0

因爲您正在使用字符串連接,所以您有舊的單引號問題:如果IDNo值包含單引號,則查詢將失敗。

更糟糕的是,您的代碼容易受到sql注入攻擊。

你必須轉義所有參數爲單引號,用2個單引號替換它們。

最好的解決方案在這裏:使用參數化的SQL