Просто получите это значение из datatable:
int uniqueId= dtbl.Rows[0].Field<int>("UniqueId");
Но я вижу некоторые важные проблемы безопасности / проектирования в ваших двух методах:
Самое важное - всегда закрывать соединение с базой данных, потому что ваше соединение пул будет заполнен соединениями (по умолчанию у него 100 соединений).
Просто используйте ваше соединение в операторе Use:
using (var conn = new SQLConnection(connStr) {
conn.Open();
//open connection, get data
} //here it will be disposed, and close for connection will be executed
Не используйте инъекцию параметров, как вы:
Select * from Signup where Username = '" + textBox1.Text.Trim() + "' and ...
Пользователь может вставить 'в userane, и вы получите класс c пример SQL инъекции (код пользователя может быть выполнен из ваших логинов / паролей, если он введет что-то вроде' update Registration set Password = «тебя взломали»;). Вместо этого просто используйте SQL параметры.
Другая проблема: вам не нужны таблицы данных, чтобы проверить, существует ли пользователь: Просто используйте код:
select count(*) from [dbo].[Signup] where Username = @UserName and Password = @Password
Добавьте 2 параметра в SqlCommand и ваш запрос будет в безопасности. После вы можете выполнить ExecuteScalar и получить количество вхождений пароля.
string sql =
"select count(*) from [dbo].[Signup] where Username = @UserName and Password = @Password";
using (SqlConnection conn = new SqlConnection(connString))
{
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
cmd.Parameters.Add("@UserName", SqlDbType.VarChar);
cmd.Parameters["@UserName"].Value = username;
cmd.Parameters.Add("@Password", SqlDbType.VarChar);
cmd.Parameters["@Password"].Value = password;
try
{
conn.Open();
object userCount = cmd.ExecuteScalar();
if (!userCount .Equals(DBNull.Value))
{
//user exist
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}