Рейтинг:
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
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.
Кстати, принимая решение, вы говорите, что проблема решена.