实习生求助:Insert方法遇String转Int32类型转换异常
帮你解决Insert方法的两个错误
嘿,别慌!我来帮你拆解下这两个错误的根源,一步步解决问题:
错误根源分析
1. DataRow赋值方式错误
你在dt.Rows.Add里的参数传递逻辑有问题:
dt.Rows.Add(1, new string[] { lang, known, known, known }, werknemerId);
DataRowCollection.Add方法需要与DataTable列数匹配的单个参数列表,但你把Taal、Spreken、Lezen、Schrijven四个列的值打包成了一个数组,这会导致:
- 数组被当作单个值赋值给第二列
Taal(实际存储的是数组的字符串表示,比如"System.String[]") - 后续的
Spreken、Lezen、Schrijven列没有被赋值,默认是DBNull
当SqlBulkCopy写入数据库时,目标表的某个int列可能接收到了这个字符串值,从而抛出「String无法转换为Int32」的异常。
2. 重复调用写入方法
你连续调用了两次bc.WriteToServer(dt);,这会导致DataTable里的所有数据被重复插入到数据库中,虽然不是报错的直接原因,但会造成数据冗余。
修正后的完整代码
int werknemerId = 12345; int knowhowLenght = knowhowMatches.Count; DataTable dt = new DataTable(); dt.Columns.Add(new DataColumn("Kantoor", typeof(int))); dt.Columns.Add(new DataColumn("Taal", typeof(string))); dt.Columns.Add(new DataColumn("Spreken", typeof(string))); dt.Columns.Add(new DataColumn("Lezen", typeof(string))); dt.Columns.Add(new DataColumn("Schrijven", typeof(string))); dt.Columns.Add(new DataColumn("Talen_op_werknemerID", typeof(int))); // 修正Rows.Add的参数传递:每个列对应一个参数,顺序和DataTable列一致 for (int x = 0; x < languageMatches.Count; x++) { string lang = languageMatches[x]; string known = knowhowMatches[x]; dt.Rows.Add(1, lang, known, known, known, werknemerId); } using(SqlConnection Conn = new SqlConnection(connstring)) { Conn.Open(); using(SqlBulkCopy bc = new SqlBulkCopy(Conn)) { bc.DestinationTableName = "UzkTalen"; // 推荐添加列映射:确保DataTable列和目标表列按名称匹配,避免顺序不一致导致的错误 bc.ColumnMappings.Add("Kantoor", "Kantoor"); bc.ColumnMappings.Add("Taal", "Taal"); bc.ColumnMappings.Add("Spreken", "Spreken"); bc.ColumnMappings.Add("Lezen", "Lezen"); bc.ColumnMappings.Add("Schrijven", "Schrijven"); bc.ColumnMappings.Add("Talen_op_werknemerID", "Talen_op_werknemerID"); // 移除重复的写入调用 bc.WriteToServer(dt); } }
关键修正点说明
- 修正
Rows.Add参数:现在每个参数对应DataTable的一列,类型完全匹配,不会再出现字符串转int的类型错误。 - 移除重复写入:只保留一次
WriteToServer调用,避免数据重复插入。 - 添加列映射(可选但推荐):如果目标表
UzkTalen的列顺序和DataTable不一致,SqlBulkCopy会按位置匹配,容易出问题。添加列映射后,会按列名匹配,更安全可靠。
内容的提问来源于stack exchange,提问作者Excalibur Morgan
相关产品推荐
相关产品推荐

