У меня есть хранимые процедуры для входа пользователя, которые я вызываю в своем коде хранилища данных. И теперь я хочу, чтобы при входе в систему IP-адрес и время системы пользователя сохранялись в таблице с помощью идентификатора, который является ссылкой из другой таблицы (внешний ключ). Мне нужно сохранить IP-адрес в формате 192.167.1.78.
Это моя хранимая процедура сохранения IP-адреса и даты и времени с помощью идентификатора пользователя:
ALTER procedure [dbo].[Sp_LoginIpAddress]
(
@LoginDate datetime,
@IpAddress varchar(50)
)
as
begin
DECLARE @EmpId INT
select EmpId from EmpRegister
if not exists(select * from LoginDetails where EmpId=@EmpId)
begin
insert into LoginDetails( LoginDate , IpAddress)
values ( @LoginDate , @IpAddress)
set @EmpId = SCOPE_IDENTITY()
select cast(@EmpId as int)
end
else
begin
select cast(0 as int)
end
end
У меня есть4 столбца в моей таблице [LoginDetails]. Это LoginId, EmpId, LoginDate, IpAddress.
Здесь EmpId - это ограничение внешнего ключа.
Вот мой код контроллера:
public ActionResult GetIP()
{
GetIPAddress();
return View();
}
[HttpPost]
public ActionResult SaveIpAddress(LoginDetail log)
{
ActionResult response = null;
try
{
int intResult = 0;
log.LoginDate = DateTime.Now;
string IP = GetIPAddress().ToString();
log.IpAddress = IP;
intResult = _registrationrepository.SaveIpAddress(log);
if (intResult >= 1) //inserted successfully
{
response = Json(new { result = "Success" });
}
else if (intResult == -1)
{
response = Json(new { result = "Exists", url = Url.Action("Emp", "VerifyOTP") });
}
else if (intResult == 0) //Duplicate record rule violation
{
response = Json(new { result = "InsertFail" }, JsonRequestBehavior.AllowGet);
}
else //On Error
{
response = Json(new { result = "Error" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
throw ex;
}
return response;
}
private string GetIPAddress()
{
string strHostName = "";
strHostName = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
string ipaddress = Convert.ToString(ipEntry.AddressList[2]);
ViewBag.IPAddress = ipaddress;
return ipaddress.ToString();
}
Вот мой DataRepository и IDataRepository:
DataRepository:
public int SaveIpAddress(LoginDetail log)
{
int finalResult = 0;
try
{
ObjectResult<int?> CRId = objEntities.Sp_LoginIPAddress(
log.LoginId,
log.LoginDate,
log.IpAddress
);
var result = CRId.FirstOrDefault<int?>();
if (result.HasValue)
{
if (result > 0)
{
//on Success
finalResult = result.Value;
}
}
else
{
// on failure
finalResult = 0;
}
}
catch (Exception ex)
{
throw ex;
}
return finalResult;
}
IDataRepository:
public interface IRegistrationRepository
{
int SaveIpAddress(LoginDetail log);
}
Итак, я ожидаю, что выходные данные будут такими, как когда пользователь вошел в IpAddress и DateTime должны быть сохранены втаблицы LoginDetail непосредственно через бэкэнд-функциональность.