【发布时间】:2014-04-19 17:11:46
【问题描述】:
我尝试将登录记录保存到 SQL Server。
但我得到一个错误:
将 nvarchar 数据类型转换为 datetime 数据类型导致值超出范围。
在Login.aspx 运行时的cmd.ExecuteNonQuery(); 代码行上。
这些代码有什么问题?
我的桌子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();
}
【问题讨论】:
-
先检查日期。如果日期不正确,例如 2 月 30 日,您将收到该错误。