我想写两天的代码,该代码将从MS excel(Office 365)导入数据到datagridview,然后再导入mysql数据库。在这种情况下,我在ms excel表中有工作表:
我做了什么?
我已经编写了将ms excel表格中的数据下载到datagridview并显示它们的代码。
现在我正在尝试将所有数据插入mysql数据库。我将重点放在下面的代码中:
for (int i = 0; i < datagrdStatus_order.Rows.Count; i++)
{
MySqlCommand cmd = new MySqlCommand("INSERT IGNORE INTO try1.order_status(ID_WORKER, ID_ORDER, ID_MODULE, ID_PROJECT, AMOUNT_OF_PRODUCTS, BEGIN_DATE, END_DATE) SELECT workers.ID_WORKER, orders.ID_ORDER, module.ID_MODULE, projects.ID, @AMOUNT_OF_PRODUCTS, @BEGIN_DATE, @END_DATE FROM try1.workers INNER JOIN try1.orders INNER JOIN try1.modules INNER JOIN try1.projects WHERE workers.FNAME = @FNAME AND workers.LNAME = @LNAME AND workers.ID_WORKER = @ID_WORKER AND orders.ORDER_DESC = @ORDER_DESC AND orders.ORDER_NUMBER = @ORDER_NUMBER AND modules.NAME = @MODULES_NAME AND projects.PROJECT_NAME = @PROJECT_NAME", connection);
DateTime begin_date;
bool value = DateTime.TryParse(datagrdStatus_order.Rows[i].Cells[8].Value.ToString(), out begin_date);
if (!value)
{
begin_date = Convert.ToDateTime(value);
}
DateTime end_date;
bool value2 = DateTime.TryParse(datagrdStatus_order.Rows[i].Cells[9].Value.ToString(), out end_date);
if (!value2)
{
end_date = Convert.ToDateTime(value2);
}
cmd.Parameters.AddWithValue("@ID_WORKER", datagrdStatus_order.Rows[i].Cells[0].Value);
cmd.Parameters.AddWithValue("@FNAME", datagrdStatus_order.Rows[i].Cells[1].Value);
cmd.Parameters.AddWithValue("@LNAME", datagrdStatus_order.Rows[i].Cells[2].Value);
cmd.Parameters.AddWithValue("@ORDER_DESC", datagrdStatus_order.Rows[i].Cells[3].Value);
cmd.Parameters.AddWithValue("@NUMBER_ORDER", datagrdStatus_order.Rows[i].Cells[4].Value);
cmd.Parameters.AddWithValue("@MODULES_NAME", datagrdStatus_order.Rows[i].Cells[5].Value);
cmd.Parameters.AddWithValue("@PROJECT_NAME", datagrdStatus_order.Rows[i].Cells[6].Value);
cmd.Parameters.AddWithValue("@AMOUNT_OF_PRODUCTS", datagrdStatus_order.Rows[i].Cells[7].Value);
cmd.Parameters.AddWithValue("@BEGIN_DATE", begin_date);
cmd.Parameters.AddWithValue("@END_DATE", end_date);
cmd.ExecuteNonQuery();
}
然后我编译了该代码,但有一个例外:
从“布尔”到“日期时间”的无效转换
并将其指向代码行:
begin_date = Convert.ToDateTime(value);
我正在寻找其他解决方案,但我仍然不知道如何解决。有任何想法吗?寻求帮助。
答案 0 :(得分:-1)
您有value
作为布尔类型
bool value = DateTime.TryParse(datagrdStatus_order.Rows[i].Cells[8].Value.ToString(), out begin_date);
然后您将其称为:Convert.ToDateTime(value);
之所以抛出异常,是因为Convert.ToDateTime()
接受的是DateTime
数据类型,而不是bool
类型。
答案 1 :(得分:-1)
您要尝试检查DateTime
的值是否正确?
解决方案很简单。您应该将DateTime?
变量使用bool
而不是value
。这表示一个Nullable DateTime
答案 2 :(得分:-1)
DateTime.TryParse 只会返回布尔值。 “ out”参数是返回值,应该很有趣。
这两个ifs对我来说都是不必要的。当 DateTime.TryParse 返回false时,无法将字符串解析为datetime。您应该查看 datagrdStatus_order.Rows [i] .Cells [8] .Value.ToString()给您的内容,以及是否可以将其解析为DateTime。
也许documentation应该更清楚