{"Не разрешено изменять свойство connectionstring. Текущее состояние соединения открыто."}
Sub SaveData() MainForm.Cursor = Cursors.WaitCursor Dim SqlStr As String = "" 'If IsOpenForAlter = True Then SqlStr = "UPDATE Assets SET [dbo].[AssetID]=@AssetID [AssetBarcode]=@AssetBarcode,[AssetName]=@AssetName,[AssetType]=@AssetType,[AssetDesc]=@AssetDesc,[Store]=@Store,[AssetLocation]=@AssetLocation,[Manufacture]=@Manufacture,[Brand]=@Brand,[Model]=@Model,[AssetMore]=@AssetMore,[AssetSNo]=@AssetSNo,[AssetTotal]=@AssetTotal,[Status]=@Status,[Condition]=@Condition,[AssetExpiry]=@AssetExpiry,[AssetNotes]=@AssetNotes,[PhotoPath]=@PhotoPath,[AssetVendor]=@AssetVendor,[AssetPurRate]=@AssetPurRate,[AssetScrap]=@AssetScrap,[AssetYear]=@AssetYear,[AssetPurDate]=@AssetPurDate,[AssetServiceStartDate]=@AssetServiceStartDate,[AssetWarranty]=@AssetWarranty,[AssetDepreciation]=@AssetDepreciation,[AssetDepreciationRate]=@AssetDepreciationRate, WHERE AssetName=N'" & OpenedAssetName & "'" 'Else SqlStr = "INSERT INTO [dbo].[Assets] ([AssetID],[AssetBarcode],[AssetName],[AssetType],[AssetDesc],[Store],[AssetLocation],[Manufacture],[Brand],[Model],[AssetMore],[AssetSNo],[AssetTotal],[Status],[Condition],[AssetExpiry],[AssetNotes],[PhotoPath],[AssetVendor],[AssetPurRate],[AssetScrap],[AssetYear],[AssetPurDate],[AssetServiceStartDate],[AssetWarranty],[AssetDepreciation],[AssetDepreciationRate]) VALUES " _ & " (@AssetID,@AssetBarcode,@AssetName,@AssetType,@AssetDesc,@Store,@AssetLocation,@Manufacture,@Brand,@Model,@AssetMore,@AssetSNo,@AssetTotal,@Status,@Condition,@AssetExpiry,@AssetNotes,@PhotoPath,@AssetVendor,@AssetPurRate,@AssetScrap,@AssetYear,@AssetPurDate,@AssetServiceStartDate,@AssetWarranty,@AssetDepreciation,@AssetDepreciationRate) " 'End If Try MAINCON.ConnectionString = ConnectionStrinG MAINCON.Open() Dim DBF As New SqlClient.SqlCommand(SqlStr, MAINCON) With DBF.Parameters If Integer.TryParse(TxtAssetID.Text, id) Then DBF.Parameters.AddWithValue("@AssetID", id) Else '' The text in the textbox was not a valid integer representation. '' You may have to handle that case here. End If .AddWithValue("@AssetID", Integer.Parse(TxtAssetID.Text)) .AddWithValue("@AssetBarcode", TxtAssetBarcode.Text) .AddWithValue("@AssetName", TxtAssetName.Text) .AddWithValue("@AssetType", TxtAssetType.Text) .AddWithValue("@AssetDesc", TxtDescr.Text) .AddWithValue("@Store", TxtStoreName.Text) .AddWithValue("@AssetLocation", TxtLocation.Text) .AddWithValue("@Manufacture", TxtManufacture.Text) .AddWithValue("Brand", TxtBrand.Text) .AddWithValue("@Model", TxtModel.Text) .AddWithValue("@AssetMore", TxtMoreInfo.Text) .AddWithValue("@AssetSNo", TxtSerialNumber.Text) .AddWithValue("@AssetTotal", TxtQty.Text) .AddWithValue("@Status", TxtAssetStatus.Text) .AddWithValue("@Condition", txtCondition.Text) .AddWithValue("AssetExpiry", TxtExpiry.Value) .AddWithValue("@AssetNotes", TxtNote.Text) .AddWithValue("@PhotoPath", PhotoPathForLedgers & "\Others\" & TxtAssetName.Text & ".jpg") .AddWithValue("@AssetVendor", TxtVendorName.Text) .AddWithValue("@AssetPurRate", TxtPurRate.Text) .AddWithValue("@AssetScrap", TxtScrapValue.Text) .AddWithValue("@AssetYear", TxtYears.Text) .AddWithValue("@AssetPurDate", TxtpurchaseDate.Value) .AddWithValue("@AssetServiceStartDate", TxtServiceStartDate.Value) .AddWithValue("@AssetWarranty", TxtWarrantyDate.Value) .AddWithValue("@AssetDepreciation", TxtDepreMethod.Text) .AddWithValue("@AssetDepreciationRate", TxtDepRate.Text) End With DBF.ExecuteNonQuery() DBF = Nothing MAINCON.Close() Catch ex As Exception MsgBox(ex.Message) End Try Dim OpenedID As Integer = 1 Dim cnn As SqlConnection cnn = New SqlConnection(ConnectionStrinG) cnn.Open() Dim ds As New DataSet() MainForm.Cursor = Cursors.WaitCursor
Что я уже пробовал:
я понятия не имею об этом никто мне не поможет заранее спасибо
MadMyche
Помогите нам помочь вам, отформатировав ваш код и поместив его в кодовый блок. Чем легче нам читать, тем легче помочь вам
Richard Deeming
".. [AssetDepreciationRate]=@AssetDepreciationRate, WHERE AssetName=N'" & OpenedAssetName & "'"
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
Вы уже знаете, как использовать параметры; вы делаете это буквально для всего остального в этом запросе. Так почему же вы сдались в конце концов?
Кроме того, в этом запросе есть случайная запятая между последним параметром и
WHERE
.