Member 13356973 Ответов: 3

Как вставить данные в таблицу SQL


Мне нужно сохранить данные внутри sqlserver

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

using (SqlConnection conn = new SqlConnection(@"Data source = ******* ; Database=********* ; User Id=sa ; Password=********"))
                    {

                        SqlCommand command = new SqlCommand("IF OBJECT_ID('UXFaturas', 'U') IS NULL CREATE TABLE UXFaturas(NumFaturas char(250) NOT NULL, Cont1 char(250) NOT NULL, Cont2 char(250) NOT NULL)" +
                            "INSERT INTO UXFaturas (NumFaturas, Cont, Cont2)", conn);
                        
                        
                        command.Parameters.AddWithValue("@NumFaturas", numfatura);
                        command.Parameters.AddWithValue("@Cont1", cont);
                        command.Parameters.AddWithValue("@Cont2", cont2);
                    conn.Open();
                    command.CommandType = CommandType.Text;
                        command.ExecuteNonQuery();
                    conn.Close();
                }


Я пробовал это, но не вставляю. Ошибок нет, но таблица остается пустой.

3 Ответов

Рейтинг:
28

ZurdoDev

Внимательно изучите свой код. Вы вызываете ExecuteNonQuery еще до того, как добавляете свои параметры. Вам также необходимо изменить свой SQL-оператор, чтобы использовать параметры.

SqlCommand insertCommand = new SqlCommand("INSERT INTO UXFaturas(NumFaturas, Cont1, Cont2) VALUES (@numfatura, @cont, @cont2)", conn);
Добавьте символ @ в предложение VALUES.


Member 13356973

Я вызываю ExecuteNonQuery раньше, потому что если я это сделаю, то после получу ошибку

ZurdoDev

Затем исправьте ошибку. Когда вы вызываете ExecuteNonQuery, это когда он вызывает sql, поэтому, если вы не добавили свои параметры, это не принесет никакой пользы.

Member 13356973

Это де ошибка, которую я получаю:

Системы.Данных.Sqlclient как.Ситуацию sqlexception: не удалось найти хранимую процедуру 'если аргумент object_id('UXFaturas', 'У') имеет значение null создать таблицу UXFaturas(NumFaturas тип char(250), Cont1 тип char(250), Cont2 тип char(250))''.

ZurdoDev

Подумайте о том, что говорит вам ошибка, а затем посмотрите на свой код. Он думает, что вы пытаетесь вызвать хранимую процедуру, потому что вы сказали ему, что собираетесь сделать это с помощью этой строки:
команда.Свойство Commandtype = Система.Данных.Командный тип.Хранимая процедура;

Измените тип команды на текст.

Member 13356973

Теперь у меня нет ошибки, теперь она должна работать, верно?

ZurdoDev

Я не вижу вашего кода, поэтому понятия не имею, все ли у вас в порядке. Но попробуйте и посмотрите, сработает ли это.

Member 13356973

Я могу предоставить вам больше кода, если вам нужно

ZurdoDev

Для вас было бы быстрее просто попробовать.

Member 13356973

Я создал select, чтобы убедиться, что он работает, и он возвращает мне эту "System.Data.SqlClient.SqlCommand".

ZurdoDev

Да, похоже, ты звонил .ToString () в команде SqlCommand.

Я предлагаю вам поискать в google несколько примеров использования c# и sqlcommands, потому что это довольно простой материал, и я думаю, что вам нужно несколько хороших учебников, чтобы начать работу.

Member 13356973

Я поискал в google и получил пример, который использовал

ZurdoDev

Пример не вызывал ExecuteNonQuery перед добавлением параметров.

Member 13356973

Я сделал это:

Команда sqlcommand команды = новый sqlcommand, который();
строки myConnectionString = @"источник данных=ХХХ ; базы данных=ХХХ; идентификатор пользователя=ХХХ ; пароль=ХХХ";
SqlConnection conn = new SqlConnection(myConnectionString);
Sqlcommand command = new SqlCommand ("SELECT * FROM UXFaturas", conn);
Коннектикут.Открыть();
textBox1. Text = команда.Метод toString();
Коннектикут.Закрывать();

ZurdoDev

Что вы хотите узнать из инструкции SELECT? Потому что все, что делает этот код, - это печатает слова "команда" в текстовом поле.

Member 13356973

Я хочу проверить, правильно ли он сохранен внутри таблицы

ZurdoDev

Затем откройте SQL management studio и посмотрите.

Member 13356973

Там ничего не было написано

ZurdoDev

После всего функции.

Member 13356973

Я добавлю это в вопрос

Member 13356973

Сделано

ZurdoDev

У вас есть 2 разные команды. Один для создания таблицы, и это тот, который вы выполняете и добавляете свои параметры.

Member 13356973

но это не добавление параметров

ZurdoDev

Потому что вы ставите их не на ту команду. У вас есть команда и insertCommand.

Вы должны сделать их все одной командой.

Member 13356973

Я должен добавить insertCommand в команду?

ZurdoDev

Нет. Я настоятельно рекомендую вам пройти через некоторые учебные пособия. Это очень простой материал.

Используйте одну команду.

Текст команды будет "
ЕСЛИ OBJECT_ID ..... IS NOT NULL CREATE TABLE...
Вставить в таблицу (field1, field2)
Значения (@field1, @field2)
...


УМК.Параметры.AddWithValue ("@field1", значение)
...


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

Member 13356973

Сделал это, и это все еще не работает

ZurdoDev

Что это значит?

Member 13356973

По-прежнему нет ошибок, но не сохраняет в sql

ZurdoDev

Помните, что мы не можем видеть ваш код, поэтому обновите свой вопрос полным sql-кодом, а не всем остальным, только sql-кодом.

Member 13356973

Сделано

ZurdoDev

Хорошо, теперь посмотрите на свой sql-оператор и скажите мне, почему он не вставляет никаких данных.

Member 13356973

Если бы я знал, то сказал бы тебе

ZurdoDev

Просто притормози и прочитай свой sql-оператор. У вас нет оператора insert, так как же он будет вставлять данные?

Member 13356973

Так как же мне это сделать?

ZurdoDev

Я уже ответил выше, когда сказал вам использовать одну команду. Поместите оба оператора в одну команду. Посмотрите на мой вышеприведенный комментарий.

Member 13356973

У вас нет никакой вставки в вашем комментарии

ZurdoDev

- Да, знаю. Это точный комментарий сверху:
-----------------------------------------------

Нет, я настоятельно рекомендую вам пройти несколько уроков. Это очень простой материал.

Используйте одну команду.

Текст команды будет "
ЕСЛИ OBJECT_ID ..... IS NOT NULL CREATE TABLE...
Вставить в таблицу (field1, field2)
Значения (@field1, @field2)
...


УМК.Параметры.AddWithValue ("@field1", значение)
...


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

Member 13356973

получил эту ошибку, делая так, как ты сказал

Системы.Данных.Sqlclient как.Неправильный синтаксис ситуацию sqlexception: 'около ')'.'

Я обновил код вопроса для того, что у меня есть сейчас

ZurdoDev

Затем исправьте синтаксис. Я не знаю, чего ты от меня хочешь.

Member 13356973

Какой синтаксис? Ошибка останавливает программу и появляется здесь:

команда.Метод executenonquery();

ZurdoDev

Это ошибка sql. Обратите внимание, что это SqlException. Это означает, что ваш SQL-оператор неверен.

Member 13356973

какое заявление?

ZurdoDev

Свойство commandtext на sqlcommand, который хранит инструкции SQL, которые будут выполняться. В вашем случае он имеет оба SQL-оператора. Но CommandText - это то, что будет отправлено на sql-сервер. Посмотрите на него, найдите синтаксическую ошибку и исправьте ее.

Member 13356973

А что, если я попробую {} поймать{}?

ZurdoDev

У вас должен быть один, но это не решит проблему. Опять же, вам нужно понять, что вы делаете. Перестаньте пытаться копировать чужой код и заставьте его работать в вашей среде. Потратьте время, чтобы научиться.

Рейтинг:
2

Richard Deeming

Я бы предложил разделить часть создания таблицы на отдельную команду. Если таблица не существует, SQL может с трудом подготовить запрос для вставки в нее данных.

Ваш INSERT команда в настоящее время отсутствует VALUES предложение, так что вы должны получить исключение, сообщающее вам, что синтаксис неверен.

using (SqlConnection conn = new SqlConnection(@"Data source = 2c4138928627\Sage ; Database=ARMINDOData ; User Id=sa ; Password=sage2008+"))
{
    conn.Open();
    
    using (SqlCommand command = new SqlCommand("IF OBJECT_ID('UXFaturas', 'U') IS NULL CREATE TABLE UXFaturas(NumFaturas char(250) NOT NULL, Cont1 char(250) NOT NULL, Cont2 char(250) NOT NULL)", conn))
    {
        command.CommandType = CommandType.Text;
        command.ExecuteNonQuery();
    }
    
    using (SqlCommand command = new SqlCommand("INSERT INTO UXFaturas (NumFaturas, Cont, Cont2) VALUES (@NumFaturas, @Cont, @Cont2)", conn))
    {
        command.CommandType = CommandType.Text;
        command.Parameters.AddWithValue("@NumFaturas", numfatura);
        command.Parameters.AddWithValue("@Cont1", cont);
        command.Parameters.AddWithValue("@Cont2", cont2);
        command.ExecuteNonQuery();
    }
}

INSERT (Transact-SQL) | Microsoft Docs[^]

NB: В идеале вы должны избегать подключения как sa Этот пользователь имеет неограниченный доступ ко всему серверу, который не нужен вашему приложению. Вместо этого вы должны использовать учетную запись, которая имеет только те разрешения, которые требуются вашему приложению.


Рейтинг:
1

Richard MacCutchan

Вы звоните command.ExecuteNonQuery(); прежде чем вы зададите какой-либо из параметров в своем командном объекте. Вы также указываете использовать хранимую процедуру, когда она вам не нужна.


Member 13356973

Я вызываю ExecuteNonQuery раньше, потому что если я это сделаю, то после получу ошибку

Richard MacCutchan

Что касается нелепых идей, то они должны быть почти в верхней части списка. Я предлагаю вам использовать Google, чтобы найти некоторые учебники по SQL (и, возможно, даже программированию в целом), прежде чем пытаться сделать это снова.