Рейтинг:
28
Sheila Pontes
Привет,
Ниже приведен код для решения этой проблемы.
string connectionstring = ConfigurationManager.ConnectionStrings["test"].ConnectionString;
SqlConnection sqlConn = new SqlConnection(connectionstring);
sqlConn.Open();
string sqlQuery2 = @"UPDATE dbo.testenumserie SET ESTADO = @estado WHERE NumSerie = @numSeries";
SqlCommand SQLcm = new SqlCommand();
SQLcm.Connection = sqlConn;
SQLcm.CommandText = sqlQuery2;
SQLcm.CommandType = CommandType.Text;
SQLcm.Parameters.AddWithValue("@estado", comboBox1.Text);
SQLcm.Parameters.AddWithValue("@numSeries", textBox2.Text);
SQLcm.ExecuteNonQuery();
sqlConn.Close();
PedroAzevedo1234
Дать эта системная ошибка".Данных.Sqlclient как.Неправильный синтаксис ситуацию sqlexception: 'около ключевого слова 'где'.'"
PedroAzevedo1234
эта ошибка возникла "
Произошло исключение System.Data.SqlClient.SqlException
HResult = 0x80131904
Message = не удается вставить значение NULL в столбец 'NumSeries', таблица 'testedopedro.dbo.testenumserie'; столбец не допускает значений null. Вставить не удается."
PedroAzevedo1234
Но моя таблица допускает нули, как вы можете видеть на этом принте http://prntscr.com/g9lzib
Sheila Pontes
Привет,
Использовать "где" оговорка в вставить необходимо использовать инструкцию Insert с Select команду. Я меняю код выше, исправляя вставку.
Эта статья может помочь вам лучше разобраться.
https://technet.microsoft.com/pt-br/library/ms188263(v=sql. 105). aspx
Sheila Pontes
Привет,
вставьте это значение также в столбец numseries.
string sqlQuery2 = @"INSERT into dbo.testenumserie(Estado, NumSerie) SELECT '" + comboBox1.Text + "', '" + textBox2.Text + '" from dbo.testenumserie WHERE NumSerie = '" + textBox2.Text + "'";
PedroAzevedo1234
Да ЕС Керо inserir не Эстадо , не Керо inserir не numserie.
Sheila Pontes
Да. Я из Бразилии
PedroAzevedo1234
ЕС Соу русский язык.
Sheila Pontes
O número de série é chave primaria? Не ЮВ.
Verifique se o campo numserie não tem alguma constraint como not null. Используйте o ДБО команды процедуры sp_help.testenumserie нет анализатора запросов.
Столбец NumSerie-это первичный ключ? если нет. Проверьте, не имеет ли ваш столбец numserie ограничения null. Используйте команду sp_help.
PedroAzevedo1234
Эра мас ЭУ Тирей
Это было но я удалил
PedroAzevedo1234
Apareceu исто http://prntscr.com/g9mdlw
Sheila Pontes
Verifica se não ficou nenhuma constraint no caminho proibindo você de colocar null no campo.
Технология UMA outra opção сериа excluir о'Кампо е recriar эле де ново бирж на. ГП falhar, exclui на бирж е ОВПД-де-ново.
Um outro opção seria usar o identity do sql server neste campo ou colocar um valor default para o campo não ficar vazio.
Акви ЕС Усо оракул адрес электронной физ ГМ тест не вставить в COM выберите. Не houve проблема.
Проверьте, нет ли ограничения на пути, запрещающего вам помещать null в поле.
Другой вариант-удалить поле и воссоздать его снова в таблице. Если это не удается, удалите таблицу и создайте ее снова.
Другой вариант - использовать идентификатор sql server в этом поле или поставить значение по умолчанию, чтобы поле не было пустым.
Здесь я использую oracle и сделал тест на insert с select. Никаких проблем.
Sheila Pontes
Педро о Кампо аинда э Шаве примария. Ele nunca vai deixar você colocar null neste campo.
Rode este comando para remover a constraint da chave, verifique se a chave primaria deixou de existir e veja se funciona o seu insert.
ALTER TABLE dbo.testenumserie Drop CONSTRAINT pk_testenumserie.
Педро поле по-прежнему является первичным ключом. Он никогда не позволит вам поместить null в это поле.
Поверните эту команду, чтобы удалить ограничение из ключа, убедитесь, что первичный ключ больше не существует, и посмотрите, работает ли он с вашей вставкой.
ALTER TABLE dbo.testenumserie Drop CONSTRAINT pk_testenumserie.
PedroAzevedo1234
Сплошных сред в дар о Эрро месмо
Sheila Pontes
Coloca o обновление у Томаса нет cуdigo acima ке эле развитие будет funcionar.
Ассим.
string sqlQuery2 = @"UPDATE dbo.testenumserie SET ESTADO = '" + comboBox1.Text + "' WHERE NumSerie = '" + textBox2.Text + "'";
PedroAzevedo1234
Obrigado
Sheila Pontes
Que bom que funcionou. Eu vou atualizar a solução acima para reflectir a solução exata do seu problema.
Рад, что это сработало. Я обновлю решение выше, чтобы отразить точное решение вашей проблемы.
Richard Deeming
Вы скопировали SQL-инъекция[^] уязвимость от вопроса.
Sheila Pontes
- Спасибо, Ричард.
Рейтинг:
2
ZurdoDev
Чтобы выполнить ваш sql, вы должны сделать cmd2. ExecuteNonQuery ();. Вам не нужен ни DataAdapter, ни DataTable.
Вы также захотите перейти на использование параметров. Ваш код сейчас очень небезопасен. Ваша база данных может быть легко взломана. Вместо этого сделайте что-нибудь вроде:
string sqlQuery2 = @"INSERT into dbo.testenumserie(Estado) VALUES (@estado) WHERE NumSerie = @numSeries";
...
cmd2.Parameters.AddWithValue("@estado", comboBox1.Text);
cmd2.Parameters.AddWithValue("@numSeries", textBox2.Text);
cmd2.ExecuteNonQuery();
Кроме того, вы должны назвать свои элементы управления, используя лучшие имена. Например, ваш textBox2 должен быть назван txtNumSeries. Это сэкономит вам много времени позже, чтобы правильно назвать ваши элементы управления.
PedroAzevedo1234
Это дает ошибку " система.Исключение InvalidOperationException:метод executenonquery требуется открытое и доступное подключение."
ZurdoDev
Вам нужно открыть соединение.
PedroAzevedo1234
И теперь он говорит об этой ошибке " System.Data.SqlClient. SqlException: 'неправильный синтаксис рядом с ключевым словом 'WHERE'.'"
ZurdoDev
Затем исправьте синтаксис. Просто делайте то, что подсказывает вам ошибка.
PedroAzevedo1234
Как я могу это исправить ?
ZurdoDev
Откуда нам знать? Я не вижу оператора sql. У вас есть синтаксическая ошибка. Посмотрите, что есть в sqlQuery2, и исправьте синтаксическую ошибку.
PedroAzevedo1234
эта ошибка возникла "
Произошло исключение System.Data.SqlClient.SqlException
HResult = 0x80131904
Message = не удается вставить значение NULL в столбец 'NumSeries', таблица 'testedopedro.dbo.testenumserie'; столбец не допускает значений null. Вставить не удается."
PedroAzevedo1234
Но моя таблица допускает нули, как вы можете видеть на этом принте http://prntscr.com/g9lzib
ZurdoDev
Это не одна и та же таблица. Ошибка относится к NumSeries, и ваш скриншот показывает NumSerie без s.
PedroAzevedo1234
Но я не пытаюсь вставить в NumSeries
ZurdoDev
Вот что говорит Ошибка. Ошибка не во лжи. Внимательно посмотрите на свой код.
PedroAzevedo1234
Ошибка заключается в следующем: "невозможно вставить значение NULL в столбец 'NumSerie', таблица 'testedopedro.dbo.testenumserie'; столбец не допускает значений null. Вставить не удается." есть отпечаток, если хотите http://prntscr.com/g9m4mq
ZurdoDev
Затем убедитесь, что ваша строка подключения указывает на базу данных testedopedro, потому что ошибка не ошибочна. И убедитесь, что таблица, на которую вы смотрите, соответствует тому, к чему подключается код.
PedroAzevedo1234
все в порядке с этим 2 очка
ZurdoDev
Все, что я могу вам сказать, это то, что у вас что-то не так. Эта ошибка происходит только так, как она читается. В этом нет ничего плохого.
Как выглядит ваша строка подключения?
PedroAzevedo1234
такой &ЛТ;добавить имя="тест" свойства connectionString= "источник данных = test123; базы данных=testedopedro ; идентификатор пользователя=а ; пароль=12345 "/&ГТ;
ZurdoDev
Это не то, что вы используете. Вы используете ConfigurationManager.AppSettings ["настройка 1"];
поэтому посмотрите на свои настройки приложений в Web.Config для setting1.
PedroAzevedo1234
Я думаю, что мне нужно изменить, а не вставить
ZurdoDev
- Нет!!!!!!!!!!! Посмотрите, что находится в настройках AppSettings setting1.
PedroAzevedo1234
< add key=" setting1 "value= "key"/>
ZurdoDev
Этого не может быть. Вы получите ошибку, пытаясь открыть его. Похоже, вы сильно изменили свой код с тех пор, как опубликовали его. Не знаю, как тебе теперь помочь.
PedroAzevedo1234
В любом случае спасибо
ZurdoDev
На скриншоте ниже вы показываете, что это поле не может быть обнулено. Вы не даете прямых ответов и очень затрудняете себе помощь.
Рейтинг:
1
Thomas Nielsen - getCore
Прежде всего, подумайте о чтении SQL-инъекции, потому что вы действительно не хотите использовать переменные непосредственно из пользовательского интерфейса в запросе.
Обновление Estado в определенном numseries
string estado = CheckMyUiValues(comoBox1.Text); //Must make that method ;)
string nums = CheckMyUiValues(comoBox1.Text);
var sql = "UPDATE dbo.testenumserie SET ESTADO = '{0}' WHERE NUMSERIE = '{1}'";
using(var cn = new GetOpenConnection()){ //Could have a method to make here too
using(var cmd = new SqlCommand(cn, string.format(sql, estado, nums)){
cmd.ExecuteNonQuery();
}
}
или несколько более грубым способом
string estado = comoBox1.Text;
string nums = comoBox1.Text;
//TODO: Implement ui variable checking
var sql = "UPDATE dbo.testenumserie SET ESTADO = '{0}' WHERE NUMSERIE = '{1}'";
string conn = "put your connection string details in here";
using(var cn = new SqlConnection(conn)){
using(var cmd = new SqlCommand(cn, string.Format(sql, estado, nums)){
cmd.ExecuteNonQuery();
}
}
PedroAzevedo1234
Мне нужно изменить значение "Estado" конкретного " NumSerie"
Thomas Nielsen - getCore
хорошо, пожалуйста, смотрите обновленное предложение
PedroAzevedo1234
Это дает мне ошибку с этим "CheckMyUiValues" и этим" GetOpenConnection "и этим" format"
Thomas Nielsen - getCore
:) это не просто копипаст друга. Я подразумеваю, что вы сделаете метод CheckMyUiValues, чтобы предотвратить SQL-инъекцию, и GetOpenConnection, чтобы создать экземпляр соединения и открыть его ... если вы не хотите удалять метод CheckMyUiValues и назначать непосредственно и просто создавать SqlConnection с соответствующей строкой sql-соединения... просто это не то, что я бы написал сам или кого-то сопровождал. Ах да, еще струна.Формат должен иметь заглавную букву F.
PedroAzevedo1234
string. format дает мне ошибку, которую невозможно преобразовать в system.data.SqlClient.SqlConnection
PedroAzevedo1234
Я не понимаю, как я могу это сделать :C
PedroAzevedo1234
Но где же вина Чекмюйвалов?
Thomas Nielsen - getCore
хорошо я сделаю пересмотренную версию
PedroAzevedo1234
продолжайте давать мне ошибку на строке
Thomas Nielsen - getCore
О какой ошибке вы сожалеете? На SQL connectionstring? или sql-выражение?? кажется, я тоже забыл букву " Е " в названии вашей таблицы, думал, вы поставите туда то, что назвали