将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();
}
我认为你应该改变这一行:
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());