存储在表格中的转换日期

时间:2015-07-07 11:19:53

标签: c# sql

我的字段日期为DataTable

jeudi 12 mars 2015
vendredi 13 mars 2015
samedi 14 mars 2015

我需要将它存储在sql server test中的一个表中,该表具有datedesdate

SqlCommand command = new SqlCommand("INSERT INTO [test] ([Datedes]) VALUES('" + dt.Rows[i][j] + "')", con);
command.ExecuteNonQuery();
  

上述代码始终在转换日期返回错误。

如何解决?

3 个答案:

答案 0 :(得分:3)

你需要这样的东西:

  • 将您的rows[i][j]转换为DateTime
  • 在ADO.NET中正确使用参数化查询来插入日期

代码如下:

// this might not work right now - you need to adapt this to that
// you can convert your strings like 'vendredi 13 mars 2015' to a
// valid "DateTime" object
DateTime dateTimeFromRow = Convert.ToDateTime(dt.Rows[i][j]);

// set up your DB connection string    
string connectionString = "....";

// define your insert query with PARAMETERS
string insertQuery = "INSERT INTO [test]([Datedes]) VALUES(@DateDes);";

// use "using" blocks to properly dispose of connection and command    
using (SqlConnection conn = new SqlConnection(connectionString))
using (SqlCommand command = new SqlCommand(insertQuery, conn)
{
    //  define and set value for parameter
    command.Parameters.Add("@DateDes", SqlDbType.Date);
    command.Parameters["@DateDes"].Value = dateTimeFromRow;

    // open connection, execute INSERT, close connection        
    conn.Open();
    command.ExecuteNonQuery();
    conn.Close();
}

答案 1 :(得分:1)

在您的示例中,您尝试在string类型表格列中插入date,这显然是错误的。

取决于你在做什么;

  • 将您的date键入的列更改为nvarchar并插入该字符串
  • 将您的字符串解析为DateTime并使用parameterized query插入该值。

对于第一个选项,只需将列类型更改为nvarchar

对于第二个选项,您需要使用fr-FR文化解析您的字符串(如果它不是您的CurrentCulture)并直接传递此值。

var s = "samedi 14 mars 2015";
var dt = DateTime.Parse(s, CultureInfo.GetCultureInfo("fr-FR"));

using (var con = new SqlConnection(conString))
using (var cmd = con.CreateCommand())
{
    cmd.CommandText = "INSERT INTO [test] ([Datedes]) VALUES(@date)";
    cmd.Parameters.Add("@date", SqlDbType.Date).Value = dt;
    con.Open();
    cmd.ExecuteNonQuery();
}

答案 2 :(得分:1)

你做错了是你试图将数据类型字符串解析为datetime。根据您的信息,日期时间格式不合法解析。我建议你创建另一个字符串类型的字段来存储' jeudi' ' vendredi'或者' samedi'。

用于剪切字符串:

        var targetString = "jeudi 12 mars 2015";
        var resultString = "";
        int index;

        foreach (var item in targetString)
        {
            if (int.TryParse(item.ToString(), out index) && !string.IsNullOrWhiteSpace(item.ToString()))
            {
                resultString = targetString.Substring(index);
            }
        }
//resultString == "12 mars 2015"

使用后:

SqlCommand command = new SqlCommand("INSERT INTO [test] ([Datedes]) VALUES("@date")", con);
command.Parameters.AddWithValue(@date, resultString);
command.ExecuteNonQuery();

不要像你那样追加字符串,因为它不安全。