日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法

發布時間:2025/3/14 编程问答 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?

? ?懶人小工具2:T4自動生成Model,Insert,Select,Delete以及導出Excel的方法

? ?github地址:https://github.com/Jimmey-Jiang/JWorkHelper

? ? ? 在開發的過程中,我們為了節約時間,往往會將大量重復機械的代碼封裝,考慮代碼的復用性,這樣我們可以節約很多時間來做別的事情。最近跳槽到一節webform開發的公司,主要是開發自己公司用的ERP。開始因為一些誘惑進來的,現在感覺其實有些后悔放棄了很好的學習ABP以及新知識點像一些很新穎的前端框架進這個公司。但現在跳槽也不是一個明智之舉,不好意思扯遠了,既來之則安之。最近寫了個小工具。主要針對webform開發過程中一些重復的代碼處理。

? ? ? ?github地址:https://github.com/Jimmey-Jiang/JWorkHelper
? ? ? ?其實沒有什么特別大的技術難度,其實webform開發貌似也沒有特別大的技術難度。

? ? 一、 ? 首先新建一個類庫WorkHelper。? ?

? ?然后新建類Program.cs,這里是作為主程序入口。

?

1 using System; 2 using System.Windows.Forms; 3 4 namespace DevLogHelper 5 { 6 static class Program 7 { 8 /// <summary> 9 /// 應用程序的主入口點。 10 /// </summary> 11 [STAThread] 12 static void Main() 13 { 14 Application.EnableVisualStyles(); 15 Application.SetCompatibleTextRenderingDefault(false); 16 Application.Run(new BaseSqlBuilder()); 17 } 18 19 } 20 } View Code

? ? ? 為Main()方法加上STAThread標簽。每次只能啟動一個窗口。
? ? ? new 一個BaseSqlBuilder實例,BaseSqlBuilder實例是什么呢,就是我們今天的主題了。

二、winform界面設計

? ? ? ? 其實界面特別簡單的。就是幾個label、多選框、容器。
看下代碼:

1 using System; 2 using System.Resources; 3 using System.Text; 4 using System.Windows.Forms; 5 using DevLogHelper.Resources; 6 7 namespace DevLogHelper 8 { 9 public partial class BaseSqlBuilder : Form 10 { 11 readonly ResourceManager _rm = new ResourceManager(typeof(ResourceDevCode)); 12 public BaseSqlBuilder() 13 { 14 InitializeComponent(); 15 } 16 17 private void BaseSqlBuilder_Load(object sender, EventArgs e) 18 { 19 20 } 21 /// <summary> 22 /// 生成 23 /// </summary> 24 /// <param name="sender"></param> 25 /// <param name="e"></param> 26 private void btnCreate_Click(object sender, EventArgs e) 27 { 28 string msg = _rm.GetString("BaseSqlTip"); 29 try 30 { 31 BaseSql.BaseSql sq = new BaseSql.BaseSql(); 32 StringBuilder str = sq.BuilderCode(txtInput.Text, cbIsModel, txt_TableName.Text, ckb_Model.Checked, ckb_Insert.Checked,ckb_Update.Checked,ckb_Select.Checked,ckb_Delete.Checked,ckbExcel.Checked); 33 txtResult.Text = str.ToString(); 34 Clipboard.SetDataObject(str.ToString()); 35 } 36 catch (Exception ex) 37 { 38 msg = ex.Message; 39 } 40 labTip.Text = msg; 41 } 42 43 } 44 } View Code

? ? ? ?窗體BaseSqlBuilder繼承自Form不必多說。ResourceManager是什么呢,ResourceManager就是一個資源文件,用于處理消息,或者路徑什么。后面補上圖。
新建一個BaseSql用于處理sql。把頁面上的控件消息傳遞過去。封裝一個數據的形式。

? ? 三、 資源文件以及解決方案結構。

?

? ?跟蹤BuilderCode到BaseSql類。

?四、BaseSql類。

? ? 首先是對控件傳遞過來值得檢查,參數是否為空等。

string Table = inputSql[2].ToString();if (string.IsNullOrWhiteSpace(inputCode)){inputCode = "select *from " + Table;}StringBuilder returnstr = new StringBuilder();StringBuilder strBuilder = new StringBuilder();DataSet ds = SqlHelper.Query(inputCode);DataRow dr = null;DataTable dt = new DataTable();

? ? ? ? ? ?這里如果傳遞過來的sql語句為空,我們會根據表名自動生成查詢SQL。然后根據ado.net 鏈接數據庫生成DataSet 、DataRow 、DataTable 等。當然這里得有SqlHelper。SqlHelper如果需要可以去我源碼上下載,稍后會放上源碼。主要是鏈接數據庫。執行SQL了。

? ? 五、實體

1 #region 封裝實體Model 2 3 #region 封裝實體Model 4 5 strBuilder.AppendLine(@" 6 public class Model 7 { 8 "); 9 for (int i = 0; i < dr.Table.Columns.Count; i++) 10 { 11 if (i == 0) 12 { 13 Id = dr.Table.Columns[0].ToString();//一般情況第一個字段是主鍵,當然如果第一個字段不是主鍵,那就需要修改了 14 } 15 string Type = dr.Table.Columns[i].DataType.ToString(); 16 switch (Type) 17 { 18 case "System.String": 19 strBuilder.AppendLine(" private string " + "_" + dr.Table.Columns[i] + ";"); 20 strBuilder.AppendLine(" public string " + dr.Table.Columns[i] + ""); 21 strBuilder.AppendLine(" {"); 22 strBuilder.AppendLine(" get { return " + "_" + dr.Table.Columns[i] + "; }"); 23 strBuilder.AppendLine(" set { " + "_" + dr.Table.Columns[i] + " = value; }"); 24 strBuilder.AppendLine(" }"); 25 break; 26 case "System.Int": 27 strBuilder.AppendLine(" private Int " + "_" + dr.Table.Columns[i] + ";"); 28 strBuilder.AppendLine(" public Int " + dr.Table.Columns[i] + ""); 29 strBuilder.AppendLine(" {"); 30 strBuilder.AppendLine(" get { return " + "_" + dr.Table.Columns[i] + "; }"); 31 strBuilder.AppendLine(" set { " + "_" + dr.Table.Columns[i] + " = value; }"); 32 strBuilder.AppendLine(" }"); 33 break; 34 case "System.Int32": 35 strBuilder.AppendLine(" private Int " + "_" + dr.Table.Columns[i] + ";"); 36 strBuilder.AppendLine(" public Int " + dr.Table.Columns[i] + ""); 37 strBuilder.AppendLine(" {"); 38 strBuilder.AppendLine(" get { return " + "_" + dr.Table.Columns[i] + "; }"); 39 strBuilder.AppendLine(" set { " + "_" + dr.Table.Columns[i] + " = value; }"); 40 strBuilder.AppendLine(" }"); 41 break; 42 case "System.DateTime": 43 strBuilder.AppendLine(" private System.DateTime " + "_" + dr.Table.Columns[i] + ";"); 44 strBuilder.AppendLine(" public System.DateTime " + dr.Table.Columns[i] + ""); 45 strBuilder.AppendLine(" {"); 46 strBuilder.AppendLine(" get { return " + "_" + dr.Table.Columns[i] + "; }"); 47 strBuilder.AppendLine(" set { " + "_" + dr.Table.Columns[i] + " = value; }"); 48 strBuilder.AppendLine(" }"); 49 break; 50 case "System.Decimal": 51 strBuilder.AppendLine(" private System.Decimal " + "_" + dr.Table.Columns[i] + ";"); 52 strBuilder.AppendLine(" public System.Decimal " + dr.Table.Columns[i] + ""); 53 strBuilder.AppendLine(" {"); 54 strBuilder.AppendLine(" get { return " + "_" + dr.Table.Columns[i] + "; }"); 55 strBuilder.AppendLine(" set { " + "_" + dr.Table.Columns[i] + " = value; }"); 56 strBuilder.AppendLine(" }"); 57 break; 58 default: 59 strBuilder.AppendLine(" private string " + "_" + dr.Table.Columns[i] + ";"); 60 strBuilder.AppendLine(" public string " + dr.Table.Columns[i] + ""); 61 strBuilder.AppendLine(" {"); 62 strBuilder.AppendLine(" get { return " + "_" + dr.Table.Columns[i] + "; }"); 63 strBuilder.AppendLine(" set { " + "_" + dr.Table.Columns[i] + " = value; }"); 64 strBuilder.AppendLine(" }"); 65 break; 66 } 67 } 68 strBuilder.AppendLine(@" 69 } 70 "); 71 72 #endregion Model部分

?

? ? ? ? 首先我們是生成Model。有了Model才有下面的增刪改查的方法。
? ? ? ? 其實也很簡單,dr.Table.Columns[i].DataType.ToString(),我們就是根據DataRow循環table列,判斷字段類型,然后根據對應的字段類型封裝成model.單選框默認勾選的,這里先去掉勾選,輸入表名,點擊生成,然后和數據庫表對應,看一下效果。

? ? ? ? ? ?Model 是最實用的,就算以后我們在用mvc或者ABP等其他框架底層用codefirst等orm框架的時候,我們也可以用這種方式生成Model.

?六、生成insert方法

1 public bool InsertAgreement_YNSHigh_Authorize(Model model) 2 { 3 4 string strSql = @" 5 INSERT Agreement_YNSHigh_Authorize( 6 AYA_Code, 7 AYHA_Code, 8 Ctg_ID, 9 HospitalCode, 10 HospitalName, 11 HospitalGrad, 12 HospitalRegionID, 13 DevelopmentLimitTime, 14 EffectiveTime, 15 MarketingManagementFee, 16 BidPrice, 17 DeliveryCode, 18 DeliveryName, 19 AgreeAdjuestType, 20 ChangeContent, 21 Status, 22 DeliveryPrice, 23 BasePrice, 24 CategoryCommodityName, 25 CategorySystemName, 26 CategoryCommName, 27 CategorySpec, 28 Formulation, 29 BusinessModel) 30 VALUES ( 31 @AYA_Code, 32 @AYHA_Code, 33 @Ctg_ID, 34 @HospitalCode, 35 @HospitalName, 36 @HospitalGrad, 37 @HospitalRegionID, 38 @DevelopmentLimitTime, 39 @EffectiveTime, 40 @MarketingManagementFee, 41 @BidPrice, 42 @DeliveryCode, 43 @DeliveryName, 44 @AgreeAdjuestType, 45 @ChangeContent, 46 @Status, 47 @DeliveryPrice, 48 @BasePrice, 49 @CategoryCommodityName, 50 @CategorySystemName, 51 @CategoryCommName, 52 @CategorySpec, 53 @Formulation, 54 @BusinessModel) 55 56 "; 57 SqlParameter[] parameters = new SqlParameter[] 58 { 59 new SqlParameter("@AYA_Code", SqlDbType.NVarChar, 255), 60 new SqlParameter("@AYHA_Code", SqlDbType.NVarChar, 255), 61 new SqlParameter("@Ctg_ID", SqlDbType.NVarChar, 255), 62 new SqlParameter("@HospitalCode", SqlDbType.NVarChar, 255), 63 new SqlParameter("@HospitalName", SqlDbType.NVarChar, 255), 64 new SqlParameter("@HospitalGrad", SqlDbType.NVarChar, 255), 65 new SqlParameter("@HospitalRegionID", SqlDbType.NVarChar, 255), 66 new SqlParameter("@DevelopmentLimitTime", SqlDbType.DateTime), 67 new SqlParameter("@EffectiveTime", SqlDbType.DateTime), 68 new SqlParameter("@MarketingManagementFee", SqlDbType.Decimal), 69 new SqlParameter("@BidPrice", SqlDbType.Decimal), 70 new SqlParameter("@DeliveryCode", SqlDbType.NVarChar, 255), 71 new SqlParameter("@DeliveryName", SqlDbType.NVarChar, 255), 72 new SqlParameter("@AgreeAdjuestType", SqlDbType.NVarChar, 255), 73 new SqlParameter("@ChangeContent", SqlDbType.NVarChar, 255), 74 new SqlParameter("@Status", SqlDbType.NVarChar, 255), 75 new SqlParameter("@DeliveryPrice", SqlDbType.Decimal), 76 new SqlParameter("@BasePrice", SqlDbType.Decimal), 77 new SqlParameter("@CategoryCommodityName", SqlDbType.NVarChar, 255), 78 new SqlParameter("@CategorySystemName", SqlDbType.NVarChar, 255), 79 new SqlParameter("@CategoryCommName", SqlDbType.NVarChar, 255), 80 new SqlParameter("@CategorySpec", SqlDbType.NVarChar, 255), 81 new SqlParameter("@Formulation", SqlDbType.NVarChar, 255), 82 new SqlParameter("@BusinessModel", SqlDbType.NVarChar, 255), 83 }; 84 parameters[0].Value = model.AYA_Code; 85 parameters[1].Value = model.AYHA_Code; 86 parameters[2].Value = model.Ctg_ID; 87 parameters[3].Value = model.HospitalCode; 88 parameters[4].Value = model.HospitalName; 89 parameters[5].Value = model.HospitalGrad; 90 parameters[6].Value = model.HospitalRegionID; 91 parameters[7].Value = model.DevelopmentLimitTime; 92 parameters[8].Value = model.EffectiveTime; 93 parameters[9].Value = model.MarketingManagementFee; 94 parameters[10].Value = model.BidPrice; 95 parameters[11].Value = model.DeliveryCode; 96 parameters[12].Value = model.DeliveryName; 97 parameters[13].Value = model.AgreeAdjuestType; 98 parameters[14].Value = model.ChangeContent; 99 parameters[15].Value = model.Status; 100 parameters[16].Value = model.DeliveryPrice; 101 parameters[17].Value = model.BasePrice; 102 parameters[18].Value = model.CategoryCommodityName; 103 parameters[19].Value = model.CategorySystemName; 104 parameters[20].Value = model.CategoryCommName; 105 parameters[21].Value = model.CategorySpec; 106 parameters[22].Value = model.Formulation; 107 parameters[23].Value = model.BusinessModel; 108 109 using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString)) 110 { 111 conn.Open(); 112 using (SqlTransaction trans = conn.BeginTransaction()) 113 { 114 try 115 { 116 int i = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, strSql, parameters); 117 if (i > 0) 118 { 119 trans.Commit(); 120 return i > 0; 121 } 122 else 123 { 124 trans.Rollback(); 125 return false; 126 } 127 } 128 catch (System.Exception e) 129 { 130 return false; 131 trans.Rollback(); 132 throw e; 133 } 134 } 135 } 136 137 } View Code

?

? ? ? ?平時我們在新增數據的時候,就以Agreement_YNSHigh_Authorize為例,一般都是這樣超做的,加上事務,參數化傳過來的參數,這樣寫起來也非常麻煩。我們這里了也對INSERT 做一下封裝。

1 #region 生成插入Insert方法 2 3 #region 生成插入sql語句 4 5 StringBuilder strTmp = new StringBuilder(); 6 try 7 { 8 for (int i = 0; i < dr.Table.Columns.Count; i++)//生成insert 9 { 10 if (i == 0) 11 { 12 strTmp.AppendLine(" INSERT " + Table + "("); 13 } 14 if (i == dr.Table.Columns.Count - 1) 15 { 16 strTmp.AppendLine(" " + dr.Table.Columns[i].ToString() + ")"); 17 } 18 else 19 { 20 strTmp.AppendLine(" " + dr.Table.Columns[i].ToString() + ","); 21 } 22 } 23 24 for (int i = 0; i < dr.Table.Columns.Count; i++) 25 { 26 if (i == 0) 27 { 28 strTmp.AppendLine(" VALUES " + "("); 29 } 30 if (i == dr.Table.Columns.Count - 1) 31 { 32 strTmp.AppendLine(" @" + dr.Table.Columns[i].ToString() + ")"); 33 } 34 else 35 { 36 strTmp.AppendLine(" @" + dr.Table.Columns[i].ToString() + ","); 37 } 38 39 } 40 } 41 catch (System.Exception ex) 42 { 43 44 throw ex; 45 } 46 47 #endregion 48 49 50 51 52 53 strBuilder.AppendLine(" public bool Insert" + Table + "(Model model)"); 54 strBuilder.AppendLine(@" { 55 "); 56 strBuilder.AppendLine(" string strSql = @\""); 57 strBuilder.AppendLine(strTmp.ToString()); 58 strBuilder.AppendLine(" \";"); 59 60 strBuilder.AppendLine(@" SqlParameter[] parameters = new SqlParameter[] 61 {"); 62 //參數類型 63 for (int i = 0; i < dr.Table.Columns.Count; i++) 64 { 65 string Type = dr.Table.Columns[i].DataType.ToString(); 66 switch (Type) 67 { 68 case "System.String": 69 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.NVarChar, 255),"); 70 break; 71 case "System.Int": 72 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.Int),"); 73 break; 74 case "System.Int32": 75 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.Int),"); 76 break; 77 case "System.DateTime": 78 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.DateTime),"); 79 break; 80 case "System.Decimal": 81 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.Decimal),"); 82 break; 83 default: 84 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.NVarChar, 255),"); 85 break; 86 } 87 } 88 strBuilder.AppendLine(@" };"); 89 90 for (int i = 0; i < dr.Table.Columns.Count; i++) 91 { 92 strBuilder.AppendLine(" parameters[" + i + "].Value =" + "model." + dr.Table.Columns[i] + ";"); 93 } 94 95 strBuilder.AppendLine(@" 96 using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString)) 97 { 98 conn.Open(); 99 using (SqlTransaction trans = conn.BeginTransaction()) 100 { 101 try 102 { 103 int i = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, strSql, parameters); 104 if (i > 0) 105 { 106 trans.Commit(); 107 return i > 0; 108 } 109 else 110 { 111 trans.Rollback(); 112 return false; 113 } 114 } 115 catch (System.Exception e) 116 { 117 return false; 118 trans.Rollback(); 119 throw e; 120 } 121 } 122 } 123 "); 124 strBuilder.AppendLine("}"); 125 126 #endregion View Code

?

? ? ? ?首先是根據sql生成字段和參數字段。這都是很繁瑣的工作,而且不能出錯。也是對DataRow table的循環和封裝處理。需要注意一下轉義字符處理,注意對事務的處理。另外update,select,delete的處理方式與insert類似,不在累述,放上代碼。

? ?七、update,select,delete

1 if ((bool)inputSql[4]) 2 { 3 returnstr.AppendLine(strBuilder.ToString()); 4 } 5 strBuilder = new StringBuilder(); 6 #region 生成更新Update 方法 7 8 #region 生成更新Update sql語句 9 10 strTmp = new StringBuilder(); //sql 11 try 12 { 13 for (int i = 0; i < dr.Table.Columns.Count; i++)//生成Update 14 { 15 if (i == 0) 16 { 17 strTmp.AppendLine(" Update " + Table + " SET "); 18 } 19 if (i == dr.Table.Columns.Count - 1) 20 { 21 22 23 strTmp.AppendLine(" " + dr.Table.Columns[i].ToString() + "=" + "@" + dr.Table.Columns[i].ToString() + " where " + Id + "=" + "@" + Id + " "); 24 } 25 else 26 { 27 strTmp.AppendLine(" " + dr.Table.Columns[i].ToString() + "=" + "@" + dr.Table.Columns[i].ToString() + ","); 28 } 29 } 30 } 31 catch (System.Exception ex) 32 { 33 34 throw ex; 35 } 36 37 #endregion 38 39 40 41 42 strBuilder.AppendLine(" public bool Update" + Table + "ById(Model model)"); 43 strBuilder.AppendLine(@" { 44 "); 45 strBuilder.AppendLine(" string strSql = @\""); 46 strBuilder.AppendLine(strTmp.ToString()); 47 strBuilder.AppendLine(" \";"); 48 49 strBuilder.AppendLine(@" SqlParameter[] parameters = new SqlParameter[] 50 {"); 51 //參數類型 52 for (int i = 0; i < dr.Table.Columns.Count; i++) 53 { 54 string Type = dr.Table.Columns[i].DataType.ToString(); 55 switch (Type) 56 { 57 case "System.String": 58 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.NVarChar, 255),"); 59 break; 60 case "System.Int": 61 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.Int),"); 62 break; 63 case "System.DateTime": 64 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.DateTime),"); 65 break; 66 case "System.Decimal": 67 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.Decimal),"); 68 break; 69 default: 70 strBuilder.AppendLine(" new SqlParameter(\"" + "@" + dr.Table.Columns[i] + "\", SqlDbType.NVarChar, 255),"); 71 break; 72 } 73 } 74 strBuilder.AppendLine(@" };"); 75 76 for (int i = 0; i < dr.Table.Columns.Count; i++) 77 { 78 strBuilder.AppendLine(" parameters[" + i + "].Value =" + "model." + dr.Table.Columns[i] + ";"); 79 } 80 81 strBuilder.AppendLine(@" 82 using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString)) 83 { 84 conn.Open(); 85 using (SqlTransaction trans = conn.BeginTransaction()) 86 { 87 try 88 { 89 int i = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, strSql, parameters); 90 if (i > 0) 91 { 92 trans.Commit(); 93 return i > 0; 94 } 95 else 96 { 97 trans.Rollback(); 98 return false; 99 } 100 } 101 catch (System.Exception e) 102 { 103 return false; 104 trans.Rollback(); 105 throw e; 106 } 107 } 108 } 109 "); 110 strBuilder.AppendLine("}"); 111 112 #endregion 113 114 if ((bool)inputSql[5]) 115 { 116 returnstr.AppendLine(strBuilder.ToString()); 117 } 118 strBuilder = new StringBuilder(); 119 #region 生成查詢方法 120 121 strBuilder.AppendLine(" public DataTable GetDataBy" + Table + "(Model model , int pageNo, int pageSize, ref int iRecordCount)"); 122 strBuilder.AppendLine(@" { "); 123 strTmp = new StringBuilder(); 124 strTmp.AppendLine("WITH temp AS ( SELECT rn = ROW_NUMBER() OVER (ORDER BY " + Id + " desc), *FROM " + Table + " WHERE 1=1 {0} )"); 125 strTmp.AppendLine("SELECT *,rc=(select count(1) from temp) FROM temp WHERE rn BETWEEN {1} AND {2}"); 126 127 strBuilder.AppendLine(" List<SqlParameter> parameters = new List<SqlParameter>();"); 128 strBuilder.AppendLine(" StringBuilder sqlWhere = new StringBuilder();"); 129 for (int i = 0; i < dr.Table.Columns.Count; i++) 130 { 131 strBuilder.AppendLine(" if (!string.IsNullOrEmpty(model." + dr.Table.Columns[i].ToString() + ".ToString())) "); 132 strBuilder.AppendLine(" {"); 133 strBuilder.AppendLine(" sqlWhere.Append(\" AND " + dr.Table.Columns[i].ToString() + "=@" + dr.Table.Columns[i].ToString() + "\");"); 134 strBuilder.AppendLine(" parameters.Add(new SqlParameter(\"@" + dr.Table.Columns[i].ToString() + "\", SqlDbType.NVarChar, 255) { SqlValue = model." + dr.Table.Columns[i].ToString() + " });"); 135 strBuilder.AppendLine(" } "); 136 } 137 strBuilder.AppendLine(" string strSql = string.Format(@\""); 138 strBuilder.AppendLine(strTmp.ToString()); 139 strBuilder.AppendLine(" \" ,sqlWhere.ToString(), (pageNo - 1) * pageSize + 1, pageNo * pageSize);"); 140 141 strBuilder.AppendLine(@" 142 143 DataTable dt = SqlHelper.Query(strSql, parameters.ToArray()).Tables[0]; 144 if (dt!=null) 145 {"); 146 strBuilder.AppendLine(" iRecordCount = int.Parse(dt.Rows[0][\"" + "rc" + "\"].ToString());"); 147 strBuilder.AppendLine(@" return dt; 148 } 149 else 150 { 151 iRecordCount = 0; 152 return null; 153 } 154 } "); 155 156 #endregion 157 158 if ((bool)inputSql[6]) 159 { 160 returnstr.AppendLine(strBuilder.ToString()); 161 } 162 strBuilder = new StringBuilder(); 163 #region 生成刪除的方法 164 165 strBuilder.AppendLine(" public bool Delete" + Table + "(string " + Id + ")"); 166 strBuilder.AppendLine(" {"); 167 strBuilder.AppendLine(" List<SqlParameter> parameters = new List<SqlParameter>();"); 168 strTmp = new StringBuilder(); 169 strTmp.AppendLine("DELETE " + Table + " WHERE " + Id + "=" + Id + ""); 170 strBuilder.AppendLine(" string strSql = string.Format(@\""); 171 strBuilder.AppendLine(strTmp.ToString()); 172 strBuilder.AppendLine(" \";"); 173 strBuilder.AppendLine(" int rowAffect =SqlHelper.Query(strSql, parameters.ToArray()).ToInt();;"); 174 strBuilder.AppendLine(" return rowAffect > 0 ? true : false;"); 175 strBuilder.AppendLine(" }"); 176 177 #endregion 178 179 if ((bool)inputSql[7]) 180 { 181 returnstr.AppendLine(strBuilder.ToString()); 182 } 183 strBuilder = new StringBuilder(); View Code

? ? ? ?if ((bool)inputSql[7])主要是對控件值得判斷,是否勾選上,也就是是否需要生成改方法。導出的方法主要在公司已經封裝好的代碼上提取重復代碼的,平時我們在做功能的時候只需要寫這些代碼即可。

八,導出Excel方法及其他

1 strBuilder.AppendLine(@" protected void btnExcel_Click(object sender, System.EventArgs e) 2 { 3 int intPageNo = 1; 4 int intPageSize = 65535; 5 int recordCount = 0; 6 DataTable dt = GetUnAuthorizeAgreePassedDT( Model model intPageNo, intPageSize, out recordCount); "); 7 strBuilder.AppendLine(" string strFileName = \"" + "導出Excel" + "\" + System.DateTime.Now.ToString(\" " + "yyyyMMddHHmmss" + "\");"); 8 strBuilder.AppendLine(@" ExcelUtility excelUtil = new ExcelUtility(this, strFileName); 9 List<ExcelHeader> headerS = new List<ExcelHeader>() { "); 10 11 for (int i = 0; i < dr.Table.Columns.Count; i++) 12 { 13 string Type = dr.Table.Columns[i].DataType.ToString(); 14 switch (Type) 15 { 16 case "System.DateTime": 17 strBuilder.AppendLine(" new ExcelHeader() { Name = \"字段名稱自行補全\", DataType = EnumColumnDataType.日期, Width = 15 },"); 18 break; 19 default: 20 strBuilder.AppendLine(" new ExcelHeader() { Name = \"字段名稱自行補全\", DataType = EnumColumnDataType.文本, Width = 15 },"); 21 break; 22 } 23 } 24 strBuilder.AppendLine(@" }; 25 excelUtil.CreateHeader(headerS); 26 if (dt != null && dt.Rows.Count > 0) 27 { 28 foreach (DataRow dr in dt.Rows) 29 { 30 List<string> dataVals = new List<string>() { "); 31 32 33 for (int i = 0; i < dr.Table.Columns.Count; i++) 34 { 35 strBuilder.AppendLine(" dr[\" " + dr.Table.Columns[i] + "\"].ToString() "); 36 } 37 38 strBuilder.AppendLine(@" }; 39 excelUtil.CreateItemRow(dataVals); 40 } 41 } 42 excelUtil.Export(); 43 } 44 "); 45 #endregion View Code

?

?

?

? ?另外做了幾個功能,但是不是很好用,感興趣的朋友可以去下載源碼看一下。
github地址:https://github.com/Jimmey-Jiang/JWorkHelper

然后看一下生成的代碼展示:

1 public class Model 2 { 3 4 private string _Team_code; 5 public string Team_code 6 { 7 get { return _Team_code; } 8 set { _Team_code = value; } 9 } 10 private string _Team_name; 11 public string Team_name 12 { 13 get { return _Team_name; } 14 set { _Team_name = value; } 15 } 16 private string _Team_status; 17 public string Team_status 18 { 19 get { return _Team_status; } 20 set { _Team_status = value; } 21 } 22 private string _Team_user; 23 public string Team_user 24 { 25 get { return _Team_user; } 26 set { _Team_user = value; } 27 } 28 private System.DateTime _Team_date; 29 public System.DateTime Team_date 30 { 31 get { return _Team_date; } 32 set { _Team_date = value; } 33 } 34 35 } 36 37 38 public bool InsertTeam_(Model model) 39 { 40 41 string strSql = @" 42 INSERT Team_( 43 Team_code, 44 Team_name, 45 Team_status, 46 Team_user, 47 Team_date) 48 VALUES ( 49 @Team_code, 50 @Team_name, 51 @Team_status, 52 @Team_user, 53 @Team_date) 54 55 "; 56 SqlParameter[] parameters = new SqlParameter[] 57 { 58 new SqlParameter("@Team_code", SqlDbType.NVarChar, 255), 59 new SqlParameter("@Team_name", SqlDbType.NVarChar, 255), 60 new SqlParameter("@Team_status", SqlDbType.NVarChar, 255), 61 new SqlParameter("@Team_user", SqlDbType.NVarChar, 255), 62 new SqlParameter("@Team_date", SqlDbType.DateTime), 63 }; 64 parameters[0].Value = model.Team_code; 65 parameters[1].Value = model.Team_name; 66 parameters[2].Value = model.Team_status; 67 parameters[3].Value = model.Team_user; 68 parameters[4].Value = model.Team_date; 69 70 using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString)) 71 { 72 conn.Open(); 73 using (SqlTransaction trans = conn.BeginTransaction()) 74 { 75 try 76 { 77 int i = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, strSql, parameters); 78 if (i > 0) 79 { 80 trans.Commit(); 81 return i > 0; 82 } 83 else 84 { 85 trans.Rollback(); 86 return false; 87 } 88 } 89 catch (System.Exception e) 90 { 91 return false; 92 trans.Rollback(); 93 throw e; 94 } 95 } 96 } 97 98 } 99 100 public bool UpdateTeam_ById(Model model) 101 { 102 103 string strSql = @" 104 Update Team_ SET 105 Team_code=@Team_code, 106 Team_name=@Team_name, 107 Team_status=@Team_status, 108 Team_user=@Team_user, 109 Team_date=@Team_date where Team_code=@Team_code 110 111 "; 112 SqlParameter[] parameters = new SqlParameter[] 113 { 114 new SqlParameter("@Team_code", SqlDbType.NVarChar, 255), 115 new SqlParameter("@Team_name", SqlDbType.NVarChar, 255), 116 new SqlParameter("@Team_status", SqlDbType.NVarChar, 255), 117 new SqlParameter("@Team_user", SqlDbType.NVarChar, 255), 118 new SqlParameter("@Team_date", SqlDbType.DateTime), 119 }; 120 parameters[0].Value = model.Team_code; 121 parameters[1].Value = model.Team_name; 122 parameters[2].Value = model.Team_status; 123 parameters[3].Value = model.Team_user; 124 parameters[4].Value = model.Team_date; 125 126 using (SqlConnection conn = new SqlConnection(SqlHelper.ConnectionString)) 127 { 128 conn.Open(); 129 using (SqlTransaction trans = conn.BeginTransaction()) 130 { 131 try 132 { 133 int i = SqlHelper.ExecuteNonQuery(trans, CommandType.Text, strSql, parameters); 134 if (i > 0) 135 { 136 trans.Commit(); 137 return i > 0; 138 } 139 else 140 { 141 trans.Rollback(); 142 return false; 143 } 144 } 145 catch (System.Exception e) 146 { 147 return false; 148 trans.Rollback(); 149 throw e; 150 } 151 } 152 } 153 154 } 155 156 public DataTable GetDataByTeam_(Model model, int pageNo, int pageSize, ref int iRecordCount) 157 { 158 List<SqlParameter> parameters = new List<SqlParameter>(); 159 StringBuilder sqlWhere = new StringBuilder(); 160 if (!string.IsNullOrEmpty(model.Team_code.ToString())) 161 { 162 sqlWhere.Append(" AND Team_code=@Team_code"); 163 parameters.Add(new SqlParameter("@Team_code", SqlDbType.NVarChar, 255) { SqlValue = model.Team_code }); 164 } 165 if (!string.IsNullOrEmpty(model.Team_name.ToString())) 166 { 167 sqlWhere.Append(" AND Team_name=@Team_name"); 168 parameters.Add(new SqlParameter("@Team_name", SqlDbType.NVarChar, 255) { SqlValue = model.Team_name }); 169 } 170 if (!string.IsNullOrEmpty(model.Team_status.ToString())) 171 { 172 sqlWhere.Append(" AND Team_status=@Team_status"); 173 parameters.Add(new SqlParameter("@Team_status", SqlDbType.NVarChar, 255) { SqlValue = model.Team_status }); 174 } 175 if (!string.IsNullOrEmpty(model.Team_user.ToString())) 176 { 177 sqlWhere.Append(" AND Team_user=@Team_user"); 178 parameters.Add(new SqlParameter("@Team_user", SqlDbType.NVarChar, 255) { SqlValue = model.Team_user }); 179 } 180 if (!string.IsNullOrEmpty(model.Team_date.ToString())) 181 { 182 sqlWhere.Append(" AND Team_date=@Team_date"); 183 parameters.Add(new SqlParameter("@Team_date", SqlDbType.NVarChar, 255) { SqlValue = model.Team_date }); 184 } 185 string strSql = string.Format(@" 186 WITH temp AS ( SELECT rn = ROW_NUMBER() OVER (ORDER BY Team_code desc), *FROM Team_ WHERE 1=1 {0} ) 187 SELECT *,rc=(select count(1) from temp) FROM temp WHERE rn BETWEEN {1} AND {2} 188 189 ", sqlWhere.ToString(), (pageNo - 1) * pageSize + 1, pageNo * pageSize); 190 191 192 DataTable dt = SqlHelper.Query(strSql, parameters.ToArray()).Tables[0]; 193 if (dt != null) 194 { 195 iRecordCount = int.Parse(dt.Rows[0]["rc"].ToString()); 196 return dt; 197 } 198 else 199 { 200 iRecordCount = 0; 201 return null; 202 } 203 } 204 205 public bool DeleteTeam_(string Team_code) 206 { 207 List<SqlParameter> parameters = new List<SqlParameter>(); 208 string strSql = string.Format(@" 209 DELETE Team_ WHERE Team_code=Team_code 210 211 "; 212 int rowAffect =SqlHelper.Query(strSql, parameters.ToArray()).ToInt();; 213 return rowAffect > 0 ? true : false; 214 } 215 216 protected void btnExcel_Click(object sender, System.EventArgs e) 217 { 218 int intPageNo = 1; 219 int intPageSize = 65535; 220 int recordCount = 0; 221 DataTable dt = GetUnAuthorizeAgreePassedDT( Model model intPageNo, intPageSize, out recordCount); 222 string strFileName = "導出Excel" + System.DateTime.Now.ToString(" yyyyMMddHHmmss"); 223 ExcelUtility excelUtil = new ExcelUtility(this, strFileName); 224 List<ExcelHeader> headerS = new List<ExcelHeader>() { 225 new ExcelHeader() { Name = "字段名稱自行補全", DataType = EnumColumnDataType.文本, Width = 15 }, 226 new ExcelHeader() { Name = "字段名稱自行補全", DataType = EnumColumnDataType.文本, Width = 15 }, 227 new ExcelHeader() { Name = "字段名稱自行補全", DataType = EnumColumnDataType.文本, Width = 15 }, 228 new ExcelHeader() { Name = "字段名稱自行補全", DataType = EnumColumnDataType.文本, Width = 15 }, 229 new ExcelHeader() { Name = "字段名稱自行補全", DataType = EnumColumnDataType.日期, Width = 15 }, 230 }; 231 excelUtil.CreateHeader(headerS); 232 if (dt != null && dt.Rows.Count > 0) 233 { 234 foreach (DataRow dr in dt.Rows) 235 { 236 List<string> dataVals = new List<string>() { 237 dr[" Team_code"].ToString() 238 dr[" Team_name"].ToString() 239 dr[" Team_status"].ToString() 240 dr[" Team_user"].ToString() 241 dr[" Team_date"].ToString() 242 }; 243 excelUtil.CreateItemRow(dataVals); 244 } 245 } 246 excelUtil.Export(); 247 } View Code

? 有人說這個版本太麻煩,我就做了T4版本

懶人小工具:T4自動生成Model,Insert,Select,Delete以及導出Excel的方法

?

轉載于:https://www.cnblogs.com/anyushengcms/p/7552371.html

總結

以上是生活随笔為你收集整理的懒人小工具1:winform自动生成Model,Insert,Select,Delete以及导出Excel的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

亚洲欧美视频网站 | 欧美性色xo影院 | 国产成人av电影 | 一区二区 不卡 | 精油按摩av | 911国产在线观看 | 日韩在线视频观看 | 国产精品一二三 | 99成人免费视频 | 99精品视频网站 | 美女网站免费福利视频 | 天天综合91 | 日韩av成人免费看 | 中文字幕视频 | 国产aaa毛片 | 欧美日韩高清在线观看 | 特级毛片在线免费观看 | 91看片在线观看 | 伊人久久在线观看 | 夜夜躁狠狠躁日日躁 | 天天干天天操天天爱 | 精品福利在线观看 | 免费在线黄网 | 国产原创在线 | 成人在线免费视频观看 | 中文字幕视频在线播放 | 在线免费中文字幕 | 精品在线看 | 狠狠狠狠狠干 | 国产精品久久毛片 | 日韩欧美精品在线观看 | 成年人免费看av | 国产精品国产三级国产aⅴ无密码 | 国产黄色在线 | 日韩特级黄色片 | 久久久亚洲网站 | 久久免费一| 色婷婷激情综合 | 狠狠干网 | 亚洲成年人在线播放 | 久久久久久久久久久久久国产精品 | 久久久久久毛片精品免费不卡 | 精品一二三四视频 | 17婷婷久久www | 成人久久毛片 | 久久精品99久久久久久 | 国产精品午夜免费福利视频 | 97精品国产97久久久久久粉红 | 又黄又爽又无遮挡的视频 | 伊人五月天婷婷 | 日韩精品一区二区三区免费观看视频 | 91麻豆网 | 欧美激情第十页 | 欧美九九九 | 亚洲美女精品区人人人人 | 欧美亚洲久久 | 日韩特级片 | 亚州中文av| 久草在线视频看看 | 国产福利一区在线观看 | 国产一区私人高清影院 | 99久久精品免费看国产四区 | 色网站在线观看 | 亚洲一区二区视频 | 不卡的av在线 | 久久精品网站免费观看 | 丁香激情网 | 欧洲精品一区二区 | 人人草在线观看 | 亚洲精品字幕 | 国内精品小视频 | 国产成人精品网站 | 国产成人在线综合 | 国产中文字幕一区二区三区 | 在线最新av | 99久久婷婷 | 久久国产精品一区二区 | 伊人精品影院 | 五月婷香蕉久色在线看 | 高清av中文在线字幕观看1 | 久久综合九色综合97婷婷女人 | 国产精品 国内视频 | 久久综合婷婷国产二区高清 | 欧美视频在线二区 | 99在线观看精品 | 成人黄色片免费看 | av久久在线 | 欧美精品久久久久久久久免 | 久久久精品一区二区 | 久久激情婷婷 | 久久综合影视 | 日日天天干 | 国产视频综合在线 | 人人操日日干 | 久久久精品免费观看 | 国产一区二区三区四区在线 | 亚洲精品国偷自产在线99热 | 国产麻豆精品一区 | 亚洲日韩中文字幕 | 亚洲国产精品人久久电影 | 欧美午夜性生活 | 91成人精品一区在线播放 | 日韩区欠美精品av视频 | 六月丁香久久 | 日日夜夜网 | 91精品国产一区二区三区 | 玖玖玖精品 | 久久久久久久久久免费 | 欧美精品一区二区在线播放 | 精品一二三区 | 成人免费91 | 天天操天天怕 | 婷婷国产v亚洲v欧美久久 | 99久久婷婷国产综合亚洲 | 欧美日韩国产二区三区 | 欧美日韩视频观看 | 九九九九九国产 | 精品国产伦一区二区三区观看体验 | 亚州国产视频 | 国产精品亚洲人在线观看 | 激情av在线资源 | 91资源在线免费观看 | 午夜黄色影院 | 91麻豆精品国产91久久久无需广告 | 日韩一区二区三区在线看 | 92国产精品久久久久首页 | 久久国语露脸国产精品电影 | 97超级碰碰碰视频在线观看 | 中文字幕在线视频一区二区三区 | 亚洲97在线 | 久久99欧美 | 色综合中文综合网 | 丁香婷婷社区 | 亚洲精品激情 | 精品国产一二三四区 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 国产99自拍| 69夜色精品国产69乱 | 丁香六月天婷婷 | 国产99久久久国产精品免费看 | 欧美黄色高清 | 91精品在线播放 | 亚洲va综合va国产va中文 | 公开超碰在线 | 中文字幕免费成人 | 99精品国产亚洲 | 最新日韩在线观看视频 | 欧洲视频一区 | 午夜精品av在线 | 国内久久看 | 91热视频| 国产综合在线观看视频 | 国产经典av| 亚洲区另类春色综合小说校园片 | 国产精品18久久久久久久久久久久 | 国产午夜一区二区 | 在线免费观看黄色 | 96看片 | 九九热在线精品 | 狠狠色香婷婷久久亚洲精品 | 免费在线观看国产精品 | 国产精品对白一区二区三区 | 久久精品网站免费观看 | 欧美在线视频一区二区 | 久久情侣偷拍 | 九九99| 在线视频区 | 日韩免费在线观看视频 | 免费日韩视 | 国产精品99在线播放 | 免费在线观看一区 | 欧美analxxxx| 91视频大全 | 热99在线视频 | 99色国产 | www.久久婷婷 | 午夜精品成人一区二区三区 | 综合激情网... | 中文字幕在线观看免费高清完整版 | 婷婷在线五月 | 91片黄在线观看动漫 | 色婷婷免费 | 四虎影视8848aamm| 麻豆91小视频 | 国产美女网 | 在线免费观看av网站 | 高清国产在线一区 | 欧美精品v国产精品 | 日韩动态视频 | 中文网丁香综合网 | .国产精品成人自产拍在线观看6 | 国产伦精品一区二区三区… | 波多野结衣资源 | 精品免费一区二区三区 | 中文字幕精品一区二区精品 | 97视频网址 | 伊人电影天堂 | 国产三级视频在线 | 国语麻豆 | 麻豆影视在线播放 | 五月婷激情 | 丁香花中文在线免费观看 | 亚洲精品国产欧美在线观看 | 日韩在线高清 | 色婷婷av在线 | 亚洲精品色| 91精品国产综合久久婷婷香蕉 | 精品久久电影 | 一区二区视频欧美 | 成人h在线播放 | 色综合久久久久 | 韩国精品视频在线观看 | 久久精品久久久久电影 | 综合色亚洲 | 国产亚洲高清视频 | 7799av| 99国产成+人+综合+亚洲 欧美 | 国产黄影院色大全免费 | 国产精品热视频 | 成年人免费在线观看网站 | 免费毛片aaaaaa | 国产视频一区二区在线 | 免费看的黄网站软件 | 黄色影院在线免费观看 | 欧美一级爽 | 日韩视频精品在线 | 欧洲在线免费视频 | 亚洲欧美精品一区二区 | 丁香婷婷综合激情五月色 | av在线进入 | 久久久综合九色合综国产精品 | 婷婷五天天在线视频 | 国产一级黄 | 国产精品一区二区果冻传媒 | 久热免费在线观看 | 午夜精品一区二区三区免费 | 毛片一二区 | 久久久久久蜜桃一区二区 | 91视频xxxx| 毛片网在线 | 精品中文字幕视频 | 亚洲a在线观看 | 久久精品99国产国产精 | 精品国产乱码久久久久 | 国模一区二区三区四区 | 中文字幕人成乱码在线观看 | 日韩三级精品 | 久久成电影 | 色噜噜在线观看 | 综合久久五月天 | 久久综合九色综合97_ 久久久 | 永久免费视频国产 | 久久久久国 | 婷婷成人综合 | av日韩国产 | 97超碰资源总站 | 中文字幕一区二区三区乱码在线 | 成年人免费在线观看网站 | 特黄特色特刺激视频免费播放 | 色综合久久中文字幕综合网 | 91精品国产综合久久福利 | 久久成人国产精品 | 欧美久久久久久久久久 | 免费福利在线视频 | 欧美在线观看视频一区二区 | 亚洲黄色在线观看 | 欧美色精品天天在线观看视频 | 久久久久久久久久亚洲精品 | 久久综合色综合88 | 在线精品视频免费观看 | a在线观看免费视频 | 草久久影院 | 男女视频91 | 国产成人精品一区二三区 | 日韩免费区 | 精品99免费视频 | 黄色av电影网 | www.国产在线视频 | 国产精品综合久久久 | 最近字幕在线观看第一季 | 97超级碰碰碰视频在线观看 | 成人黄色在线 | 亚洲欧洲国产视频 | 亚洲国产欧美一区二区三区丁香婷 | 亚洲天堂网在线观看视频 | 六月丁香在线视频 | 免费在线观看中文字幕 | 亚洲资源视频 | 久久精品第一页 | 在线直播av | 亚洲小视频在线 | 国产xxxx| 99久热| 久久综合精品国产一区二区三区 | 久久免费视频国产 | 精品国产精品久久一区免费式 | 成人午夜久久 | 日韩av不卡在线观看 | 日韩午夜大片 | 日本三级人妇 | 国产亚洲欧洲 | 不卡的av| 丁香六月婷婷激情 | 久久尤物电影视频在线观看 | 狠狠躁日日躁狂躁夜夜躁 | 国产一级精品绿帽视频 | 粉嫩一区二区三区粉嫩91 | 国产精品视频在线看 | 国产裸体永久免费视频网站 | 欧美a级一区二区 | 国产一区视频在线观看免费 | 日韩xxx视频 | 草草草影院 | 豆豆色资源网xfplay | 天天干天天操天天做 | 日韩欧美视频免费在线观看 | 久亚洲精品 | 成人国产精品免费观看 | 色午夜影院 | 成人av影视观看 | 欧美精品在线观看免费 | 国产精品一区二区三区四区在线观看 | 免费网站污 | 96精品视频 | 国产精品6999成人免费视频 | 亚洲三级毛片 | 91最新在线视频 | 国产亚洲激情视频在线 | 97在线资源 | 中文字幕亚洲欧美日韩2019 | 97综合网| 中文字幕亚洲五码 | 欧美性极品xxxx娇小 | 精品自拍sae8—视频 | 国产在线观看中文字幕 | 亚洲精品中文字幕视频 | www.亚洲激情.com | 不卡中文字幕在线 | 国产午夜精品久久久久久久久久 | 亚洲视频在线免费观看 | 欧美极品在线播放 | 国产综合婷婷 | 欧美国产视频在线 | 欧美成人精品三级在线观看播放 | 久草在在线视频 | www免费在线观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 干干日日 | 天天操天天射天天插 | 国产精品一区二区久久久 | 精品一区中文字幕 | 国产乱码精品一区二区三区介绍 | 欧美精品在线观看一区 | 字幕网av | 国产 欧美 日产久久 | 国产精品久久久久久久午夜片 | 久久久综合香蕉尹人综合网 | 精品在线小视频 | 国产精品久久久久一区 | 国产精品美女视频网站 | 久草精品视频在线看网站免费 | 精品久久久久久久久久岛国gif | 色婷婷97| 狠狠色网 | 国产亚洲va综合人人澡精品 | www.久久久 | 欧洲性视频 | 亚洲一区二区精品视频 | 成人黄在线观看 | 成年一级片 | 在线不卡中文字幕播放 | 日狠狠| 五月天国产精品 | 亚洲成av人片在线观看无 | 中文字幕一区二区三区乱码在线 | 国产精品一区二区av麻豆 | 久久精品最新 | 国产成人高清 | 婷婷深爱网 | www夜夜操 | 欧美黄污视频 | 久久中文字幕视频 | 久久久穴| 免费网站黄 | 在线视频第一页 | 一区二区精品久久 | 欧美一区二区精美视频 | 免费视频一区 | 久操中文字幕在线观看 | 97超碰伊人| 91亚洲狠狠婷婷综合久久久 | 在线视频精品播放 | 久久一区91 | 天天综合网在线观看 | 99视频在线免费观看 | 高清精品久久 | 又爽又黄在线观看 | 国产三级在线播放 | 97香蕉久久国产在线观看 | 欧美精品999 | 天天想夜夜操 | 一区二区三区四区在线免费观看 | 久草在线视频资源 | 最近最新最好看中文视频 | 亚洲成人av片 | 激情六月婷婷久久 | 国产在线高清视频 | 丁香花在线视频观看免费 | 人人射人人插 | 久久久国产一区二区三区四区小说 | 一区二区精 | 久久国产福利 | 在线一二三四区 | 999久久久久久久久6666 | 久久久精品影视 | 亚洲成人精品影院 | 日日夜夜噜噜噜 | 免费在线观看av不卡 | 99久久精品网 | 久久99国产综合精品免费 | 欧美日韩中 | 国产91av视频在线观看 | 久久久久国产精品一区 | 99精品国产成人一区二区 | 成人欧美一区二区三区在线观看 | 婷婷丁香综合 | 午夜三级在线 | 最新av网址在线观看 | 日韩在线一区二区免费 | www.777奇米| 91视视频在线直接观看在线看网页在线看 | 久久久夜色 | 免费a级观看 | 9在线观看免费高清完整版在线观看明 | 国产一区二区三区视频在线 | 久久九九久久 | 五月婷婷丁香六月 | 精品国产成人 | 精品国产一区二区三区在线观看 | 奇米网8888 | 国产精品一区二区av日韩在线 | 伊人欧美| 深夜国产在线 | 欧美日韩免费观看一区二区三区 | 亚洲精品色视频 | 国内精品久久久久影院男同志 | 欧美成年人在线观看 | 天天射天天爱天天干 | 亚洲成aⅴ人在线观看 | 美腿丝袜av | 91久久精品日日躁夜夜躁国产 | 一级黄色片在线播放 | 精品免费国产一区二区三区四区 | 国产在线精 | 深夜国产在线 | 91精品久久久久久久久久入口 | 高清av在线免费观看 | 色综合久久中文字幕综合网 | 国产精品一区专区欧美日韩 | 中国黄色一级大片 | 中文字幕高清在线播放 | 国产一区欧美一区 | 免费看精品久久片 | 久久99久国产精品黄毛片入口 | av在线播放中文字幕 | av片一区 | 亚洲久久视频 | 亚洲视频大全 | 亚洲精品99 | 亚洲午夜精品在线观看 | 中文字幕在线第一页 | 国内外成人免费在线视频 | 日日夜夜精品网站 | 免费看片网页 | 亚洲午夜精品福利 | 婷婷亚洲激情 | 中文字幕在线观看一区二区三区 | 综合激情网... | 中文字幕资源站 | 成人av免费播放 | 99re在线视频观看 | 欧美性护士 | 日韩精品免费一区二区在线观看 | 久久99亚洲精品 | 99精品久久99久久久久 | 国产精品激情 | 天堂av免费 | 日韩成片 | 六月色婷婷 | 99高清视频有精品视频 | 日本中文字幕观看 | 久久不见久久见免费影院 | 国产一区二区精品 | 欧洲一区二区在线观看 | 九九久久久久久久久激情 | 超碰av在线播放 | 久久久亚洲精品 | 手机成人av在线 | 国产黄在线 | 久久极品 | 一区二区三区精品在线 | 亚洲黄色在线观看 | www99精品| 99热官网| 久久综合久久88 | a天堂最新版中文在线地址 久久99久久精品国产 | 久久久久国 | 在线观看中文字幕av | 亚洲国产精品99久久久久久久久 | 中文字幕在线网 | 亚洲九九 | 欧美在线1区 | 玖玖玖精品 | 黄色av免费看 | 色噜噜在线观看 | 国产福利电影网址 | 97碰视频| 婷婷草 | av福利在线导航 | 日韩中文久久 | 国产精品麻豆一区二区三区 | 免费av网站在线看 | 狠狠色丁香久久婷婷综合_中 | www.狠狠 | 在线观看片 | a色视频 | 成人性生交大片免费观看网站 | 91精品久久久久久久99蜜桃 | 91理论片午午伦夜理片久久 | 久久国产经典视频 | 在线色资源 | 亚洲视频免费 | 久久精品视频网站 | 日韩国产欧美在线视频 | 98精品国产自产在线观看 | 国产一级片一区二区三区 | 国产精品高清在线观看 | 96国产在线 | 国产精品久久久久久一区二区 | 午夜视频二区 | 麻豆激情电影 | 免费污片 | 精品日韩在线一区 | 国产成人久久久久 | 在线观看视频免费播放 | 亚洲电影免费 | 91看片麻豆 | 欧美久久久久久久久久久 | 五月天电影免费在线观看一区 | 日韩欧美在线观看 | 亚洲最新合集 | 欧美日韩网址 | 精品亚洲va在线va天堂资源站 | 欧美午夜久久久 | 国产精品久久艹 | 亚洲成人免费在线观看 | 色网站免费在线观看 | 国产精品毛片一区视频播 | 成人在线视频免费看 | 顶级bbw搡bbbb搡bbbb | 欧美日韩不卡在线视频 | 最新av网址大全 | 免费在线观看视频a | 久久99国产精品免费 | 久久久三级视频 | 亚洲v欧美v国产v在线观看 | 婷婷丁香社区 | 国产91精品久久久久久 | 国产在线最新 | 97电影网站| 国产精品99久久久久久有的能看 | 毛片网站免费在线观看 | 国产最新视频在线 | 欧美一级久久 | 黄色国产在线观看 | 精品国产一区二区三区久久久蜜臀 | av片在线看| 久久福利小视频 | 亚洲午夜精品福利 | 91精品中文字幕 | 一区二区成人国产精品 | 国产亚洲精品久久久久久 | 中文字幕日本在线 | 久久草草热国产精品直播 | 精品一区欧美 | 久久成人久久 | 黄网站app在线观看免费视频 | 六月天色婷婷 | 伊人导航| 久草国产在线观看 | 欧美激情综合色 | 国产亚洲一区二区在线观看 | 日韩一区二区三区不卡 | 国产成人免费在线观看 | 亚洲天堂网在线播放 | 久久影院一区 | 国产精品va视频 | 99精品国自产在线 | 日本精品一区二区在线观看 | 亚洲精品影视在线观看 | 精品久久久久久国产 | 欧美日韩视频观看 | 午夜精品av | 亚洲精品国产精品国产 | 国产小视频免费观看 | 黄色在线小网站 | 久久系列 | 免费看污片 | 国产一区二区三区网站 | 成人av在线影视 | 最近最新中文字幕 | 美女视频黄频大全免费 | 国产精品久久久久久久久大全 | 玖玖国产精品视频 | 91视频免费国产 | 日韩欧美高清在线 | 国产高清在线不卡 | 成人h动漫精品一区二 | 久久亚洲精品国产亚洲老地址 | www亚洲国产| 97精品国自产拍在线观看 | 国产69久久 | 久久精品这里热有精品 | 欧美日韩在线观看视频 | 一区二区三区在线观看中文字幕 | 在线观看黄网 | 免费在线中文字幕 | 欧美极品xxx| 国产精品一区二区在线播放 | 国产精品情侣视频 | 亚洲精选视频免费看 | 波多野结衣最新 | 午夜精品久久久久久久久久久久久久 | 日韩三级.com | 中文字幕在线有码 | 成年人在线免费视频观看 | 久久xx视频 | 人人玩人人添人人澡97 | 久久久久久高清 | 麻豆视频免费在线观看 | 国产精品美女久久久免费 | 日韩中文字幕在线看 | a视频在线观看免费 | 婷婷丁香七月 | 天天操天天怕 | 中文在线天堂资源 | 久久国产精品精品国产色婷婷 | 国产精品毛片一区视频播 | 在线三级播放 | 91精品国产麻豆 | 伊人婷婷| 丁香视频 | 手机在线永久免费观看av片 | 久操97| 免费黄色a网站 | 欧美经典久久 | 麻豆91在线观看 | 人人玩人人添人人澡超碰 | 91亚洲精| 欧美高清视频不卡网 | 色久天 | 国产精品久久久区三区天天噜 | 精品一区精品二区高清 | 久久精品2 | 五月天亚洲婷婷 | 精品国产欧美一区二区 | 6080yy精品一区二区三区 | 91精品国产99久久久久久红楼 | av久久久久久 | 97人人模人人爽人人喊网 | 国产一区 在线播放 | 人人要人人澡人人爽人人dvd | 免费不卡中文字幕视频 | 久久这里有 | 黄色在线观看污 | 色婷婷激情电影 | 日韩伦理片一区二区三区 | av电影免费 | 亚洲三级黄色 | 久久久久久看片 | 国产一线二线三线性视频 | 欧美精品一级视频 | 婷婷天天色 | 97碰碰碰| 天堂av在线中文在线 | 欧美日韩国产精品爽爽 | 亚洲激情一区二区三区 | 亚洲国产成人在线观看 | 国产精品 999| 色吊丝在线永久观看最新版本 | 久久久在线视频 | 色综合网在线 | 天天爱天天草 | 国产手机视频在线观看 | 亚洲精品在线视频播放 | 欧美日韩一二三四区 | 日本九九视频 | 国产97在线视频 | 久久久久久久久久久久99 | 91免费网站在线观看 | 欧美在线一级片 | 国产成本人视频在线观看 | 日一日干一干 | 精品国产一二区 | 国产精品乱码高清在线看 | 91理论片午午伦夜理片久久 | 成人久久网| 综合黄色网 | 国产精品视频app | av直接看 | 深爱五月激情五月 | av在线超碰| 国产日韩欧美在线观看视频 | 久久久久 免费视频 | 亚洲免费不卡 | 免费看成人 | 在线免费观看视频你懂的 | 三级小视频在线观看 | 最近中文字幕免费 | 亚洲h视频在线 | 欧美精品九九99久久 | 国产在线播放不卡 | 天天操夜夜操天天射 | zzijzzij日本成熟少妇 | 亚洲综合成人婷婷小说 | 国产999 | 天天射天天干天天操 | 国产99久久久精品 | 日韩欧美大片免费观看 | 三级av免费观看 | 国产精品久久99综合免费观看尤物 | 国产精品在线看 | 久草在线视频首页 | 国产在线观看,日本 | 日韩免费视频网站 | 精品 一区 在线 | 午夜10000| 激情综合色播五月 | 国产精品久久久久免费观看 | 欧美午夜寂寞影院 | 国产日韩精品一区二区在线观看播放 | 欧美99精品 | 日本久久91 | 亚洲精品视频大全 | 国产精品99久久久久久小说 | 国产精品免费一区二区三区在线观看 | 久久久久激情视频 | 麻豆国产网站入口 | 91视频xxxx| 免费视频资源 | 久久久久这里只有精品 | 欧美日韩中| 91视频在线免费 | 在线日韩精品视频 | 精品国产免费久久 | www.久久久com | 97热久久免费频精品99 | 免费久久久久久久 | 久久久久久网站 | 99精品国产高清在线观看 | 久久激情久久 | 久久夜色精品国产欧美一区麻豆 | 中文字幕综合在线 | 国产精品免费观看视频 | 久久久久一区二区三区 | 久久成人国产精品入口 | 国产精品久久人 | 中文字幕超清在线免费 | 免费色av| 午夜精品av | 国产精品手机看片 | 黄网站免费大全入口 | 中文字幕在线电影 | 亚洲自拍av在线 | 亚洲精品高清视频 | 国产午夜精品福利视频 | 欧美污污网站 | 五月婷婷丁香在线观看 | 午夜国产一区二区三区四区 | 国产亚洲在线 | 午夜精品久久久99热福利 | 日韩午夜电影 | 91精品国产91| 日韩一区二区久久 | 天天操天天怕 | 午夜精品电影 | 亚洲日本三级 | 一区二区三区电影在线播 | 成人av资源站 | 东方av免费在线观看 | 免费日韩视 | 美国av片在线观看 | 日韩欧美一级二级 | 亚洲成av人片在线观看无 | 青青久视频 | 96超碰在线| 激情视频在线高清看 | 免费观看国产视频 | 久久极品 | .国产精品成人自产拍在线观看6 | 欧美在线观看视频一区二区 | 国产成人一区二区三区影院在线 | 天天干天天操天天操 | 久久五月婷婷丁香社区 | 精品五月天 | 五月天六月丁香 | 狠狠干在线 | 美女视频黄免费的 | 成人a级免费视频 | 在线黄色av电影 | 三级免费黄色 | 国产精品久久久久久爽爽爽 | 亚洲精品在线视频网站 | 久久日本视频 | 91成人网在线 | 欧美精品日韩 | 在线 视频 亚洲 | 亚洲五月婷 | 久影院| 久久国产视频网站 | 国产精品密入口果冻 | 亚洲欧美成人综合 | 久久香蕉国产 | 在线观看日韩精品 | 91精品国产91热久久久做人人 | 中文字幕在线观看一区二区三区 | 亚洲精品国产欧美在线观看 | 亚州成人av在线 | 美女视频黄网站 | 97国产电影 | 天天天天天干 | 色在线免费观看 | 一区二区高清在线 | 一区二区三区国产精品 | av观看久久久 | 玖玖国产精品视频 | 天天干天天操天天爱 | 丁香综合 | 在线国产能看的 | 日韩av免费一区二区 | 成人毛片在线观看视频 | 亚洲精品视频在 | 日韩和的一区二在线 | 黄色片免费看 | 国产91综合一区在线观看 | 久久免费精品国产 | 亚洲精品美女久久17c | 成人丁香花 | 九九精品视频在线观看 | 99在线热播精品免费 | 免费av电影网站 | 久久国产精品久久w女人spa | 国产一区欧美在线 | 中文字幕免费观看全部电影 | 九色琪琪久久综合网天天 | 一区二区三区国 | 亚洲精品久久久久中文字幕二区 | 4438全国亚洲精品在线观看视频 | 天天天天天操 | 国产精品综合久久久久 | 国产专区免费 | 中文字幕在线播放第一页 | 婷婷精品国产欧美精品亚洲人人爽 | 日韩 在线a | 日韩av电影网站在线观看 | 粉嫩av一区二区三区入口 | 97精品免费视频 | 人人爽人人 | 日韩久久精品一区二区三区 | 888av| 婷婷精品国产一区二区三区日韩 | 亚洲一级免费观看 | 久久福利综合 | 成人黄色电影在线播放 | 久久综合九色综合欧美就去吻 | 999免费视频| 国产91精品欧美 | 国产成人久久 | 久久婷婷丁香 | 亚洲国产精品va在线看黑人动漫 | 激情深爱| 国产第一页福利影院 | 91禁在线看 | 又黄又爽又刺激 | 香蕉成人在线视频 | 国内精品一区二区 | 五月天婷婷丁香花 | 精品免费久久 | 欧美精品久久久久久久久免 | 一区二区免费不卡在线 | 人人爽爽人人 | 成人片在线播放 | 久久午夜免费观看 | 毛片网站在线看 | 夜色资源站国产www在线视频 | 国产1区2区3区精品美女 | 91成熟丰满女人少妇 | 99久久婷婷国产 | 中文字幕国产在线 | 国产经典 欧美精品 | av大片免费在线观看 | 欧美天天综合网 | 国产成人精品久久久久 | 狠狠色综合网站久久久久久久 | 欧美精品一区二区性色 | 人人草网站 | 国产精品自产拍在线观看网站 | 亚洲色图22p | 欧美色噜噜 | 99国产在线观看 | 久在线观看| 久久久久成人精品亚洲国产 | 久久精品草 | www.亚洲激情.com | 99热这里只有精品国产首页 | 成人永久免费 | 亚洲日本va午夜在线电影 | 成人app在线免费观看 | 日韩精品欧美专区 | 免费在线激情电影 | 一区二区三区久久 | 久久夜色精品国产欧美乱极品 | 久久久官网 | 国产91在线播放 | 超碰av免费 | 不卡视频一区二区三区 | 99综合电影在线视频 | 欧美大香线蕉线伊人久久 | 欧美在线观看禁18 | 又黄又爽免费视频 | 日韩免费看片 | 亚洲成人网av | 99re久久资源最新地址 | 瑞典xxxx性hd极品 | 伊人影院得得 | 美女网站在线看 | 日韩亚洲精品电影 | 久久免费在线观看 | 久久成人久久 | 久久久久久久99精品免费观看 | 国产一区91| 亚洲欧美视频在线 | 国产精品视频久久久 | 日日干av| 综合激情久久 | 黄色三级在线观看 | 99久久精品久久久久久清纯 | 日本久久久久久久久久 | 国产福利网站 | 美女黄频在线观看 | 亚洲欧美国产精品久久久久 | 四月婷婷在线观看 | 久久超碰99| 国产精品久久久久亚洲影视 | 国产理论影院 | 国产在线最新 | 国产免码va在线观看免费 | 亚洲美女久久 | 国产亚洲精品成人av久久影院 | 亚洲人人网 | 国产91亚洲精品 | 国产99久久久国产精品免费看 | 九九交易行官网 | 欧美日韩国产亚洲乱码字幕 | 午夜精品一区二区三区可下载 | 91看片在线免费观看 | 日韩精品中文字幕av | 黄色小说网站在线 | 九九九在线观看 | 99热这里精品 | 免费日韩电影 | 欧美激情精品久久久久久免费印度 | 国产不卡视频在线 | 欧美va天堂va视频va在线 | 国产成人a v电影 | av一级久久 | 特级毛片在线观看 | 国产大片免费久久 | 天天av在线播放 | 免费在线观看av电影 | 中文字幕在线看片 | www久久国产 | 亚洲精品9 | 国产精品成人国产乱一区 | 亚洲涩涩涩| 在线黄av| 99亚洲精品 | 亚洲综合在线视频 | 国产91粉嫩白浆在线观看 | 免费看黄的视频 | 丁香五月亚洲综合在线 | 久久中文字幕在线视频 | 国产精品福利小视频 | 亚洲精品麻豆 | 国产一区免费在线观看 | 国产日韩精品久久 | 四虎国产精 | 国产精品视频线看 |