Pankaj Mahor Ответов: 2

Нет ошибок и данные не вставлены в таблицу sql server?


Я пытаюсь добавить данные в базу данных. Он работает без ошибок, и когда я проверяю, что в таблице нет никаких данных.
Мой код-
private void button1_Click(object sender, EventArgs e)
{
    try
    {

        SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ProTestDB.mdf;Integrated Security=True;User Instance=True");
        string name = textBox1.Text;
        string sqlstr = ("INSERT INTO Users VALUES('" + textBox1.Text + "')");
        SqlCommand cmd = new SqlCommand(sqlstr, conn);
        cmd.Parameters.AddWithValue("Name", name);

        conn.Open();
        cmd.ExecuteNonQuery();

        conn.Close();
    }
    catch
    {
        MessageBox.Show("error");
    }
}

Pankaj Mahor

После просмотра учебных пособий youtube я обнаружил, что они используют sql server management studio для создания базы данных, и я использую c#.net чтобы создать его. Разве это имеет какое-то значение? Я могу легко сделать это в vb.ne но не работает в c#.net-да. Должен ли я также использовать management studio? Пожалуйста, ответьте...

2 Ответов

Рейтинг:
2

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

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

string sqlstr = "INSERT INTO Users(Name) VALUES(@NameParameter)";
cmd.Parameters.AddWithValue("@NameParameter", name);

Здесь Имя присутствует ли эта колонка в Users стол.

[Обновление]
1. Хранимая процедура - запрос вставки не работает[^].
2. Как вставить запись в таблицу базы данных sql server express?[^].
3. вставьте проблему в C#, используя sqlcommand[^].

Итак, в основном проблема заключается в следующем ...
Цитата:
Весь пользовательский экземпляр и AttachDbFileName= подход ошибочны - в лучшем случае! Visual Studio будет копировать вокруг файла .mdf, и, скорее всего, ваша вставка работает просто отлично - но в конце концов вы просто смотрите не на тот файл .mdf!

Если вы хотите придерживаться этого подхода, то попробуйте поставить точку останова на myConnection.Вызов Close () - а затем проверьте файл .mdf с помощью SQL Server Mgmt Studio Express - я почти уверен, что ваши данные там есть.


Pankaj Mahor

Я тоже пробовал, но все та же проблема.

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Хорошо. Это связано с проблемой подключения.

Смотрите мой обновленный ответ в разделе "Обновление".

Pankaj Mahor

Я не создавал базу данных в среде sql management studio. Я создал его в c#.net - путем добавления нового элемента в проект и выбора файла базы данных на основе сервиса (.mdf).

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Как вы, возможно, знаете из этих ответов, что это ошибочный подход, поэтому попробуйте эти решения.
В противном случае, как было предложено в первой ссылке, поставьте точку останова на con.Close() и проверьте файл .mdf с помощью SQL Server Mgmt Studio Express.

Pankaj Mahor

ОК, после того как поставили точку останова, как проверить .файл MDF?

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Я думаю как и предлагалось там вам нужно установить Microsoft SQL Server Management Studio Express и используйте это для проверки.

Pankaj Mahor

Я уже установил management studio и могу легко подключиться.

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Итак, вы пытались проверить этот файл во время отладки ?

Pankaj Mahor

Я еще не трогал студию управления. Я делаю это только в c#.net например, создание БД, получение строки подключения all in c#.net-да.

Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)

Ну ладно...

Рейтинг:
0

Bikash Prakash Dash

Попробуй это мой друг

private void button1_Click(object sender, EventArgs e)
{
    try
    {
 
        SqlConnection conn = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\ProTestDB.mdf;Integrated Security=True;User Instance=True");
        string sqlstr = "INSERT INTO [Users] VALUES(@value)";
        conn.Open();
        SqlCommand cmd = new SqlCommand(sqlstr, conn);
        cmd.Parameters.Add("@value",SqlDbType.VarChar).Value=textBox1.Text.Trim();
       
        cmd.ExecuteNonQuery();
 
        conn.Close();
    }
    catch
    {
        MessageBox.Show("error");
    }
}


Pankaj Mahor

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

Bikash Prakash Dash

Может у пожалуйста, скажите мне, сколько полей есть в таблице?

Pankaj Mahor

Одна таблица с именем "пользователи" и два columms с именем 'Имя пользователя' и 'имя'.

Bikash Prakash Dash

если вы вставляете значения во все столбцы, вам не нужно указывать имена столбцов в запросе INSERT.
если вы вставляете значения в один столбец , вы должны указать.
например->вставить в [Users] (UserID) значения(@value)

Pankaj Mahor

Я пытаюсь вставить значение текстового поля только в один столбец "имя".

Bikash Prakash Dash

таким образом, запрос будет
Вставить в [Пользователи] (Имя) значения(@value)

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

Pankaj Mahor

Да, UserID-это первичный ключ, и я просто хочу добавить значение в столбец Name, а не UserID.

Bikash Prakash Dash

таким образом, невозможно, чтобы поле первичного ключа не могло быть нулевым.

Pankaj Mahor

Итак, как добавить данные во все столбцы.

Bikash Prakash Dash

Попробовать это
Объект sqlconnection соед = новый объект sqlconnection(@"источник данных=.\Именем sqlexpress;ключевое слово attachdbfilename=|параметр datadirectory|\ProTestDB.МДФ;Комплексная безопасность=true;в пользовательский экземпляр=true в");
строка sqlstr = "вставить в [Users] значения(@userid,@name)";
Коннектикут.Открыть();
SqlCommand cmd = новая команда sqlcommand(sqlstr, conn);
УМК.Параметры.Добавить("@имя пользователя",значения sqldbtype.Тип varchar).Value=textBox1.Text.Trim(); //для идентификатора пользователя он не может быть нулевым
cmd.Parameters.Add("@name",SqlDbType.VarChar).Value=textBox2.Text.Trim(); // для имени
УМК.Метод executenonquery();

Коннектикут.Закрывать();

Pankaj Mahor

Thanx, но когда я запускаю его, он выдает ошибку, которую я установил в try catch? Что же теперь делать?

Bikash Prakash Dash

используйте уловку вот так.
поймать(исключение бывший)
{
Ящик для сообщений.Шоу(напр.Метод toString());
}
вы можете видеть, какой тип ошибки вы получаете.Пожалуйста, укажите, какую ошибку вы получаете.

Pankaj Mahor

И когда я запускаю код без try catch, я получаю эту ошибку-
Явное значение столбца identity в таблице "пользователи" может быть задано только в том случае, если используется список столбцов и включен параметр IDENTITY_INSERT.

Bikash Prakash Dash

Вы должны ввести значение, которое уже было введено ранее в поле UserID. Поскольку это первичный ключ,его значение в разных строках должно быть уникальным.