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));
                }
            }
        }
    }
}