C# 从日历中获取所选日期并将其保存到sql server
我想从C# 从日历中获取所选日期并将其保存到sql server,c#,sql-server,C#,Sql Server,我想从monthCalender1获取所选日期,并从SQL Server表中检索数据。但我收到异常消息 无法转换为日期时间格式 SQL Server表日期格式为“dd/mm/yyyy” 不要一直将日期转换为字符串(然后向下两行将其解析回DateTime…)-停止这样做!按原样使用日期时间。。。另外:DATETIME在SQL Server中没有格式-它是一个8字节的二进制值-只有当您需要将其输出为字符串(或从字符串解析它-但尽量避免!)时,它才会获取格式 将代码更改为以下内容: cmd = new
monthCalender1
获取所选日期,并从SQL Server表中检索数据。但我收到异常消息
无法转换为日期时间格式
SQL Server表日期格式为“dd/mm/yyyy”
不要一直将日期转换为字符串(然后向下两行将其解析回
DateTime
…)-停止这样做!按原样使用日期时间。。。另外:DATETIME
在SQL Server中没有格式-它是一个8字节的二进制值-只有当您需要将其输出为字符串(或从字符串解析它-但尽量避免!)时,它才会获取格式
将代码更改为以下内容:
cmd = new SqlCommand("SELECT rtf_file_content FROM rtf WHERE rtf_date=@dt AND user_rtf_id=1", cn);
cmd.Parameters.Add("@dt", SqlDbType.DateTime).Value = monthCalendar1.SelectionStart;
这就是你所需要做的——不要弄乱字符串格式的日期文字或诸如此类的东西——只需按原样使用日期
我还建议您使用(…{…}块将SqlConnection
、SqlCommand
和SqlDataReader
变量放入中,以确保使用后立即正确处理,而且读卡器的处理也有点不可靠
我会将此代码作为一个整体使用:
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
rtbDocument.Clear();
// set up your connection string (typically from a config) and query text
string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\User\Desktop\myproject_c#\diary\photogallery\RicherTextBox_src\RicherTextBox\diary.mdf;Integrated Security=True;User Instance=True;";
string query = "SELECT rtf_file_content FROM rtf WHERE rtf_date=@dt AND user_rtf_id=1";
// set up connection and command - both are disposable, put them in a "using" block
using (SqlConnection cn = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
// set up parameter for query
// define the parameter to be a "DateTime" parameter
// set value directly from a "DateTime" property of your "monthCalendar1"
cmd.Parameters.Add("@dt", SqlDbType.DateTime).Value = monthCalendar1.SelectionStart;
// open connection, execute reader...
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
// loop over reader - reading all rows being returned by query
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
Byte[] rtf = new Byte[Convert.ToInt32((reader.GetBytes(0, 0, null, 0, Int32.MaxValue)))];
long bytesReceived = reader.GetBytes(0, 0, rtf, 0, rtf.Length);
ASCIIEncoding encoding = new ASCIIEncoding();
rtbDocument.Rtf = encoding.GetString(rtf, 0, Convert.ToInt32(bytesReceived));
}
}
}
}
}
我是c#的新手。谢谢。这对我很有帮助。它工作正常
private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e)
{
rtbDocument.Clear();
// set up your connection string (typically from a config) and query text
string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\User\Desktop\myproject_c#\diary\photogallery\RicherTextBox_src\RicherTextBox\diary.mdf;Integrated Security=True;User Instance=True;";
string query = "SELECT rtf_file_content FROM rtf WHERE rtf_date=@dt AND user_rtf_id=1";
// set up connection and command - both are disposable, put them in a "using" block
using (SqlConnection cn = new SqlConnection(connString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
// set up parameter for query
// define the parameter to be a "DateTime" parameter
// set value directly from a "DateTime" property of your "monthCalendar1"
cmd.Parameters.Add("@dt", SqlDbType.DateTime).Value = monthCalendar1.SelectionStart;
// open connection, execute reader...
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
// loop over reader - reading all rows being returned by query
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
Byte[] rtf = new Byte[Convert.ToInt32((reader.GetBytes(0, 0, null, 0, Int32.MaxValue)))];
long bytesReceived = reader.GetBytes(0, 0, rtf, 0, rtf.Length);
ASCIIEncoding encoding = new ASCIIEncoding();
rtbDocument.Rtf = encoding.GetString(rtf, 0, Convert.ToInt32(bytesReceived));
}
}
}
}
}