源代码如下: string source = "DSN=MySqlOperation";
OdbcConnection conn = null;
OdbcCommand cmd = null; conn = new OdbcConnection(source);
conn.Open();
cmd = conn.CreateCommand(); foreach (Player p in players)
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(@ChineseName,@EnglishName,@Team,@Birthday,@Height,@Weight,@ComeFrom,@Career)"; OdbcParameter para_0 = new OdbcParameter("@EnglishName", OdbcType.VarChar, 50);
para_0.Value = p.EnglishName;
cmd.Parameters.Add(para_0); Console.WriteLine(p.EnglishName); OdbcParameter para_1 = new OdbcParameter("@ChineseName", OdbcType.VarChar, 50);
para_1.Value = p.ChineseName;
cmd.Parameters.Add(para_1); Console.WriteLine(p.ChineseName); OdbcParameter para_2 = new OdbcParameter("@Team", OdbcType.VarChar, 50);
para_2.Value = p.Team;
cmd.Parameters.Add(para_2); Console.WriteLine(p.Team); OdbcParameter para_3 = new OdbcParameter("@Birthday", OdbcType.VarChar, 50);
para_3.Value = p.Birthday;
cmd.Parameters.Add(para_3); Console.WriteLine(p.Birthday); OdbcParameter para_4 = new OdbcParameter("@Height", OdbcType.VarChar, 50);
para_4.Value = p.Height;
cmd.Parameters.Add(para_4); Console.WriteLine(p.Height); OdbcParameter para_5 = new OdbcParameter("@Weight", OdbcType.VarChar, 50);
para_5.Value = p.Weight;
cmd.Parameters.Add(para_5); Console.WriteLine(p.Weight); OdbcParameter para_6 = new OdbcParameter("@ComeFrom", OdbcType.VarChar, 50);
para_6.Value = p.ComeFrom;
cmd.Parameters.Add(para_6); Console.WriteLine(p.ComeFrom); OdbcParameter para_7 = new OdbcParameter("@Career", OdbcType.Int);
para_7.Value = p.Career;
cmd.Parameters.Add(para_7); Console.WriteLine(p.Career); cmd.CommandText = sqlStr;
cmd.ExecuteNonQuery();
}
报错说“colomn ‘chineseName’ cannot be null”,意思是说@ChineseName没加进去?
请高手把把脉!
谢了!
OdbcConnection conn = null;
OdbcCommand cmd = null; conn = new OdbcConnection(source);
conn.Open();
cmd = conn.CreateCommand(); foreach (Player p in players)
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(@ChineseName,@EnglishName,@Team,@Birthday,@Height,@Weight,@ComeFrom,@Career)"; OdbcParameter para_0 = new OdbcParameter("@EnglishName", OdbcType.VarChar, 50);
para_0.Value = p.EnglishName;
cmd.Parameters.Add(para_0); Console.WriteLine(p.EnglishName); OdbcParameter para_1 = new OdbcParameter("@ChineseName", OdbcType.VarChar, 50);
para_1.Value = p.ChineseName;
cmd.Parameters.Add(para_1); Console.WriteLine(p.ChineseName); OdbcParameter para_2 = new OdbcParameter("@Team", OdbcType.VarChar, 50);
para_2.Value = p.Team;
cmd.Parameters.Add(para_2); Console.WriteLine(p.Team); OdbcParameter para_3 = new OdbcParameter("@Birthday", OdbcType.VarChar, 50);
para_3.Value = p.Birthday;
cmd.Parameters.Add(para_3); Console.WriteLine(p.Birthday); OdbcParameter para_4 = new OdbcParameter("@Height", OdbcType.VarChar, 50);
para_4.Value = p.Height;
cmd.Parameters.Add(para_4); Console.WriteLine(p.Height); OdbcParameter para_5 = new OdbcParameter("@Weight", OdbcType.VarChar, 50);
para_5.Value = p.Weight;
cmd.Parameters.Add(para_5); Console.WriteLine(p.Weight); OdbcParameter para_6 = new OdbcParameter("@ComeFrom", OdbcType.VarChar, 50);
para_6.Value = p.ComeFrom;
cmd.Parameters.Add(para_6); Console.WriteLine(p.ComeFrom); OdbcParameter para_7 = new OdbcParameter("@Career", OdbcType.Int);
para_7.Value = p.Career;
cmd.Parameters.Add(para_7); Console.WriteLine(p.Career); cmd.CommandText = sqlStr;
cmd.ExecuteNonQuery();
}
报错说“colomn ‘chineseName’ cannot be null”,意思是说@ChineseName没加进去?
请高手把把脉!
谢了!
如果有值,可以用cmd.Parameters.AddWithValue("@ChineseName", p.ChineseName);试一下......
string source = "DSN=MySqlOperation";
OdbcConnection conn = null;
OdbcCommand cmd = null; conn = new OdbcConnection(source);
conn.Open();
cmd = conn.CreateCommand(); foreach (Player p in players)
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(@ChineseName,@EnglishName,@Team,@Birthday,@Height,@Weight,@ComeFrom,@Career)"; OdbcParameter para_0 = new OdbcParameter("@EnglishName", OdbcType.VarChar, 50);
para_0.Value = p.EnglishName;
cmd.Parameters.Add(para_0); Console.WriteLine(p.EnglishName); //OdbcParameter para_1 = new OdbcParameter("@ChineseName", OdbcType.VarChar, 50);
//para_1.Value = p.ChineseName;
//cmd.Parameters.Add(para_1); Console.WriteLine(p.ChineseName);
cmd.Parameters.AddWithValue("@ChineseName", p.ChineseName); OdbcParameter para_2 = new OdbcParameter("@Team", OdbcType.VarChar, 50);
para_2.Value = p.Team;
cmd.Parameters.Add(para_2); Console.WriteLine(p.Team); OdbcParameter para_3 = new OdbcParameter("@Birthday", OdbcType.VarChar, 50);
para_3.Value = p.Birthday;
cmd.Parameters.Add(para_3); Console.WriteLine(p.Birthday); OdbcParameter para_4 = new OdbcParameter("@Height", OdbcType.VarChar, 50);
para_4.Value = p.Height;
cmd.Parameters.Add(para_4); Console.WriteLine(p.Height); OdbcParameter para_5 = new OdbcParameter("@Weight", OdbcType.VarChar, 50);
para_5.Value = p.Weight;
cmd.Parameters.Add(para_5); Console.WriteLine(p.Weight); OdbcParameter para_6 = new OdbcParameter("@ComeFrom", OdbcType.VarChar, 50);
para_6.Value = p.ComeFrom;
cmd.Parameters.Add(para_6); Console.WriteLine(p.ComeFrom); OdbcParameter para_7 = new OdbcParameter("@Career", OdbcType.Int);
para_7.Value = p.Career;
cmd.Parameters.Add(para_7); Console.WriteLine(p.Career); cmd.CommandText = sqlStr;
cmd.ExecuteNonQuery();
}
不用写那么多的代码直接使用AddWithValue就行。string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(@ChineseName,@EnglishName,@Team,@Birthday,@Height,@Weight,@ComeFrom,@Career)";
cmd.Parameters.AddWithValue("@ChineseName", p.ChineseName);//断点到这里看看这里的p.ChineseName是不是null
cmd.Parameters.AddWithValue("@EnglishName", p.EnglishName);
cmd.Parameters.AddWithValue("@Team", p.Team);
cmd.Parameters.AddWithValue("@Birthday", p.Birthday);
cmd.Parameters.AddWithValue("@Height", p.Height);
cmd.Parameters.AddWithValue("@Weight", p.Weight);
cmd.Parameters.AddWithValue("@ComeFrom", p.ComeFrom);
cmd.Parameters.AddWithValue("@Career", p.Career);
实例p里的属性没问题。输出结果可以看得到。前面输出的是p的属性,我后来添加的代码。和帖子里贴出的代码有区别的!错误请看:
string source = "DSN=MySqlOperation";
OdbcConnection conn = null;
OdbcCommand cmd = null; conn = new OdbcConnection(source);
conn.Open();
cmd = conn.CreateCommand(); foreach (Player p in players)
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES('{0}','{1}','{2}','{3}',{4},{5},'{6}','{7}')";
sqlStr = String.Format(sqlStr, p.EnglishName, p.ChineseName, p.Team, p.Birthday, p.Height, p.Weight,
p.ComeFrom, p.Career); System.Console.WriteLine(sqlStr); // 看下SQL cmd.CommandText = sqlStr;
cmd.ExecuteNonQuery();
}
谁能告诉我答案吗?
困惑中!
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(@ChineseName,@EnglishName,@Team,@Birthday,@Height,@Weight,@ComeFrom,@Career)"; cmd.CommandText = sqlStr; OdbcParameter para_0 = cmd.Parameters.Add("@EnglishName", OdbcType.VarChar, 50);
para_0.Value = p.EnglishName;
cmd.Parameters.Add(para_0); Console.WriteLine(p.EnglishName); OdbcParameter para_1 = cmd.Parameters.Add("@ChineseName", OdbcType.VarChar, 50);
para_1.Value = p.ChineseName;
cmd.Parameters.Add(para_1); Console.WriteLine(p.ChineseName); OdbcParameter para_2 = cmd.Parameters.Add("@Team", OdbcType.VarChar, 50);
para_2.Value = p.Team;
cmd.Parameters.Add(para_2); Console.WriteLine(p.Team); OdbcParameter para_3 = cmd.Parameters.Add("@Birthday", OdbcType.VarChar, 50);
para_3.Value = p.Birthday;
cmd.Parameters.Add(para_3); Console.WriteLine(p.Birthday); OdbcParameter para_4 = cmd.Parameters.Add("@Height", OdbcType.VarChar, 50);
para_4.Value = p.Height;
cmd.Parameters.Add(para_4); Console.WriteLine(p.Height); OdbcParameter para_5 = cmd.Parameters.Add("@Weight", OdbcType.VarChar, 50);
para_5.Value = p.Weight;
cmd.Parameters.Add(para_5); Console.WriteLine(p.Weight); OdbcParameter para_6 = cmd.Parameters.Add("@ComeFrom", OdbcType.VarChar, 50);
para_6.Value = p.ComeFrom;
cmd.Parameters.Add(para_6); Console.WriteLine(p.ComeFrom); OdbcParameter para_7 = cmd.Parameters.Add("@Career", OdbcType.Int);
para_7.Value = p.Career;
cmd.Parameters.Add(para_7); Console.WriteLine(p.Career); cmd.ExecuteNonQuery();
}
字符串先用这个东东包装一下: public static string quotedString(string str)
{
return String.Format("'{0}'", str.Replace("'", "''"));
}
string source = "DSN=MySqlOperation";
OdbcConnection conn = null;
OdbcCommand cmd = null; conn = new OdbcConnection(source);
conn.Open();
cmd = conn.CreateCommand(); foreach (Player p in players)
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES({0},{1},{2},{3},{4},{5},{6},{7})";
sqlStr = String.Format(sqlStr, quotedString(p.EnglishName), quotedString(p.ChineseName), quotedString(p.Team), quotedString(p.Birthday), p.Height, p.Weight,
quotedString(p.ComeFrom), quotedString(p.Career)); System.Console.WriteLine(sqlStr); // 看下SQL cmd.CommandText = sqlStr;
cmd.ExecuteNonQuery();
}
另外你参考一下使用MySQL Connector/Net 1.0
"SELECT ColumnWord FROM OkieTable WHERE MagicKey = ?", con))
{
com.Parameters.AddWithValue("@var", paramWord); using (OdbcDataReader reader = com.ExecuteReader())
{
while (reader.Read())
{
string word = reader.GetString(0);
// Word is from the database. Do something with it.
}
}
}
只有一个参数,用“?”,如果有两个参数的话,都用问号吗?然后参数按照先后次序对应加入command?
下面是别人解决问题的总结:问题解决了。总结一下:
1.mysql数据库驱动有两种:mysql-connector-odbc和mysql-connector-net,
前者不支持参数,后者支持,这是我测试的结果;
2.参数变量使用跟SqlServer一样,只需把@变为?,
如,mysql中写为:insert into test values (?id,?title,?type,now())";
3.使用mysql-connector-net驱动很简单,到网上下载mysql-connector-net-5.2.3-src,
解压后,把mysql.data.dll添加到项目的bin文件夹即可使用;
4.连接本机mysql数据库方法例子如下:
string connStr = "server=localhost;user id=root; password=yourPassword;database=yourDatabase";
MySqlConnection conn = new MySqlConnection(connStr);下面附上测试通过的代码:
string connStr = "server=localhost;user id=root; password=***; database=test";
MySqlConnection conn = new MySqlConnection(connStr);
if (conn != null)
conn.Open();
else
return; string SQL_INSERT_TOPIC = "insert into test values (null,?title,?type,now())";
string PARM_TITLE = "?title";
string PARM_TYPE = "?type";
MySqlParameter[] parms = new MySqlParameter[]
{
new MySqlParameter(PARM_TITLE,MySqlDbType.VarChar,80),
new MySqlParameter(PARM_TYPE,MySqlDbType.VarChar,1)
};
parms[0].Value = "welcome to beijing";
parms[1].Value = "C"; MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = SQL_INSERT_TOPIC; foreach (MySqlParameter pram in parms)
cmd.Parameters.Add(pram); cmd.ExecuteNonQuery();
conn.Close();
我唯一改动的地方,只是把values()里都换成了“?”。
ps:上面的代码外层还有一个foreach list,我没有贴出来。下面我贴出来了。 foreach (Player p in players)
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(?,?,?,?,?,?,?,?);";
cmd.CommandText = sqlStr; OdbcParameter para_0 = new OdbcParameter("@ChineseName", OdbcType.VarChar, 50);
para_0.Value = p.ChineseName;
cmd.Parameters.Add(para_0); Console.WriteLine(para_0.Value); OdbcParameter para_1 = new OdbcParameter("@EnglishName", OdbcType.VarChar, 50);
para_1.Value = p.EnglishName;
cmd.Parameters.Add(para_1); Console.WriteLine(p.EnglishName); OdbcParameter para_2 = new OdbcParameter("@Team", OdbcType.VarChar, 50);
para_2.Value = p.Team;
cmd.Parameters.Add(para_2); Console.WriteLine(p.Team); OdbcParameter para_3 = new OdbcParameter("@Birthday", OdbcType.VarChar, 50);
para_3.Value = p.Birthday;
cmd.Parameters.Add(para_3); Console.WriteLine(p.Birthday); OdbcParameter para_4 = new OdbcParameter("@Height", OdbcType.VarChar, 50);
para_4.Value = p.Height;
cmd.Parameters.Add(para_4); Console.WriteLine(p.Height); OdbcParameter para_5 = new OdbcParameter("@Weight", OdbcType.VarChar, 50);
para_5.Value = p.Weight;
cmd.Parameters.Add(para_5); Console.WriteLine(p.Weight); OdbcParameter para_6 = new OdbcParameter("@ComeFrom", OdbcType.VarChar, 50);
para_6.Value = p.ComeFrom;
cmd.Parameters.Add(para_6); Console.WriteLine(p.ComeFrom); OdbcParameter para_7 = new OdbcParameter("@Career", OdbcType.Int);
para_7.Value = p.Career;
cmd.Parameters.Add(para_7); Console.WriteLine(p.Career);
Console.WriteLine("----------------------------------------------------------"); cmd.ExecuteNonQuery();
}
foreach (Player p in players)
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(?ChineseName,?EnglishName,?Team,?Birthday,?Height,?Weight,?ComeFrom,?Career);";
cmd.CommandText = sqlStr; OdbcParameter para_0 = new OdbcParameter("@ChineseName", OdbcType.VarChar, 50);
para_0.Value = p.ChineseName;
cmd.Parameters.Add(para_0); Console.WriteLine(para_0.Value); OdbcParameter para_1 = new OdbcParameter("@EnglishName", OdbcType.VarChar, 50);
para_1.Value = p.EnglishName;
cmd.Parameters.Add(para_1); Console.WriteLine(p.EnglishName); OdbcParameter para_2 = new OdbcParameter("@Team", OdbcType.VarChar, 50);
para_2.Value = p.Team;
cmd.Parameters.Add(para_2); Console.WriteLine(p.Team); OdbcParameter para_3 = new OdbcParameter("@Birthday", OdbcType.VarChar, 50);
para_3.Value = p.Birthday;
cmd.Parameters.Add(para_3); Console.WriteLine(p.Birthday); OdbcParameter para_4 = new OdbcParameter("@Height", OdbcType.VarChar, 50);
para_4.Value = p.Height;
cmd.Parameters.Add(para_4); Console.WriteLine(p.Height); OdbcParameter para_5 = new OdbcParameter("@Weight", OdbcType.VarChar, 50);
para_5.Value = p.Weight;
cmd.Parameters.Add(para_5); Console.WriteLine(p.Weight); OdbcParameter para_6 = new OdbcParameter("@ComeFrom", OdbcType.VarChar, 50);
para_6.Value = p.ComeFrom;
cmd.Parameters.Add(para_6); Console.WriteLine(p.ComeFrom); OdbcParameter para_7 = new OdbcParameter("@Career", OdbcType.Int);
para_7.Value = p.Career;
cmd.Parameters.Add(para_7); Console.WriteLine(p.Career);
Console.WriteLine("----------------------------------------------------------"); cmd.ExecuteNonQuery();
}
{
string sqlStr = @"INSERT
INTO minfoerp.nbaPlayers(chineseName,englishName,team,birthday,height,weight,comeFrom,career)
VALUES(?,?,?,?,?,?,?,?);";
cmd.Parameters.Clear(); // 清除所有参数
cmd.CommandText = sqlStr; OdbcParameter para_0 = new OdbcParameter("@ChineseName", OdbcType.VarChar, 50);
para_0.Value = p.ChineseName;
cmd.Parameters.Add(para_0); Console.WriteLine(para_0.Value); OdbcParameter para_1 = new OdbcParameter("@EnglishName", OdbcType.VarChar, 50);
para_1.Value = p.EnglishName;
cmd.Parameters.Add(para_1); Console.WriteLine(p.EnglishName); OdbcParameter para_2 = new OdbcParameter("@Team", OdbcType.VarChar, 50);
para_2.Value = p.Team;
cmd.Parameters.Add(para_2); Console.WriteLine(p.Team); OdbcParameter para_3 = new OdbcParameter("@Birthday", OdbcType.VarChar, 50);
para_3.Value = p.Birthday;
cmd.Parameters.Add(para_3); Console.WriteLine(p.Birthday); OdbcParameter para_4 = new OdbcParameter("@Height", OdbcType.VarChar, 50);
para_4.Value = p.Height;
cmd.Parameters.Add(para_4); Console.WriteLine(p.Height); OdbcParameter para_5 = new OdbcParameter("@Weight", OdbcType.VarChar, 50);
para_5.Value = p.Weight;
cmd.Parameters.Add(para_5); Console.WriteLine(p.Weight); OdbcParameter para_6 = new OdbcParameter("@ComeFrom", OdbcType.VarChar, 50);
para_6.Value = p.ComeFrom;
cmd.Parameters.Add(para_6); Console.WriteLine(p.ComeFrom); OdbcParameter para_7 = new OdbcParameter("@Career", OdbcType.Int);
para_7.Value = p.Career;
cmd.Parameters.Add(para_7); Console.WriteLine(p.Career);
Console.WriteLine("----------------------------------------------------------"); cmd.ExecuteNonQuery();
}