Указанное приведение не является допустимым ?
Всем Привет,
Я использовал код от Создание многосерийной линейной диаграммы (графика) в приложении Windows Forms с использованием C# и VB.Net[^] для моих карт в vb.net и я изменил его в зависимости от своей потребности, и я получаю ошибку, которая говорит: "указанный бросок недопустим" в моем поле "год".
Вот этот код :
Dim query As String = "SELECT SUM(Price) AS 'Total' ,CONVERT(char(7), date, 120) AS 'year' ,Department as 'Department' FROM [dbo].[Expenses] WHERE Department IN ('Electronics' ,'Grocery','Other','Vacation','FixCost','Clothes') GROUP BY Rollup (CONVERT(char(7), date, 120)), Department HAVING CONVERT(char(7), date, 120) >= '" & DateTimePickerfrom.Text & "'" _ & " And Convert(Char(7), Date, 120) <= '" & DateTimePickerto.Text & "'" Dim dt As DataTable = GetData(query) 'Get the DISTINCT Countries. Dim countries As List(Of String) = (From p In dt.AsEnumerable() Select p.Field(Of String)("Department")).Distinct().ToList() 'Remove the Default Series. If Chart1.Series.Count() = 1 Then Chart1.Series.Remove(Chart1.Series(0)) End If For Each country As String In countries 'Get the Year for each Country. Dim x As Integer() = (From p In dt.AsEnumerable() Where p.Field(Of String)("Department") = country Order By p.Field(Of Integer)("year") '---> Here i get the error Select p.Field(Of Integer)("year")).ToArray() _ 'Get the Total of Orders for each Country. Dim y As Integer() = (From p In dt.AsEnumerable() Where p.Field(Of String)("Department") = country Order By p.Field(Of Integer)("year") Select p.Field(Of Integer)("Total")).ToArray() _ 'Add Series to the Chart. Chart1.Series.Add(New Series(country)) Chart1.Series(country).IsValueShownAsLabel = True Chart1.Series(country).BorderWidth = 3 Chart1.Series(country).ChartType = SeriesChartType.Line Chart1.Series(country).Points.DataBindXY(x, y) Next Chart1.Legends(0).Enabled = True
Что я уже пробовал:
Я попробовал совершенно другой подход, создав для каждого отдела функцию, а затем вызвав их в источнике данных, но я только что обнаружил, что диаграмма принимает только один источник данных.
Благодарно,
Richard Deeming
Dim query As String = "SELECT SUM(Price) AS 'Total' ,CONVERT(char(7), date, 120) AS 'year' ,Department as 'Department' FROM [dbo].[Expenses] WHERE Department IN ('Electronics' ,'Grocery','Other','Vacation','FixCost','Clothes') GROUP BY Rollup (CONVERT(char(7), date, 120)), Department HAVING CONVERT(char(7), date, 120) >= '" & DateTimePickerfrom.Text & "'" _ & " And Convert(Char(7), Date, 120) <= '" & DateTimePickerto.Text & "'"
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
Member 13410460
Отмеченный :)
Спасибо