我的字段日期为DataTable
jeudi 12 mars 2015
vendredi 13 mars 2015
samedi 14 mars 2015
我需要将它存储在sql server test
中的一个表中,该表具有datedes
列date
SqlCommand command = new SqlCommand("INSERT INTO [test] ([Datedes]) VALUES('" + dt.Rows[i][j] + "')", con);
command.ExecuteNonQuery();
上述代码始终在转换日期返回错误。
如何解决?
答案 0 :(得分:3)
你需要这样的东西:
rows[i][j]
转换为DateTime
代码如下:
// 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();
不要像你那样追加字符串,因为它不安全。