Запрос не работает в Visual Studio 2017, но работает непосредственно в SQL Server

#c# #sql-server

#c# #sql-сервер

Вопрос:

Я хочу получить последний вставленный идентификатор в user_table, но когда я пытаюсь это сделать в коде в Visual Studio, он говорит, что он ничего не получает от запроса.

Я попробовал этот код в своей веб-форме в Visual Studio 2017. но он не может получить нужные мне данные. Когда я попробовал этот код в SQL Server 2014, он показывает нужные мне данные.

 //This is the code in visual studio
string tklastid = "SELECT TOP 1 id_user FROM user_table ORDER BY id_user DESC".ToString();
    SqlCommand lastid = new SqlCommand(tklastid, con);
    SqlDataReader dr2;
    dr2 = lastid.ExecuteReader();
    try
    {
        while (dr2.Read())
        {
            Label1.Text = dr2.ToString();
            userlast = dr2.ToString();
        }
    }
    catch (Exception exe)
    {
        Label1.Text = exe.Message;
    }
    dr2.Close();
    con.Close();

//this is the code when I make the table
create table user_table
(
    int identity(1,1) primary key,
    user_email varchar(50) not null,
    user_name varchar(50)
)
  

Комментарии:

1. Вы имеете в виду, что он не работает в окне проводника сервера в Visual Studio?

2. Должно быть, отображается какое-то сообщение об ошибке в exception, пожалуйста, укажите это тоже.

3. Ваш первый ToString() заставил меня плакать

Ответ №1:

В вашем SQL для создания таблицы отсутствует имя первичного ключа «id-user», которое должно выглядеть следующим образом:

    create table user_table
   (
       id_user int identity(1,1) primary key,
       user_email varchar(50) not null,
       user_name varchar(50)
   )
  

Кроме того, как указал @hassan.ef, dr2 требуется индекс, даже если вы выбираете только один столбец, поэтому вы можете использовать либо dr2[0].ToString() , либо dr2["id_user"].ToString() .

Ответ №2:

используйте этот:

   Label1.Text = dr2["id_user"].ToString();
  userlast = dr2["id_user"].ToString();
  

вместо:

     Label1.Text= dr2.ToString();
    userlast = dr2.ToString();