带参数语句通常用于批量操作,例如批量插入。
截取一小段代码,修改后做一个简单的示例:
1. 表结构:
CREATE TABLE `数据` ( `createtime` datetime NOT NULL, `dt` datetime NOT NULL, `val` float(7,2) DEFAULT NULL, PRIMARY KEY (`createtime`,`dt`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2. 带参数语句的使用
public static void Save(DateTime createtime, List<DtVal> dvs) { string sql = "INSERT INTO 数据 (createtime, dt, val) VALUES('" + createtime.ToString("yyyy-MM-dd HH:mm:ss") + "', @p1,@p2);"; using (MySqlConnection conn = new MySqlConnection(connStr)) { conn.Open(); using (MySqlCommand cmd = conn.CreateCommand()) { cmd.CommandText = sql; cmd.Prepare();
for (int i = 0; i < dvs.Count; i++) { cmd.Parameters.Clear(); MySql.Data.Types.MySqlDateTime time = new MySql.Data.Types.MySqlDateTime(dvs[i].time);//注意:日期特殊处理 cmd.Parameters.AddWithValue("p1", time); cmd.Parameters.AddWithValue("p2", dvs[i].val); cmd.ExecuteNonQuery(); } } } }
实际上,不只是日期,在 MySQL.Data.Types 中的类型,均需要做相应的转换。在一个就是参数用 @ 开头。