【求教】无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。

时间:2021-01-18 03:37:52
这个程序是关于连接两个不同的数据源中表的复制。但调试的时候有一行出现问题。
代码如下:

        private void Form1_Load(object sender, EventArgs e)
        {
            SqlConnection conn1 = new SqlConnection();
            SqlConnection conn2 = new SqlConnection();
            SqlCommand cmd1 = new SqlCommand();
            SqlCommand cmd2 = new SqlCommand();
            SqlDataReader dr;
            conn1.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=History;User ID=sa;Pwd=sa";
            conn2.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=History2;User ID=sa;Pwd=sa";
            cmd1.Connection = conn1;
            cmd2.Connection = conn2;
            cmd1.CommandText = "SELECT GroupName,State,Point,Time FROM OnOff";
            conn1.Open();
            dr = cmd1.ExecuteReader();
            conn2.Open();
            while (dr.Read())
            {
                string insertString = "INSERT INTO OnOff3( GroupName, State,Point,Time) VALUES ('{0}','{1}','{2}','{3}')"; 
                //问题就在这,最后一个参数提示【无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。】
                insertString = string.Format(insertString, dr.GetString(0), dr.GetString(1), dr.GetString(2),dr.GetString(3).ToString());

                cmd2.CommandText = insertString;
                cmd2.ExecuteNonQuery();
            }
            dr.Close();
            conn1.Close();
            conn2.Close();
            MessageBox.Show("Inserted Done!"); 
        }

PS:GroupName, State,Point这三个字段在数据库中都为nchar(10)类型,字段Time在数据库中为datetime类型。

希望高手指点下问题出在哪,最好能写出代码。
感激不尽!!

13 个解决方案

#1


字段Time在数据库中为datetime类型

dr.GetString(3).ToString()

#2


dr.GetDateTime(3).ToString());

#3


dr.GetString(3).ToString()

=>

dr.GetDateTime(3).ToString("yyyy-MM-dd hh:mm:ss")

#4



dr[3].tostring()

#5


dr.GetDateTime(3).ToString() ??

#6


引用 1 楼 sandy945 的回复:
字段Time在数据库中为datetime类型

dr.GetString(3).ToString()


这个就是错误原因,字段Time在数据库中为datetime类型,但你是用 GetString 取值的,所以报错

#7


试一下是否是
dr.GetString(3).ToString();这里出问题了

#8


我网络很差吗?一下子排到这么后面了 悲剧啊

#9


引用 6 楼 sandy945 的回复:
引用 1 楼 sandy945 的回复:字段Time在数据库中为datetime类型 dr.GetString(3).ToString()

这个就是错误原因,字段Time在数据库中为datetime类型,但你是用 GetString 取值的,所以报错

知道了  换成dr.GetDateTime(3)就可以了 谢谢!

#10


引用 6 楼 sandy945 的回复:
引用 1 楼 sandy945 的回复:字段Time在数据库中为datetime类型 dr.GetString(3).ToString()

这个就是错误原因,字段Time在数据库中为datetime类型,但你是用 GetString 取值的,所以报错

正解,其实可以考虑表中时间用字符串类型,要不转换可能比较麻烦

#11


引用 5 楼 kyoybs 的回复:
dr.GetDateTime(3).ToString() ??

哎 看错你答案啦 多多包含!!哎

#12


引用 4 楼 freeboy827 的回复:
C# code
dr[3].tostring()
【求教】无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。哥们 你的答案是正确的 今天我是咋了  今年最失败结贴诞生了 多包含

#13


我也差不多遇到此问题

#1


字段Time在数据库中为datetime类型

dr.GetString(3).ToString()

#2


dr.GetDateTime(3).ToString());

#3


dr.GetString(3).ToString()

=>

dr.GetDateTime(3).ToString("yyyy-MM-dd hh:mm:ss")

#4



dr[3].tostring()

#5


dr.GetDateTime(3).ToString() ??

#6


引用 1 楼 sandy945 的回复:
字段Time在数据库中为datetime类型

dr.GetString(3).ToString()


这个就是错误原因,字段Time在数据库中为datetime类型,但你是用 GetString 取值的,所以报错

#7


试一下是否是
dr.GetString(3).ToString();这里出问题了

#8


我网络很差吗?一下子排到这么后面了 悲剧啊

#9


引用 6 楼 sandy945 的回复:
引用 1 楼 sandy945 的回复:字段Time在数据库中为datetime类型 dr.GetString(3).ToString()

这个就是错误原因,字段Time在数据库中为datetime类型,但你是用 GetString 取值的,所以报错

知道了  换成dr.GetDateTime(3)就可以了 谢谢!

#10


引用 6 楼 sandy945 的回复:
引用 1 楼 sandy945 的回复:字段Time在数据库中为datetime类型 dr.GetString(3).ToString()

这个就是错误原因,字段Time在数据库中为datetime类型,但你是用 GetString 取值的,所以报错

正解,其实可以考虑表中时间用字符串类型,要不转换可能比较麻烦

#11


引用 5 楼 kyoybs 的回复:
dr.GetDateTime(3).ToString() ??

哎 看错你答案啦 多多包含!!哎

#12


引用 4 楼 freeboy827 的回复:
C# code
dr[3].tostring()
【求教】无法将类型为“System.DateTime”的对象强制转换为类型“System.String”。哥们 你的答案是正确的 今天我是咋了  今年最失败结贴诞生了 多包含

#13


我也差不多遇到此问题