将nvarchar数据类型转换为日期时间数据类型会导致c#中的值超出范围

本文关键字:范围 类型转换 数据 nvarchar 日期 数据类型 时间 | 更新日期: 2023-09-27 17:50:11

我试图保存一个登录记录到SQL Server.

但是我得到一个错误:

将nvarchar数据类型转换为日期时间数据类型导致值超出范围。

Login.aspx运行时,cmd.ExecuteNonQuery();行代码中的

这些代码有什么问题?

My table Login:

[Id] [int] IDENTITY(1,1) NOT NULL,
[Url] [nvarchar](150) NOT NULL,
[Time] [datetime] NOT NULL,
[Count] [int] NOT NULL,
[PcName] [nvarchar](50) NOT NULL,
[Browser] [nvarchar](50) NOT NULL,
[IpAddress] [nvarchar](50) NOT NULL  
c#代码:

    SqlConnection conn= "...";
    protected void Page_Load(object sender, EventArgs e) 
    {
        Logins();
    }
    public void Logins()
    {
        if (!Page.IsPostBack)
        {
            Application["hit"] = Convert.ToInt32(Application["hit"].ToString());
        }
        string strHostName = Dns.GetHostName();
        IPHostEntry ipEntry = Dns.GetHostEntry(strHostName);
        string url = HttpContext.Current.Request.Url.AbsoluteUri;
        string page = System.IO.Path.GetFileName(url);
        string browser = Request.Browser.Browser;
        string pcname = Convert.ToString(ipEntry.HostName);
        String IP = "";
        WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
        using (WebResponse response = request.GetResponse())
        using (StreamReader stream = new StreamReader(response.GetResponseStream()))
        {
            IP = stream.ReadToEnd();
        }
        int first = IP.IndexOf("Address: ") + 9;
        int last = IP.LastIndexOf("</body>");
        IP = IP.Substring(first, last - first);
        string sql = "INSERT INTO Login(Url, Time, Count, Browser, PcName, IpAddress) values (@Url, @Time, @Count, @Browser, @PcName, @IpAddress)";
        conn.Open();
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.AddWithValue("Time", DateTime.Now.ToString());
        cmd.Parameters.AddWithValue("Url", page.Trim());
        cmd.Parameters.AddWithValue("Count", Convert.ToInt32(Application["hit"].ToString()));
        cmd.Parameters.AddWithValue("Browser", browser.Trim());
        cmd.Parameters.AddWithValue("PcName", pcname.Trim());
        cmd.Parameters.AddWithValue("IpAddress", IP.Trim());
        cmd.ExecuteNonQuery();
    } 

将nvarchar数据类型转换为日期时间数据类型会导致c#中的值超出范围

我认为你应该改变这一行:

cmd.Parameters.AddWithValue("Time", DateTime.Now.ToString());

:

cmd.Parameters.AddWithValue("@Time", DateTime.Now);

问题1:您正在发送字符串到DateTime参数Time

解决方案1:需要将DateTime.Now而不是DateTime.Now.ToString()传递给Time参数

问题2:AddWithValue()函数的参数前面缺少@符号

方案二:需要在AddWithValue()函数的参数前增加@符号

试试这个:

cmd.Parameters.AddWithValue("@Time", DateTime.Now);
cmd.Parameters.AddWithValue("@Url", page.Trim());
cmd.Parameters.AddWithValue("@Count",
      Convert.ToInt32(Application["hit"].ToString()));
cmd.Parameters.AddWithValue("@Browser", browser.Trim());
cmd.Parameters.AddWithValue("@PcName", pcname.Trim());
cmd.Parameters.AddWithValue("@IpAddress", IP.Trim());

相关文章: