Novice12 Ответов: 2

Несоответствие типов данных в выражении критериев.


Я пытаюсь вставить в оператор , который я искал в интернете, никаких ошибок не найдено, но когда я его запускаю

((((Несоответствие типов данных в выражении критериев.)))))

"эта ошибка появляется
в чем может быть причина?

Что я уже пробовал:

'this is what i have tried

Dim sql As String = "INSERT INTO Elementary VALUES(@SchoolName, @SchoodID, @KM, @KF,@KT,@G1M,@G1F,@G1T,@G2M,@G2F,@G2T,@G3M,@G3F,@G3T,@G4M,@G4F,@G4T,@G5M,@G5F,@G5T,@G6M,@G6F,@G6T,@TM,@TF,@GT,@SY,@District,@Field2)"
        Using conn = New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\plan.mdb")
            Using sqlCom = New System.Data.OleDb.OleDbCommand(sql, conn)
                conn.Open()
                sqlCom.Parameters.Add("@name", OleDbType.VarWChar).Value = SchoolNameTextBox.Text
                sqlCom.Parameters.Add("@pass", OleDbType.VarWChar).Value = SchoodIDTextBox.Text
                sqlCom.Parameters.Add("@sec", OleDbType.VarWChar).Value = KMTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = KFTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = KTTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G1MTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G1FTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G1TTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G2MTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G2FTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G2TTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G3MTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G3FTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G3TTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G4MTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G4FTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G4TTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G5MTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G5FTextBox.Text
                 sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G5TTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G6MTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G6FTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G6TTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = TMTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = TFTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = GTTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = SYTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = DistrictTextBox.Text
                sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = Field2TextBox.Text

                Dim icount As Integer = sqlCom.ExecuteNonQuery
            End Using
        End Using

2 Ответов

Рейтинг:
16

OriginalGriff

Начните с явного перечисления столбцов, в которые должны входить параметры:

INSERT INTO MyTable (Column1, Column2) VALUES (@C1, @C2)
Если вы этого не сделаете, то SQL не знает точно, что вы хотите сделать, поэтому он вставляет значения в "текущий порядок таблиц". Поэтому, если у вас есть столбец IDENTITY ID спереди (а вы, вероятно, должны это сделать), он попытается написать в него первым, например.
Затем вам нужно предоставить параметры с соответствующими именами:
sqlCom.Parameters.Add("@SchoolName", OleDbType.VarWChar).Value = SchoolNameTextBox.Text
sqlCom.Parameters.Add("@SchoodID", OleDbType.VarWChar).Value = SchoodIDTextBox.Text
...

И ваш столбец ID - если это не столбец Guid / UNIQUEIDENTIFIER, вы вообще не должны передавать его в SQL: SQL Server - это многопользовательская система баз данных, и prcisifying ID values в вашем программном обеспечении для презентаций-очень плохая идея-это приводит к тому, что два или более пользователя задают одно и то же значение, а затем данные безнадежно повреждаются. Используйте столбец идентификатора (или UNIQUEIDENTIFIER) и позвольте SQL отсортировать значение.


Novice12

Dim sql As String = "INSERT INTO Elementary (SchoolName,SchoodID,KM,KF,KT,G1M,G1F,G1T,G2M,G2F,G2T,G3M,G3F,G3T,G4M,G4F,G4T,G5M,G5F,G5T,G6M,G6F,G6T,TM,TF,GT,SY,District,Field) значения(@SchoolName, @SchoodID, @KM, @KF,@KT,@G1M,@G1F,@G1T,@G2M,@G2F,@G2T,@G3M,@G3F,@G3T,@G4M,@G4F,@G4T,@G5M,@G5F,@G5T,@G6M,@G6F,@G6T,@TM,@TF,@GT,@SY,@District,@Field2)"

правильно ли это?

OriginalGriff

Это выглядит лучше, но у меня нет доступа к вашей базе данных, чтобы проверить имена столбцов.
Быстрая проверка с моим текстовым редактором говорит, что они совпадают, хотя:

SchoolName     @SchoolName   
SchoodID       @SchoodID    
KM             @KM          
KF             @KF          
KT             @KT           
G1M            @G1M          
G1F            @G1F          
G1T            @G1T          
G2M            @G2M          
G2F            @G2F          
G2T            @G2T          
G3M            @G3M          
G3F            @G3F          
G3T            @G3T          
G4M            @G4M          
G4F            @G4F          
G4T            @G4T          
G5M            @G5M          
G5F            @G5F          
G5T            @G5T          
G6M            @G6M          
G6F            @G6F          
G6T            @G6T          
TM             @TM           
TF             @TF           
GT             @GT           
SY             @SY           
District       @District     
Field          @Field2

Novice12

Это единственные столбцы в моей таблице базы данных

или, возможно,. в моем коде чего-то не хватает?

Novice12

Это единственные столбцы в моей таблице базы данных

или, возможно,. в моем коде чего-то не хватает?
или мне следует изменить свойства столбца на короткий текст? потому что я использовал номер

OriginalGriff

Если вы использовали числовые столбцы в БД, то вам нужно передать фактические числа, а не содержимое текстового поля: используйте int.Метод tryparse, двухместная.TryParse и так далее в зависимости от типа столбца number сначала проверяют и преобразуют содержимое текстового поля, а затем пытаются сохранить его в БД только в том случае, если все они проверяются.
Никогда не пытайтесь отправить непроверенный и неконвертированный пользовательский ввод в вашу БД, если только он не идет в текстовое поле. Как только "плохие данные" попадают в вашу БД, это гораздо, гораздо труднее исправить!

Novice12

- не могли бы вы привести мне какой-нибудь пример?

Тусклый текст в виде строки = ""
Dim stringToInteger As Integer = Convert.ToInt32(TMTextBox.Text)


TMTextBox.Текст = Преобразовать.ToInt32(KMTextBox.Text) + Конвертировать.ToInt32(G1MTextBox.Text) + Конвертировать.ToInt32(G2MTextBox.Text) + Конвертировать.ToInt32(G3MTextBox.Text) + Конвертировать.ToInt32(G4MTextBox.Text) + Конвертировать.ToInt32(G5MTextBox.Text) + Конвертировать.ToInt32(G6MTextBox.Text)
TFTextBox.Текст = Преобразовать.ToInt32(KFTextBox.Text) + Конвертировать.ToInt32(G1FTextBox.Text) + Конвертировать.ToInt32(G2FTextBox.Text) + Конвертировать.ToInt32(G3FTextBox.Text) + Конвертировать.ToInt32(G4FTextBox.Text) + Конвертировать.ToInt32(G5FTextBox.Text) + Конвертировать.ToInt32(G6FTextBox.Text)
GTTextBox.Текст = Преобразовать.ToInt32(KTTextBox.Text) + Конвертировать.ToInt32(G1TTextBox.Text) + Конвертировать.ToInt32(G2TTextBox.Text) + Конвертировать.ToInt32(G3TTextBox.Text) + Конвертировать.ToInt32(G4TTextBox.Text) + Конвертировать.ToInt32(G5TTextBox.Text) + Конвертировать.ToInt32(G6TTextBox.Text)
Ящик для сообщений.Показать("Сведения Вычисляется")

- я использовал этот код для вычисления итогов, но там есть ошибка, говорящая о преобразовании строки в целое число.

OriginalGriff

Какая часть "int.TryParse" выглядит как "преобразование.ToInt32"?

Novice12

я поменял преобразования.toint32 в int.метод tryparse
но там написано оверлоан

OriginalGriff

Может быть, вы забыли прочитать документацию о том, как использовать методы TryParse?

Novice12

использование системы;

пример публичного класса
{
публичный статический пустота главный()
{
String[] values = { null, "160519", "9432.0", "16,667",
"-322 ", "+4302", "(100);", "01FA" };
foreach (var value in values)
{
int число;

bool success = Int32.TryParse(значение, номер выхода);
если (успех)
{
Приставка.WriteLine("преобразовано '{0}' в {1}.", значение, число);
}
еще
{
Приставка.WriteLine("попытка преобразования '{0}' не удалась.",
ценность ?? "<null>");
}
}
}
}
// В Примере отображается следующий вывод:
// Попытка преобразования '<null>' не удалась.
// Преобразовать '160519 к 160519.
// Попытка преобразования '9432.0' не удалась.
// Попытка преобразования '16 667' не удалась.
// Преобразовать ' -322 до -322.
// Преобразовать '+4302 на 4302.
// Попытка преобразования '(100);' не удалась.
// Попытка преобразования '01FA' не удалась.


"Это пример кода, который я видел при попытке проанализировать документацию, предоставленную microsoft
но я не могу найти, как применить его к моему коду"

OriginalGriff

1) это код C#, а весь ваш другой код-VB. C# не будет компилироваться в проекте VB. Вернитесь к документации MS и выберите "VB", и образцы кода teh изменят язык.
2) если какой-либо из них терпит неудачу, вы не просто размещаете сообщение и продолжаете: вы даже не пытаетесь что-либо поместить в БД.

Рейтинг:
1

Patrice T

Цитата:
((((Несоответствие типов данных в выражении критериев.)))))

Понятия не имею, так как я не вижу никаких "критериев" в этом коде.
Но у меня есть сильное чувство, что когда некоторые параметры появляются в запросе,
Dim sql As String = "INSERT INTO Elementary VALUES(@SchoolName, @SchoodID, @KM, KF, @KT, @G1M, @G1F, @G1T, @G2M, @G2F, @G2T, @G3M, @G3F, @G3T, @G4M, @G4F, @G4T, @G5M, @G5F, @G5T, @G6M, @G6F, @G6T, @TM, @TF, @GT, @SY, @District, @Field2)"

определение параметров должно совпадать по именам и положению.
sqlCom.Parameters.Add("@name", OleDbType.VarWChar).Value = SchoolNameTextBox.Text
sqlCom.Parameters.Add("@pass", OleDbType.VarWChar).Value = SchoodIDTextBox.Text
sqlCom.Parameters.Add("@sec", OleDbType.VarWChar).Value = KMTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = KFTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = KTTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G1MTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G1FTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G1TTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G2MTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G2FTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G2TTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G3MTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G3FTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G3TTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G4MTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G4FTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G4TTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G5MTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G5FTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G5TTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G6MTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G6FTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = G6TTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = TMTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = TFTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = GTTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = SYTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = DistrictTextBox.Text
sqlCom.Parameters.Add("@sw", OleDbType.VarWChar).Value = Field2TextBox.Text

Определение параметров с одинаковым именем-это, конечно, не тот путь, по которому нужно идти.


Novice12

Я проверил и параметры положение и имена верны

Patrice T

Вы имеете в виду, что именование параметров "@sw" 26 раз кажется вам правильным ?

Novice12

sqlCom.Parameters.Add("@SchoolName", OleDbType.VarWChar).Значение = SchoolNameTextBox.Текст
sqlCom.Parameters.Add("@SchoodID", OleDbType.VarWChar).Значение = SchoodIDTextBox.Текст
sqlCom.Параметры.Добавить("@м", OleDbType.VarWChar).Значение = KMTextBox.Текст
sqlCom.Параметры.Добавить("@кф", OleDbType.VarWChar).Значение = KFTextBox.Text
sqlCom.Параметры.Добавить("@КТ", OleDbType.VarWChar).Значение = KTTextBox.Текст
sqlCom.Параметры.Добавить("@Г1М", OleDbType.VarWChar).Значение = G1MTextBox.Text
sqlCom.Parameters.Add("@G1F", OleDbType.VarWChar).Значение = G1FTextBox.Text
sqlCom.Parameters.Add("@G1T", OleDbType.VarWChar).Значение = G1TTextBox.Text
sqlCom.Parameters.Add("@G2M", OleDbType.VarWChar).Значение = G2MTextBox.Text
sqlCom.Параметры.Добавить("@Редми 2", OleDbType.VarWChar).Значение = G2FTextBox.Text
sqlCom.Параметры.Добавить("@g2t не", OleDbType.VarWChar).Значение = G2TTextBox.Текст
sqlCom.Parameters.Add("@G3M", OleDbType.VarWChar).Значение = G3MTextBox.Текст
sqlCom.Parameters.Add("@G3F", OleDbType.VarWChar).Значение = G3FTextBox.Text
sqlCom.Parameters.Add("@G3T", OleDbType.VarWChar).Значение = G3TTextBox.Текст
sqlCom.Parameters.Add("@G4M", OleDbType.VarWChar).Значение = G4MTextBox.Текст
sqlCom.Parameters.Add("@G4F", OleDbType.VarWChar).Значение = G4FTextBox.Текст
sqlCom.Параметры.Добавить("@g4t компания", OleDbType.VarWChar).Значение = G4TTextBox.Текст
sqlCom.Parameters.Add("@G5M", OleDbType.VarWChar).Значение = G5MTextBox.Текст
sqlCom.Parameters.Add("@G5F", OleDbType.VarWChar).Значение = G5FTextBox.Текст
sqlCom.Parameters.Add("@G5T", OleDbType.VarWChar).Значение = G5TTextBox.Текст
sqlCom.Parameters.Add("@G6M", OleDbType.VarWChar).Значение = G6MTextBox.Текст
sqlCom.Parameters.Add("@G6F", OleDbType.VarWChar).Значение = G6FTextBox.Текст
sqlCom.Параметры.Добавить("@Г6Т", OleDbType.VarWChar).Значение = G6TTextBox.Текст
sqlCom.Параметры.Добавить("@ТМ", OleDbType.VarWChar).Значение = TMTextBox.Текст
sqlCom.Параметры.Добавить("@ТФ", OleDbType.VarWChar).Значение = TFTextBox.Text
sqlCom.Параметры.Добавить("@ГТ", OleDbType.VarWChar).Значение = GTTextBox.Text
sqlCom.Параметры.Добавить("@сы", OleDbType.VarWChar).Значение = SYTextBox.Текст
sqlCom.Параметры.Добавить("@Район", OleDbType.VarWChar).Значение = DistrictTextBox.Текст
sqlCom.Параметры.Добавить("@Поле2", OleDbType.VarWChar).Значение = Field2TextBox.Текст


я изменил его на этот, но ошибка все та же

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Можете ли вы дать точное сообщение об ошибке ?
Проблема в том, что вставка не есть условие.

Novice12

- Несоответствие типов данных в выражении критериев.
- это сообщение об ошибке.
- я изменил свой код на


Dim sql As String = "INSERT INTO Elementary (SchoolName,SchoodID,KM,KF,KT,G1M,G1F,G1T,G2M,G2F,G2T,G3M,G3F,G3T,G4M,G4F,G4T,G5M,G5F,G5T,G6M,G6F,G6T,TM,TF,GT,SY,District,Field2) значения(@SchoolName, @SchoodID, @KM, @KF,@KT,@G1M,@G1F,@G1T,@G2M,@G2F,@G2T,@G3M,@G3F,@G3T,@G4M,@G4F,@G4T,@G5M,@G5F,@G5T,@G6M,@G6F,@G6T,@TM,@TF,@GT,@SY,@District,@Field2)"
Использование conn = New System.Data.Oledb для.Метод Oledbconnection("Поставщик=Майкрософт.Туз.Oledb для.12.0;Источник данных=|параметр datadirectory|\план.МБР")
Использование sqlCom = New System.Data.Oledb для.Объект oledbcommand(среда SQL, соед)
Коннектикут.Открыть()
sqlCom.Parameters.Add("@SchoolName", OleDbType.VarWChar).Значение = SchoolNameTextBox.Текст
sqlCom.Parameters.Add("@SchoodID", OleDbType.VarWChar).Значение = SchoodIDTextBox.Текст
sqlCom.Параметры.Добавить("@м", OleDbType.VarWChar).Значение = KMTextBox.Текст
sqlCom.Параметры.Добавить("@кф", OleDbType.VarWChar).Значение = KFTextBox.Text
sqlCom.Параметры.Добавить("@КТ", OleDbType.VarWChar).Значение = KTTextBox.Текст
sqlCom.Параметры.Добавить("@Г1М", OleDbType.VarWChar).Значение = G1MTextBox.Text
sqlCom.Parameters.Add("@G1F", OleDbType.VarWChar).Значение = G1FTextBox.Text
sqlCom.Parameters.Add("@G1T", OleDbType.VarWChar).Значение = G1TTextBox.Text
sqlCom.Parameters.Add("@G2M", OleDbType.VarWChar).Значение = G2MTextBox.Text
sqlCom.Параметры.Добавить("@Редми 2", OleDbType.VarWChar).Значение = G2FTextBox.Text
sqlCom.Параметры.Добавить("@g2t не", OleDbType.VarWChar).Значение = G2TTextBox.Текст
sqlCom.Parameters.Add("@G3M", OleDbType.VarWChar).Значение = G3MTextBox.Текст
sqlCom.Parameters.Add("@G3F", OleDbType.VarWChar).Значение = G3FTextBox.Text
sqlCom.Parameters.Add("@G3T", OleDbType.VarWChar).Значение = G3TTextBox.Текст
sqlCom.Parameters.Add("@G4M", OleDbType.VarWChar).Значение = G4MTextBox.Текст
sqlCom.Parameters.Add("@G4F", OleDbType.VarWChar).Значение = G4FTextBox.Текст
sqlCom.Параметры.Добавить("@g4t компания", OleDbType.VarWChar).Значение = G4TTextBox.Текст
sqlCom.Parameters.Add("@G5M", OleDbType.VarWChar).Значение = G5MTextBox.Текст
sqlCom.Parameters.Add("@G5F", OleDbType.VarWChar).Значение = G5FTextBox.Текст
sqlCom.Parameters.Add("@G5T", OleDbType.VarWChar).Значение = G5TTextBox.Текст
sqlCom.Parameters.Add("@G6M", OleDbType.VarWChar).Значение = G6MTextBox.Текст
sqlCom.Parameters.Add("@G6F", OleDbType.VarWChar).Значение = G6FTextBox.Текст
sqlCom.Параметры.Добавить("@Г6Т", OleDbType.VarWChar).Значение = G6TTextBox.Текст
sqlCom.Параметры.Добавить("@ТМ", OleDbType.VarWChar).Значение = TMTextBox.Текст
sqlCom.Параметры.Добавить("@ТФ", OleDbType.VarWChar).Значение = TFTextBox.Text
sqlCom.Параметры.Добавить("@ГТ", OleDbType.VarWChar).Значение = GTTextBox.Text
sqlCom.Параметры.Добавить("@сы", OleDbType.VarWChar).Значение = SYTextBox.Текст
sqlCom.Параметры.Добавить("@Район", OleDbType.VarWChar).Значение = DistrictTextBox.Текст
sqlCom.Параметры.Добавить("@Поле2", OleDbType.VarWChar).Значение = Field2TextBox.Текст


Dim icount As Integer = sqlCom.Метод executenonquery
Конец Использования
Конец Использования

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Кстати, принимая решение, вы говорите, что проблема решена.