PedroAzevedo1234 Ответов: 3

Как я могу вставить с помощью SQL в C#


I want to know how I can do an insert in an sql database with C #


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

string setting = ConfigurationManager.AppSettings["setting1"];
            string conn = ConfigurationManager.ConnectionStrings["test"].ConnectionString;
            using (SqlConnection sqlConn = new SqlConnection(conn))
            {
                //string sqlQuery2 = @"UPDATE testenumserie " + "SET Estado = " + comboBox1.Text + " WHERE NumSerie = '" + textBox2.Text + "'" ;
                string sqlQuery2 = @"INSERT into dbo.testenumserie(Estado) VALUES ('" + comboBox1.Text + "')" + " WHERE NumSerie = '" + textBox2.Text + "'";
                MessageBox.Show(sqlQuery2);
                SqlCommand cmd2 = new SqlCommand(sqlQuery2, sqlConn);
                SqlDataAdapter da2 = new SqlDataAdapter(cmd2);
                DataTable table2 = new DataTable();


Я попробовал этот код, но вставка не сработала.

Richard Deeming

И это всего лишь еще одна версия того же вопроса, который вы опубликовали на прошлой неделе, который помечен как " решенный":
https://www.codeproject.com/Questions/1201026/How-to-insert-data-into-a-SQL-table[^]

3 Ответов

Рейтинг:
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-выражение?? кажется, я тоже забыл букву " Е " в названии вашей таблицы, думал, вы поставите туда то, что назвали