如上图所示,是调试出错的提示//原先读取到idtxt中的字符串是gbk编码的,mysql数据库用的是utf8编码,通过下面的语句转换为utf8 System.Text.Encoding gbk, utf8;
//gb2312
gbk = System.Text.Encoding.GetEncoding("gbk");
//utf-8
utf8 = System.Text.Encoding.GetEncoding("utf-8");
byte[] gb;
gb = gbk.GetBytes(idtxt);
gb = System.Text.Encoding.Convert(gbk, utf8, gb);
MessageBox.Show("测试提示4.0:UTF8编码的身份证信息\n" + gb);
string buffer = utf8.GetString(gb);
MessageBox.Show("测试提示4.2:UTF8编码的身份证信息\n" + buffer);
string[] idInfor_Utf8 = buffer.Split('|');
从 测试提示4.1 可以判断转换完的数据时正常的下面是 数据库操作的代码 conn.Open();
MySqlParameter p_name, p_idNum, p_sex, p_nation, p_swiTime;
MySqlCommand com = new MySqlCommand();
com.Connection = conn;
com.CommandText = "USE VsInfo;";
int i = com.ExecuteNonQuery();
if (i == 0)
{
MessageBox.Show("测试提示6:切换为使用数据库vsinfo");
}
//com.CommandText = "INSERT INTO vsinfo(name,idNum,sex,nation,swiTime)VALUES('张三','54232519930525101X','男','汉','201508120955');";
com.CommandText = "INSERT INTO vsinfo(name,idNum,sex,nation,swiTime)VALUES(?name,?idNum,?sex,?nation,?swiTime);";
p_name = com.Parameters.AddWithValue("?name", MySqlDbType.VarChar);
p_idNum = com.Parameters.AddWithValue("?idNum", MySqlDbType.VarChar);
p_sex = com.Parameters.AddWithValue("?sex", MySqlDbType.VarChar);
p_nation = com.Parameters.AddWithValue("?nation", MySqlDbType.VarChar);
p_swiTime = com.Parameters.AddWithValue("?swiTime", MySqlDbType.VarChar);
com.Prepare();
p_name.Value = idInfor_Utf8[0];
p_idNum.Value = idInfor_Utf8[5];
p_sex.Value = idInfor_Utf8[1];
p_nation.Value = idInfor_Utf8[2];
p_swiTime.Value = idInfor_Utf8[8];
MessageBox.Show("测试提示7:即将存入数据库的字符串\n" + p_name.Value + "\n" + p_idNum.Value + "\n"
+ p_sex.Value + "\n" + p_nation.Value + "\n" + p_swiTime.Value + "\n");
try { com.ExecuteNonQuery();}
catch (MySqlException ae)
{
MessageBox.Show(ae.Message.ToString());
}
conn.Close();直到 执行 测试提示7赋给 p_xxx.Value的值都是正确的,但是执行com.ExecuteNonQuery()时,就会报错,输入的字符串格式不正确,已经卡了两天了,不知道哪里出了问题,跪求帮忙啊~
com.CommandText = "INSERT INTO vsinfo(name,idNum,sex,nation,swiTime)VALUES('张三','54232519930525101X','男','汉','201508120955');";
直接insert 而不用 参数的话,插入是正常执行的,换用参数方式插入就出错了~
MessageBox.Show(com.CommandText);
Show的结果是这个样子的,感觉是并没有把值赋给那几个参数?
if (conn.State != ConnectionState.Open)
{
conn.Open();
}
string sql = "USE VsInfo; INSERT INTO vsinfo(name,idNum,sex,nation,swiTime)VALUES(?name,?idNum,?sex,?nation,?swiTime);";
MySqlCommand com = new MySqlCommand(sql, conn);
com.Parameters.Add("name", MySqlDbType.VarChar);
com.Parameters["name"].Value = idInfor_Utf8[0];
com.Parameters.Add("idNum", MySqlDbType.VarChar);
com.Parameters["idNum"].Value = idInfor_Utf8[5];
com.Parameters.Add("sex", MySqlDbType.VarChar);
com.Parameters["sex"].Value = idInfor_Utf8[1];
com.Parameters.Add("nation", MySqlDbType.VarChar);
com.Parameters["nation"].Value = idInfor_Utf8[2];
com.Parameters.Add("swiTime", MySqlDbType.VarChar);
com.Parameters["swiTime"].Value = idInfor_Utf8[8];
try
{
com.ExecuteNonQuery();
}
catch (MySqlException ae)
{
MessageBox.Show(ae.Message.ToString());
}
conn.Close();