我正在读取一个文件并将值插入到我的表中。然而,我并不是要插入所有的列。我得到了一个无法放置的溢出异常。文件内容如下:
Huseyin 13/11/1978尼科西亚MBRh+ MBRh+ 05333768275 Kelebek Street,11,Taskinkoy,尼科西亚,KKTC
创建表的代码
c.CommandText = "CREATE TABLE patients (patientid AUTOINCREMENT PRIMARY KEY, firstlastname CHAR, birthdate CHAR, birthplace CHAR, gender CHAR, bloodtype CHAR, telnum long, address CHAR)";插入代码是:
c.CommandText = "INSERT INTO patients (" +
"firstlastname, birthdate, birthplace, bloodtype, telnum, address" +
") VALUES ('" +
info.Substring(0, 15) + "', '" +
info.Substring(24, 10) + "', '" +
info.Substring(35, 9) + "', '" +
info.Substring(47, 5) + "', '" +
info.Substring(53, 11) + "', '" +
info.Substring(64) + "')";
c.ExecuteNonQuery();溢出异常将抛出在行c.ExecuteNonQuery();处。
注意:实际文件中的间距与上面显示的不同。这解释了子字符串函数中的可变长度。谢谢
发布于 2012-12-22 11:19:19
我认为您的子字符串表达式有问题。这并不完全正确。
@Remou中的注释还标识了异常的当前原因。
当然,字符串连接有一个很大的问题。
当将值传递给数据库引擎时,这不是正确的做法。
(引用问题、Sql注入攻击)
正确的做法应该是:
(在创建包含telnum字段的表之后,由于它不是真正的数值,所以更改为char数据类型)
CREATE TABLE patients
(patientid AUTOINCREMENT PRIMARY KEY,
firstlastname CHAR(15),
birthdate CHAR(10),
birthplace CHAR(8),
gender CHAR(1),
bloodtype CHAR(4),
telnum CHAR(12),
address CHAR(255))
......
string info = "Huseyin Sabirli 13/11/1978 Nicosia MBRh+ 05333768275 " +
"Kelebek Street, No:11, Taskinkoy, Nicosia, KKTC";
string name = info.Substring(0, 15);
string date = info.Substring(16, 11)
string place = info.Substring(27, 8);
string blood = info.Substring(37, 4);
string num = info.Substring(41, 12);
string address = info.Substring(53);
string cmdText = "INSERT INTO patients (" +
"firstlastname, birthdate, birthplace, bloodtype, telnum, address) " +
"VALUES (?,?,?,?,?,?)"
using(OleDbConnection cn = getConnection())
{
cn.Open();
using(OleDbCommand cmd = new OleDbCommand(cmdText, cn))
{
cmd.Parameters.AddWithValue("name", name);
cmd.Parameters.AddWithValue("date", date);
cmd.Parameters.AddWithValue("place", place);
cmd.Parameters.AddWithValue("blood", blood);
cmd.Parameters.AddWithValue("num", num);
cmd.Parameters.AddWithValue("address", address);
cmd.ExecuteNonQuery();
}
}https://stackoverflow.com/questions/14001993
复制相似问题