-4

我正在使用 C# 和 SQL Server 2005。我想在我的表中存储日期和时间。在 SQL Server 中,我使用smalldatetime数据类型。我正在使用此代码。

TimeZoneInfo ob1 = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
DateTime dt = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, ob1);

并通过此查询插入数据

insert into tablename (name,sub_date) values (@name,'{0}')",dt.ToShortTimeString()

但是,问题是在我的表中日期和时间是这样存储的1/1/1900 5:15:00 PM。不存储实际日期。如何在数据库中存储实际日期和时间。

注意:我想根据日期和时间显示表格的所有记录。所以,日期和时间对我来说都很重要。

4

2 回答 2

1

使用参数化查询并将 DateTime 作为参数传递。使用字符串总是一个坏主意(尤其是不是文化不变的字符串)。

于 2012-08-18T12:03:03.540 回答
1

尝试这样的事情:

// Define insert statement with parameters
string insertStmt = "INSERT INTO dbo.tablename (name, sub_date) VALUES (@name, @mydate)";

// setup connection and command objects
using(SqlConnection conn = new SqlConnection("your-connection-string-here"))
using(SqlCommand cmd = new SqlCommand(insertStmt, conn))
{
    // add parameters to command
    cmd.Parameters.Add("@name", SqlDbType.VarChar, 50).Value = ".....";
    cmd.Parameters.Add("@mydate", SqlDbType.DateTime).Value = dt;

    // open connection, execute query, close connection
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
}

这应该够了吧!没有从字符串到字符串的混乱转换DateTime- 该DateTime值“按原样”保留,并以相同的格式存储在 SQL Server 中。通过使用参数,您既消除了 SQL 注入攻击的可能性,而且,如果您需要使用不同的值多次调用此查询,则可以重复使用此查询,从而提高性能!

于 2012-08-18T12:13:34.547 回答