Hresult=0x80131515 значение параметра
Привет,
Я работаю в приложении в VB.NET-да. Я застрял в этой ошибке:
Система.исключение NotSupportedException
HResult=0x80131515
Message=идентификатор клиента-члена типа BillTimeLibrary.BillTimeLibrary.Модели.ClientModel не может использоваться в качестве значения параметра
Контекстуализация...
Во-первых, у меня есть такое же приложение, работающее на C#. Я превращаюсь в VB.NET чтобы узнать и понять, как использовать базу данных SQLite с Dapper с этими обоими языками.
Ошибка появляется при передаче параметра из подпрограммы, которая соединяет две таблицы из моей базы данных.
Таблица платежей имеет ключ Foreing с именем ClientId, который определяет, от какого клиента происходит платеж. В окне платежей у меня есть выпадающий список, где я выбираю клиента, и если есть какой-либо платеж, то даты платежей перечислены в другом выпадающем списке.
Этот запрос не работает, когда я выбираю клиента, программа должна получать платежи в планшетных платежах по ClientId, но она выдает ту ошибку, о которой я упоминал выше.
Подпрограмма, которая должна передавать параметры для запроса, является:
Private Sub LoadDateDropDown() Dim sql As String = "select * from Payment where ClientId = @ClientId" Dim parameters As Dictionary(Of String, Object) = New Dictionary(Of String, Object) From { {"@ClientId", ClientDropDown.SelectedValue} } Dim records = SQLiteDataAccess.LoadData(Of PaymentsModel)(sql, parameters) payments.Clear() records.ForEach(Sub(x) payments.Add(x)) End Sub
сообщение просматривается в подгруппе Load, которая получает параметры.
Параметр, упомянутый в сообщении, создается в модели: он имеет тот же тип переменной, что и таблица базы данных.
Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports System.Threading.Tasks Namespace BillTimeLibrary.Models Public Class PaymentsModel Public Property Id As Integer Public Property ClientId As Integer Public Property Hours As Double Public Property Amount As Double Public Property DatePayment As String End Class End Namespace
Я думаю, что я может быть использование неправильного имущество ClientDropDown (мой комбобокс)
Смотрите исходный код на языке Си#:
private void LoadDateDropDown() { string sql = "select * from Payment where ClientId = @ClientId"; Dictionary<string, object> parameters = new Dictionary<string, object> { { "@ClientId", ClientDropDown.SelectedValue } }; var records = SQLiteDataAccess.LoadData<PaymentsModel>(sql, parameters); payments.Clear(); records.ForEach(x => payments.Add(x)); }
Что я уже пробовал:
Я пытаюсь понять, как получить доступ к таблице платежей через поле ClientId. Пока безрезультатно.
Это полная информация об ошибке.. кажется, что-то с Dapper. Но так как я новичок в этом деле, то пока не знаю, как его решить.
Система.исключение NotSupportedException
HResult=0x80131515
Message=идентификатор клиента-члена типа BillTimeLibrary.BillTimeLibrary.Модели.ClientModel не может использоваться в качестве значения параметра
Источник=Щеголеватый
Трассировка стека:
в Dapper.SqlMapper.LookupDbType(Type type, String name, Boolean demand, ITypeHandler& handler) в C:\projects\dapper\Dapper\SqlMapper.cs:line 417
в Dapper.Динамические параметры.AddParameters(IDbCommand command, Identity identity) in C:\projects\dapper\Dapper\DynamicParameters.cs:line 238
в Dapper.Динамические параметры.Щеголеватый.SqlMapper.IDynamicParameters.AddParameters(IDbCommand command, Identity identity) in C:\projects\dapper\Dapper\DynamicParameters.cs:line 156
в Dapper.SqlMapper.&ЛТ;&ГТ;с__DisplayClass161_0.&ЛТ;getcacheinfo&ГТ;б__0 (, объект IDbCommand УМК объект) в C:\projects\dapper\Dapper\SqlMapper.cs:line 1694
в Dapper.CommandDefinition.SetupCommand(IDbConnection cnn, Action`2 paramReader) in C:\projects\dapper\Dapper\CommandDefinition.cs:line 128
в Dapper.SqlMapper.<queryimpl>d__138`1.MoveNext() in C:\projects\dapper\Dapper\SqlMapper.cs:line 1075 г.
в системе.Коллекции.Generic.List`1..ctor(IEnumerable`1 коллекция)
в System.Linq.Перечислимый.ToList[TSource](IEnumerable`1 source)
в Dapper.SqlMapper.Запрос[Т](интерфейс idbconnection CNN, в строку SQL, объектно парам, сделки IDbTransaction, логическое буферизацией, допускающий значение null,`1 commandTimeout, допускающий значение null,`1 свойство commandtype) в C:\projects\dapper\Dapper\SqlMapper.cs:line 723
в Биллтимелибрарии.SQLiteDataAccess.LoadData[T](String sqlStatement, Dictionary`2 parameters, String connectionName) in C:\BillTime_VB\BillTimeLibrary\DataAccess\SQLiteDataAccess.vb:line 25
в BillTime_VB.Платежи.LoadDateDropDown() in C:\BillTime_VB\BillTime_VB\Controls\Payments.vb:line 141
в BillTime_VB.Платежи.ClientDropDown_SelectedIndexChanged(отправитель объекта, EventArgs e) in C:\BillTime_VB\BillTime_VB\Controls\Payments.vb:line 133
в системе.Окна.Формы.комбинированный список.OnSelectedIndexChanged(EventArgs e)
в системе.Окна.Формы.ComboBox.set_SelectedIndex(значение Int32)
в системе.Окна.Формы.комбинированный список.RefreshItems()
в системе.Окна.Формы.комбинированный список.OnDataSourceChanged(EventArgs e)
в системе.Окна.Формы.Элементе управления listcontrol.SetDataConnection(Object newDataSource, BindingMemberInfo newDisplayMember, Boolean force)
в системе.Окна.Формы.Элементе управления listcontrol.set_DataSource(объектное значение)
Dave Kreskowiak
Мы не могли бы сказать вам, как проблема лежит в/за SQLiteDataAccess. Это не обычный тип, так что это должно быть что-то в вашем коде где-то.