首先创建数据库,建立一个用户登录表
2、visualStudio默认是不支持MySql的,要想通过Ado.Net 操作MySql
需要在管理NeGet包添加对MySql.Data 和 MySql.Data.Entity的引用
3、在app.Config中添加数据库连接信息
4、前端页面代码:
1 <WrapPanel> 2 <Button Content="是否存在" Name="IsExitBtn" Click="IsExitBtn_Click" 3 Width="60" Height="30" ></Button> 4 <Button Content="新增" Name="AddBtn" Click="AddBtn_Click" 5 Width="60" Height="30"></Button> 6 <Button Content="修改" Name="UpdateBtn" Click="UpdateBtn_Click" 7 Width="60" Height="30"></Button> 8 <Button Content="删除" Name="DelBtn" Click="DelBtn_Click" 9 Width="60" Height="30"></Button> 10 <Button Content="批量删除" Name="BatchDelBtn" Click="BatchDelBtn_Click" 11 Width="60" Height="30"></Button> 12 <Button Content="批量获取" Name="BatchGetListBtn" Click="BatchGetListBtn_Click" 13 Width="60" Height="30" ></Button> 14 </WrapPanel>
5、cs后台代码:
1 private void AddBtn_Click(object sender, RoutedEventArgs e) 2 { 3 #region 新增 4 StringBuilder addStrSql = new StringBuilder(); 5 addStrSql.Append("insert into LoginUser("); 6 addStrSql.Append("UserId,Name,Age)"); 7 addStrSql.Append(" values ("); 8 addStrSql.Append("@UserId,@Name,@Age)"); 9 10 MySqlParameter[] parameters = { 11 new MySqlParameter("@UserId", 3), 12 new MySqlParameter("@Name", "张三"), 13 new MySqlParameter("@Age", 32)}; 14 var add = new CaseUserData().Add(addStrSql.ToString(), parameters); 15 #endregion 16 } 17 18 private void UpdateBtn_Click(object sender, RoutedEventArgs e) 19 { 20 #region 修改 21 StringBuilder updateStrSql = new StringBuilder(); 22 updateStrSql.Append("update LoginUser set "); 23 updateStrSql.Append("Name=@Name,"); 24 updateStrSql.Append("Age=@Age"); 25 updateStrSql.Append(" WHERE UserId=@UserId"); 26 MySqlParameter[] uparameters = { 27 new MySqlParameter("@UserId", 1), 28 new MySqlParameter("@Name", "王五"), 29 new MySqlParameter("@Age", 33) }; 30 var update = new CaseUserData().Update(updateStrSql.ToString(), uparameters); 31 #endregion 32 } 33 34 private void DelBtn_Click(object sender, RoutedEventArgs e) 35 { 36 #region 删除一条数据 37 StringBuilder DelStrSql = new StringBuilder(); 38 DelStrSql.Append("delete from LoginUser "); 39 DelStrSql.Append(" where UserId=@ID "); 40 MySqlParameter[] delparameters = { 41 new MySqlParameter("@ID", 1) }; 42 var del = new CaseUserData().Delete(DelStrSql.ToString(), delparameters); 43 #endregion 44 } 45 46 private void BatchDelBtn_Click(object sender, RoutedEventArgs e) 47 { 48 #region 批量删除数据 49 List<int> idLists = new List<int>(); 50 string ids = string.Join(",", idLists); //List数组的每个元素加上引号,如("12","32","5456","876455") 51 string s1 = string.Format("'{0}'", ids.Replace(",", "','")); 52 53 StringBuilder BatchDelStrSql = new StringBuilder(); 54 BatchDelStrSql.Append("delete from LoginUser "); 55 BatchDelStrSql.Append(" where UserId in (" + s1 + ")"); 56 var batchDel = new CaseUserData().DeleteList(BatchDelStrSql.ToString()); 57 #endregion 58 } 59 60 private void BatchGetListBtn_Click(object sender, RoutedEventArgs e) 61 { 62 #region 批量获取数据 63 StringBuilder batchGetStrSql = new StringBuilder(); 64 batchGetStrSql.Append("select UserId,Name,Age FROM LoginUser "); 65 batchGetStrSql.Append(" where Age > 30"); 66 var batchGetList = new CaseUserData().GetList(batchGetStrSql.ToString()); 67 #endregion 68 } 69 70 private void IsExitBtn_Click(object sender, RoutedEventArgs e) 71 { 72 #region 数据是否存在 73 StringBuilder strSql = new StringBuilder(); 74 strSql.Append("select count(1) from LoginUser"); 75 strSql.Append(" where UserId=@ID "); 76 var d = new CaseUserData().Exists(strSql.ToString(), 1); 77 #endregion 78 }
6、定义一些基本方法的接口:
1 using System; 2 using System.Data; 3 using System.Collections.Generic; 4 using MvvmFuncationApp.DbHelper; 5 using MySql.Data.MySqlClient; 6 7 namespace iPIS.Server.IDAL 8 { 9 /// <summary> 10 /// 接口层caseuserdata 11 /// </summary> 12 public interface ICaseUserData 13 { 14 #region 成员方法 15 /// <summary> 16 /// 是否存在该记录 17 /// </summary> 18 bool Exists(string StrSql,int ID); 19 /// <summary> 20 /// 增加一条数据 21 /// </summary> 22 bool Add(string strSql,MySqlParameter[] parameters); 23 /// <summary> 24 /// 更新一条数据 25 /// </summary> 26 bool Update(string strSql, MySqlParameter[] parameters); 27 /// <summary> 28 /// 删除一条数据 29 /// </summary> 30 bool Delete(string strSql, MySqlParameter[] parameters); 31 bool DeleteList(string strSql); 32 /// <summary> 33 /// 得到一个对象实体 34 /// </summary> 35 ParametersModel GetModel(int ID); 36 /// <summary> 37 /// 获得数据列表 38 /// </summary> 39 List<ParametersModel> GetList(string strWhere); 40 41 #endregion 成员方法 42 #region MethodEx 43 44 #endregion MethodEx 45 } 46 }
7、定义一个类,实现方法接口:
1 using iPIS.Server.IDAL; 2 using MvvmFuncationApp.DbHelper; 3 using MySql.Data.MySqlClient; 4 using System; 5 using System.Collections.Generic; 6 using System.Data; 7 using System.Runtime.Serialization; 8 using System.Text; 9 using System.Xml.Linq; 10 11 namespace iPIS.Server.Core 12 { 13 /// <summary> 14 /// 数据访问类 15 /// </summary> 16 public partial class CaseUserData : ICaseUserData 17 { 18 public CaseUserData() 19 { } 20 /// <summary> 21 /// 是否存在该记录 22 /// </summary> 23 public bool Exists(string StrSql,int ID) 24 { 25 MySqlParameter[] parameters = { 26 new MySqlParameter("@ID", MySqlDbType.Int32,10) }; 27 parameters[0].Value = ID; 28 29 return DbHelperMySql.Exists(StrSql.ToString(), parameters); 30 } 31 32 /// <summary> 33 /// 增加一条数据 34 /// </summary> 35 public bool Add(string StrSql, MySqlParameter[] parameters) 36 { 37 int rows = DbHelperMySql.ExecuteSql(StrSql.ToString(), parameters); 38 if (rows > 0) 39 { 40 return true; 41 } 42 else 43 { 44 return false; 45 } 46 } 47 48 /// <summary> 49 /// 更新一条数据 50 /// </summary> 51 public bool Update(string StrSql, MySqlParameter[] parameters) 52 { 53 int rows = DbHelperMySql.ExecuteSql(StrSql.ToString(), parameters); 54 if (rows > 0) 55 { 56 return true; 57 } 58 else 59 { 60 return false; 61 } 62 } 63 64 /// <summary> 65 /// 删除一条数据 66 /// </summary> 67 public bool Delete(string StrSql,MySqlParameter[] parameters) 68 { 69 int rows = DbHelperMySql.ExecuteSql(StrSql.ToString(), parameters); 70 if (rows > 0) 71 { 72 return true; 73 } 74 else 75 { 76 return false; 77 } 78 } 79 80 /// <summary> 81 /// 批量删除数据 82 /// </summary> 83 public bool DeleteList(string BatchDelStrSql) 84 { 85 int rows = DbHelperMySql.ExecuteSql(BatchDelStrSql.ToString()); 86 if (rows > 0) 87 { 88 return true; 89 } 90 else 91 { 92 return false; 93 } 94 } 95 96 /// <summary> 97 /// 得到一个对象实体 98 /// </summary> 99 public ParametersModel GetModel(int ID) 100 { 101 StringBuilder strSql = new StringBuilder(); 102 strSql.Append("select UserId,Name,Age from LoginUser "); 103 strSql.Append(" where UserId=@ID "); 104 MySqlParameter[] parameters = { 105 new MySqlParameter("@ID", MySqlDbType.Int32,10) }; 106 parameters[0].Value = ID; 107 108 ParametersModel model = new ParametersModel(); 109 using (var ds = DbHelperMySql.ExecuteReader(strSql.ToString(), parameters)) 110 { 111 while (ds.Read()) 112 { 113 return DataRowToModel(ds); 114 } 115 } 116 return null; 117 } 118 119 /// <summary> 120 /// 得到一个对象实体 121 /// </summary> 122 public ParametersModel DataRowToModel(IDataReader row) 123 { 124 ParametersModel model = new ParametersModel(); 125 if (row != null) 126 { 127 if (row["UserId"] != null && row["UserId"].ToString() != "") 128 { 129 model.ID = int.Parse(row["UserId"].ToString()); 130 } 131 if (row["Name"] != null) 132 { 133 model.Name = row["Name"].ToString(); 134 } 135 if (row["Age"] != null && row["Age"].ToString() != "") 136 { 137 model.Age = int.Parse(row["Age"].ToString()); 138 } 139 140 } 141 return model; 142 } 143 144 /// <summary> 145 /// 获得数据列表 146 /// </summary> 147 public List<ParametersModel> GetList(string strSql) 148 { 149 using (var ds = DbHelperMySql.ExecuteReader(strSql.ToString())) 150 { 151 var list = new List<ParametersModel>(); 152 while (ds.Read()) 153 { 154 list.Add(DataRowToModel(ds)); 155 } 156 return list; 157 } 158 } 159 } 160 }
8、数据库操作封装类:
1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Data; 5 using System.Linq; 6 using System.Text; 7 using System.Threading.Tasks; 8 using MySql.Data.MySqlClient; 9 10 namespace MvvmFuncationApp.DbHelper 11 { 12 public abstract class DbHelperMySql 13 { 14 //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. 15 public static string connectionString = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"]; // "server=127.0.0.1;port=3306;database=lktest;uid=root;pwd=123456"; 16 17 protected DbHelperMySql() 18 { 19 } 20 21 #region 公用方法 22 /// <summary> 23 /// 得到最大值 24 /// </summary> 25 /// <param name="fieldName"></param> 26 /// <param name="tableName"></param> 27 /// <returns></returns> 28 public static int GetMaxId(string fieldName, string tableName) 29 { 30 string strsql = "select max(" + fieldName + ")+1 from " + tableName; 31 object obj = GetSingle(strsql); 32 return obj == null ? 1 : int.Parse(obj.ToString()); 33 } 34 35 /// <summary> 36 /// 是否存在(基于MySqlParameter) 37 /// </summary> 38 /// <param name="strSql"></param> 39 /// <param name="cmdParms"></param> 40 /// <returns></returns> 41 public static bool Exists(string strSql, params MySqlParameter[] cmdParms) 42 { 43 var obj = GetSingle(strSql, cmdParms); 44 int cmdresult; 45 if ((Equals(obj, null)) || (Equals(obj, DBNull.Value))) 46 { 47 cmdresult = 0; 48 } 49 else 50 { 51 cmdresult = int.Parse(obj.ToString()); 52 } 53 return cmdresult != 0; 54 } 55 #endregion 56 57 #region 执行简单SQL语句 58 59 /// <summary> 60 /// 执行SQL语句,返回影响的记录数 61 /// </summary> 62 /// <param name="sqlString">SQL语句</param> 63 /// <returns>影响的记录数</returns> 64 public static int ExecuteSql(string sqlString) 65 { 66 using (var connection = new MySqlConnection(connectionString)) 67 { 68 using (var cmd = new MySqlCommand(sqlString, connection)) 69 { 70 try 71 { 72 connection.Open(); 73 var rows = cmd.ExecuteNonQuery(); 74 return rows; 75 } 76 catch (MySqlException e) 77 { 78 connection.Close(); 79 throw e; 80 } 81 } 82 } 83 } 84 85 public static int ExecuteSqlByTime(string sqlString, int times) 86 { 87 using (var connection = new MySqlConnection(connectionString)) 88 { 89 using (var cmd = new MySqlCommand(sqlString, connection)) 90 { 91 try 92 { 93 connection.Open(); 94 cmd.CommandTimeout = times; 95 var rows = cmd.ExecuteNonQuery(); 96 return rows; 97 } 98 catch (MySqlException e) 99 { 100 connection.Close(); 101 throw e; 102 } 103 } 104 } 105 } 106 107 /// <summary> 108 /// 执行多条SQL语句,实现数据库事务。 109 /// </summary> 110 /// <param name="sqlStringList">多条SQL语句</param> 111 public static int ExecuteSqlTran(List<String> sqlStringList) 112 { 113 using (var conn = new MySqlConnection(connectionString)) 114 { 115 conn.Open(); 116 var cmd = new MySqlCommand { Connection = conn }; 117 var tx = conn.BeginTransaction(); 118 cmd.Transaction = tx; 119 try 120 { 121 var count = 0; 122 foreach (var strsql in sqlStringList.Where(strsql => strsql.Trim().Length > 1)) 123 { 124 cmd.CommandText = strsql; 125 count += cmd.ExecuteNonQuery(); 126 } 127 tx.Commit(); 128 return count; 129 } 130 catch (Exception ex) 131 { 132 tx.Rollback(); 133 throw ex; 134 } 135 } 136 } 137 138 /// <summary> 139 /// 执行带一个存储过程参数的的SQL语句。 140 /// </summary> 141 /// <param name="sqlString">SQL语句</param> 142 /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param> 143 /// <returns>影响的记录数</returns> 144 public static int ExecuteSql(string sqlString, string content) 145 { 146 using (var connection = new MySqlConnection(connectionString)) 147 { 148 var cmd = new MySqlCommand(sqlString, connection); 149 var myParameter = new MySqlParameter("@content", SqlDbType.NText) { Value = content }; 150 cmd.Parameters.Add(myParameter); 151 try 152 { 153 connection.Open(); 154 var rows = cmd.ExecuteNonQuery(); 155 return rows; 156 } 157 catch (MySqlException e) 158 { 159 throw e; 160 } 161 finally 162 { 163 cmd.Dispose(); 164 connection.Close(); 165 } 166 } 167 } 168 169 /// <summary> 170 /// 执行带一个存储过程参数的的SQL语句。 171 /// </summary> 172 /// <param name="sqlString">SQL语句</param> 173 /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param> 174 /// <returns>影响的记录数</returns> 175 public static object ExecuteSqlGet(string sqlString, string content) 176 { 177 using (var connection = new MySqlConnection(connectionString)) 178 { 179 var cmd = new MySqlCommand(sqlString, connection); 180 var myParameter = new MySqlParameter("@content", SqlDbType.NText) { Value = content }; 181 cmd.Parameters.Add(myParameter); 182 try 183 { 184 connection.Open(); 185 var obj = cmd.ExecuteScalar(); 186 if ((Equals(obj, null)) || (Equals(obj, DBNull.Value))) 187 { 188 return null; 189 } 190 else 191 { 192 return obj; 193 } 194 } 195 catch (MySqlException e) 196 { 197 throw e; 198 } 199 finally 200 { 201 cmd.Dispose(); 202 connection.Close(); 203 } 204 } 205 } 206 207 /// <summary> 208 /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例) 209 /// </summary> 210 /// <param name="strSql">SQL语句</param> 211 /// <param name="fs">图像字节,数据库的字段类型为image的情况</param> 212 /// <returns>影响的记录数</returns> 213 public static int ExecuteSqlInsertImg(string strSql, byte[] fs) 214 { 215 using (var connection = new MySqlConnection(connectionString)) 216 { 217 var cmd = new MySqlCommand(strSql, connection); 218 var myParameter = new MySqlParameter("@fs", SqlDbType.Image) { Value = fs }; 219 cmd.Parameters.Add(myParameter); 220 try 221 { 222 connection.Open(); 223 var rows = cmd.ExecuteNonQuery(); 224 return rows; 225 } 226 catch (MySqlException e) 227 { 228 throw e; 229 } 230 finally 231 { 232 cmd.Dispose(); 233 connection.Close(); 234 } 235 } 236 } 237 238 /// <summary> 239 /// 执行一条计算查询结果语句,返回查询结果(object)。 240 /// </summary> 241 /// <param name="sqlString">计算查询结果语句</param> 242 /// <returns>查询结果(object)</returns> 243 public static object GetSingle(string sqlString) 244 { 245 using (var connection = new MySqlConnection(connectionString)) 246 { 247 using (var cmd = new MySqlCommand(sqlString, connection)) 248 { 249 try 250 { 251 connection.Open(); 252 var obj = cmd.ExecuteScalar(); 253 if ((Equals(obj, null)) || (Equals(obj, DBNull.Value))) 254 { 255 return null; 256 } 257 else 258 { 259 return obj; 260 } 261 } 262 catch (MySqlException e) 263 { 264 connection.Close(); 265 throw e; 266 } 267 } 268 } 269 } 270 271 public static object GetSingle(string sqlString, int times) 272 { 273 using (var connection = new MySqlConnection(connectionString)) 274 { 275 using (var cmd = new MySqlCommand(sqlString, connection)) 276 { 277 try 278 { 279 connection.Open(); 280 cmd.CommandTimeout = times; 281 var obj = cmd.ExecuteScalar(); 282 if ((Equals(obj, null)) || (Equals(obj, DBNull.Value))) 283 { 284 return null; 285 } 286 else 287 { 288 return obj; 289 } 290 } 291 catch (MySqlException e) 292 { 293 connection.Close(); 294 throw e; 295 } 296 } 297 } 298 } 299 /// <summary> 300 /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close ) 301 /// </summary> 302 /// <param name="strSql">查询语句</param> 303 /// <returns>MySqlDataReader</returns> 304 public static MySqlDataReader ExecuteReader(string strSql) 305 { 306 var connection = new MySqlConnection(connectionString); 307 var cmd = new MySqlCommand(strSql, connection); 308 try 309 { 310 connection.Open(); 311 var myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 312 return myReader; 313 } 314 catch (MySqlException e) 315 { 316 throw e; 317 } 318 319 } 320 321 /// <summary> 322 /// 执行查询语句,返回DataSet 323 /// </summary> 324 /// <param name="sqlString">查询语句</param> 325 /// <returns>DataSet</returns> 326 [Obsolete("不再使用该接口,请使用ExecuteReader(string strSql)")] 327 public static DataSet Query(string sqlString) 328 { 329 using (var connection = new MySqlConnection(connectionString)) 330 { 331 var ds = new DataSet(); 332 try 333 { 334 connection.Open(); 335 var command = new MySqlDataAdapter(sqlString, connection); 336 command.Fill(ds, "ds"); 337 } 338 catch (MySqlException ex) 339 { 340 throw new Exception(ex.Message); 341 } 342 return ds; 343 } 344 } 345 346 /// <summary> 347 /// 执行查询语句,返回DataSet 348 /// </summary> 349 /// <param name="sqlString"></param> 350 /// <param name="times">超时时间</param> 351 /// <returns></returns> 352 [Obsolete("不再使用该接口,请使用ExecuteReader(string strSql)")] 353 public static DataSet Query(string sqlString, int times) 354 { 355 using (var connection = new MySqlConnection(connectionString)) 356 { 357 var ds = new DataSet(); 358 try 359 { 360 connection.Open(); 361 var command = new MySqlDataAdapter(sqlString, connection) { SelectCommand = { CommandTimeout = times } }; 362 command.Fill(ds, "ds"); 363 } 364 catch (MySqlException ex) 365 { 366 throw new Exception(ex.Message); 367 } 368 return ds; 369 } 370 } 371 372 /// <summary> 373 /// 删除案件 374 /// </summary> 375 /// <returns></returns> 376 public static int ExecuteProcedure(string caseid) 377 { 378 using (var connection = new MySqlConnection(connectionString)) 379 { 380 using (var cmd = new MySqlCommand()) 381 { 382 try 383 { 384 cmd.Connection = connection; 385 connection.Open(); 386 cmd.CommandText = "sp_DeleteCaseInfo"; 387 cmd.CommandType = CommandType.StoredProcedure; 388 389 MySqlParameter id = new MySqlParameter("?id", MySqlDbType.VarChar, 50); 390 id.Value = caseid; 391 cmd.Parameters.Add(id); 392 393 MySqlParameter result = new MySqlParameter("?result", MySqlDbType.Int32, 4); 394 result.Direction = ParameterDirection.Output; 395 cmd.Parameters.Add(result); 396 397 cmd.ExecuteNonQuery(); 398 int state = int.Parse(result.Value.ToString()); 399 return state; 400 } 401 catch (MySqlException e) 402 { 403 throw e; 404 } 405 } 406 } 407 } 408 409 #endregion 410 411 #region 执行带参数的SQL语句 412 413 /// <summary> 414 /// 执行SQL语句,返回影响的记录数 415 /// </summary> 416 /// <param name="sqlString">SQL语句</param> 417 /// <param name="cmdParms">参数化</param> 418 /// <returns>影响的记录数</returns> 419 public static int ExecuteSql(string sqlString, params MySqlParameter[] cmdParms) 420 { 421 using (var connection = new MySqlConnection(connectionString)) 422 { 423 using (var cmd = new MySqlCommand()) 424 { 425 try 426 { 427 PrepareCommand(cmd, connection, null, sqlString, cmdParms); 428 var rows = cmd.ExecuteNonQuery(); 429 cmd.Parameters.Clear(); 430 return rows; 431 } 432 catch (MySqlException e) 433 { 434 throw e; 435 } 436 } 437 } 438 } 439 440 441 /// <summary> 442 /// 执行多条SQL语句,实现数据库事务。 443 /// </summary> 444 /// <param name="sqlStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param> 445 public static void ExecuteSqlTran(Hashtable sqlStringList) 446 { 447 using (var conn = new MySqlConnection(connectionString)) 448 { 449 conn.Open(); 450 using (var trans = conn.BeginTransaction()) 451 { 452 var cmd = new MySqlCommand(); 453 try 454 { 455 //循环 456 foreach (DictionaryEntry myDe in sqlStringList) 457 { 458 var cmdText = myDe.Key.ToString(); 459 var cmdParms = (MySqlParameter[])myDe.Value; 460 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 461 var val = cmd.ExecuteNonQuery(); 462 cmd.Parameters.Clear(); 463 } 464 trans.Commit(); 465 } 466 catch 467 { 468 trans.Rollback(); 469 throw; 470 } 471 } 472 } 473 } 474 475 /// <summary> 476 /// 执行多条SQL语句,实现数据库事务。 477 /// </summary> 478 /// <param name="cmdList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param> 479 public static int ExecuteSqlTran(List<CommandInfo> cmdList) 480 { 481 using (var conn = new MySqlConnection(connectionString)) 482 { 483 conn.Open(); 484 using (var trans = conn.BeginTransaction()) 485 { 486 var cmd = new MySqlCommand(); 487 try 488 { 489 var count = 0; 490 //循环 491 foreach (var myDe in cmdList) 492 { 493 string cmdText = myDe.CommandText; 494 var cmdParms = (MySqlParameter[])myDe.Parameters; 495 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 496 497 if (myDe.EffentNextType == EffentNextType.WhenHaveContine || myDe.EffentNextType == EffentNextType.WhenNoHaveContine) 498 { 499 if (myDe.CommandText.ToLower().IndexOf("count(") == -1) 500 { 501 trans.Rollback(); 502 return 0; 503 } 504 505 object obj = cmd.ExecuteScalar(); 506 bool isHave = false; 507 if (obj == null && obj == DBNull.Value) 508 { 509 isHave = false; 510 } 511 isHave = Convert.ToInt32(obj) > 0; 512 513 if (myDe.EffentNextType == EffentNextType.WhenHaveContine && !isHave) 514 { 515 trans.Rollback(); 516 return 0; 517 } 518 if (myDe.EffentNextType == EffentNextType.WhenNoHaveContine && isHave) 519 { 520 trans.Rollback(); 521 return 0; 522 } 523 continue; 524 } 525 int val = cmd.ExecuteNonQuery(); 526 count += val; 527 if (myDe.EffentNextType == EffentNextType.ExcuteEffectRows && val == 0) 528 { 529 trans.Rollback(); 530 return 0; 531 } 532 cmd.Parameters.Clear(); 533 } 534 trans.Commit(); 535 return count; 536 } 537 catch 538 { 539 trans.Rollback(); 540 throw; 541 } 542 } 543 } 544 } 545 546 /// <summary> 547 /// 执行多条SQL语句,实现数据库事务。 548 /// </summary> 549 /// <param name="sqlStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param> 550 public static void ExecuteSqlTranWithIndentity(System.Collections.Generic.List<CommandInfo> sqlStringList) 551 { 552 using (var conn = new MySqlConnection(connectionString)) 553 { 554 conn.Open(); 555 using (var trans = conn.BeginTransaction()) 556 { 557 var cmd = new MySqlCommand(); 558 try 559 { 560 var indentity = 0; 561 //循环 562 foreach (var myDe in sqlStringList) 563 { 564 var cmdText = myDe.CommandText; 565 var cmdParms = (MySqlParameter[])myDe.Parameters; 566 foreach (var q in cmdParms) 567 { 568 if (q.Direction == ParameterDirection.InputOutput) 569 { 570 q.Value = indentity; 571 } 572 } 573 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 574 int val = cmd.ExecuteNonQuery(); 575 foreach (var q in cmdParms) 576 { 577 if (q.Direction == ParameterDirection.Output) 578 { 579 indentity = Convert.ToInt32(q.Value); 580 } 581 } 582 cmd.Parameters.Clear(); 583 } 584 trans.Commit(); 585 } 586 catch 587 { 588 trans.Rollback(); 589 throw; 590 } 591 } 592 } 593 } 594 595 /// <summary> 596 /// 执行多条SQL语句,实现数据库事务。 597 /// </summary> 598 /// <param name="sqlStringList">SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[])</param> 599 public static void ExecuteSqlTranWithIndentity(Hashtable sqlStringList) 600 { 601 using (var conn = new MySqlConnection(connectionString)) 602 { 603 conn.Open(); 604 using (var trans = conn.BeginTransaction()) 605 { 606 var cmd = new MySqlCommand(); 607 try 608 { 609 var indentity = 0; 610 //循环 611 foreach (DictionaryEntry myDe in sqlStringList) 612 { 613 string cmdText = myDe.Key.ToString(); 614 var cmdParms = (MySqlParameter[])myDe.Value; 615 foreach (MySqlParameter q in cmdParms) 616 { 617 if (q.Direction == ParameterDirection.InputOutput) 618 { 619 q.Value = indentity; 620 } 621 } 622 PrepareCommand(cmd, conn, trans, cmdText, cmdParms); 623 int val = cmd.ExecuteNonQuery(); 624 foreach (MySqlParameter q in cmdParms) 625 { 626 if (q.Direction == ParameterDirection.Output) 627 { 628 indentity = Convert.ToInt32(q.Value); 629 } 630 } 631 cmd.Parameters.Clear(); 632 } 633 trans.Commit(); 634 } 635 catch 636 { 637 trans.Rollback(); 638 throw; 639 } 640 } 641 } 642 } 643 644 /// <summary> 645 /// 执行一条计算查询结果语句,返回查询结果(object)。 646 /// </summary> 647 /// <param name="sqlString">计算查询结果语句</param> 648 /// <param name="cmdParms">参数化</param> 649 /// <returns>查询结果(object)</returns> 650 public static object GetSingle(string sqlString, params MySqlParameter[] cmdParms) 651 { 652 using (var connection = new MySqlConnection(connectionString)) 653 { 654 using (var cmd = new MySqlCommand()) 655 { 656 try 657 { 658 PrepareCommand(cmd, connection, null, sqlString, cmdParms); 659 var obj = cmd.ExecuteScalar(); 660 cmd.Parameters.Clear(); 661 if ((Equals(obj, null)) || (Equals(obj, DBNull.Value))) 662 { 663 return null; 664 } 665 else 666 { 667 return obj; 668 } 669 } 670 catch (MySqlException e) 671 { 672 throw e; 673 } 674 } 675 } 676 } 677 678 /// <summary> 679 /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close ) 680 /// </summary> 681 /// <param name="sqlString">查询语句</param> 682 /// <param name="cmdParms">参数化</param> 683 /// <returns>MySqlDataReader</returns> 684 public static MySqlDataReader ExecuteReader(string sqlString, params MySqlParameter[] cmdParms) 685 { 686 var connection = new MySqlConnection(connectionString); 687 var cmd = new MySqlCommand(); 688 try 689 { 690 PrepareCommand(cmd, connection, null, sqlString, cmdParms); 691 var myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 692 cmd.Parameters.Clear(); 693 return myReader; 694 } 695 catch (MySqlException e) 696 { 697 throw e; 698 } 699 // finally 700 // { 701 // cmd.Dispose(); 702 // connection.Close(); 703 // } 704 705 } 706 707 /// <summary> 708 /// 执行查询语句,返回DataSet 709 /// </summary> 710 /// <param name="sqlString">查询语句</param> 711 /// <param name="cmdParms">参数化</param> 712 /// <returns>DataSet</returns> 713 [Obsolete("不再使用该接口,请使用ExecuteReader(string sqlString, params MySqlParameter[] cmdParms)")] 714 public static DataSet Query(string sqlString, params MySqlParameter[] cmdParms) 715 { 716 using (var connection = new MySqlConnection(connectionString)) 717 { 718 var cmd = new MySqlCommand(); 719 PrepareCommand(cmd, connection, null, sqlString, cmdParms); 720 using (var da = new MySqlDataAdapter(cmd)) 721 { 722 var ds = new DataSet(); 723 try 724 { 725 da.Fill(ds, "ds"); 726 cmd.Parameters.Clear(); 727 } 728 catch (MySqlException ex) 729 { 730 throw new Exception(ex.Message); 731 } 732 return ds; 733 } 734 } 735 } 736 737 private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms) 738 { 739 if (conn.State != ConnectionState.Open) 740 conn.Open(); 741 cmd.Connection = conn; 742 cmd.CommandText = cmdText; 743 if (trans != null) 744 cmd.Transaction = trans; 745 cmd.CommandType = CommandType.Text;//cmdType; 746 if (cmdParms != null) 747 { 748 749 750 foreach (MySqlParameter parameter in cmdParms) 751 { 752 if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && 753 (parameter.Value == null)) 754 { 755 parameter.Value = DBNull.Value; 756 } 757 cmd.Parameters.Add(parameter); 758 } 759 } 760 } 761 762 #endregion 763 } 764 }
9、数据库数据转模型:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MvvmFuncationApp.DbHelper { /// <summary> /// 案件关联用户自定义数据 /// </summary> [Serializable] public partial class ParametersModel { public ParametersModel() { } #region Model private int _id; private string _DataID; private int _age; private string _name; private string _userdata; private string _extended1; private string _extended2; /// <summary> /// /// </summary> public int ID { set { _id = value; } get { return _id; } } /// <summary> /// 关联数据ID,DataType=1 案件id;DataType=2 图片id /// </summary> public string DataID { set { _DataID = value; } get { return _DataID; } } /// <summary> /// 数据类型。详见枚举值 /// </summary> public int Age { set { _age = value; } get { return _age; } } /// <summary> /// 数据名称 /// </summary> public string Name { set { _name = value; } get { return _name; } } /// <summary> /// 数据详细内容 /// </summary> public string UserData { set { _userdata = value; } get { return _userdata; } } /// <summary> /// /// </summary> public string Extended1 { set { _extended1 = value; } get { return _extended1; } } /// <summary> /// /// </summary> public string Extended2 { set { _extended2 = value; } get { return _extended2; } } #endregion Model } }
可以直接使用,亲测没问题。