這篇文章記錄了我從一開始使用.NET訪問數據庫的歷程,從一開始最基本的直接訪問數據庫存儲過程,到后面使用SqlSugar、Dapper、Entity Framework (EF)框架的使用,看到這篇文章的初始版本,自己都覺得有點感慨我當初的傻里傻氣
存儲過程創建:
ALTER procedure Data @SerialNumber VarChar (50), @type VarChar (10) as BEGIN SELECT b1.LotNumber FROM m_HL100GEEPROM_T b1 WHERE SerialNumber=@SerialNumber NED GO
C#代碼:
public static DataTable SQL1(string SerialNumber, string type) { DataTable DT = new DataTable(); string conString = "Data Source=; Initial Catalog=;User ID=;Password=";//連接數據庫的字符 string sql = "Data";//要調用的存儲過程名 try { SqlConnection conStr = new SqlConnection(conString);//SQL數據庫連接對象,以數據庫鏈接字符串為參數 SqlCommand comStr = new SqlCommand(sql, conStr);//SQL語句執行對象,第一個參數是要執行的語句,第二個是數據庫連接對象 comStr.CommandType = CommandType.StoredProcedure;//設置執行類型為存儲過程 //依次設定存儲過程的參數 comStr.Parameters.Add("@SerialNumber", SqlDbType.Text).Value = SerialNumber; comStr.Parameters.Add("@type", SqlDbType.Text).Value = type; conStr.Open();//打開數據庫連接 SqlDataAdapter SqlDataAdapter1 = new SqlDataAdapter(comStr); SqlDataAdapter1.Fill(DT); conStr.Close();//關閉連接 } catch (Exception ex) { MessageBox.Show("操作不成功"); } return DT; }
Dapper框架:
<connectionStrings>
<add name="AOC" connectionString="Data Source=****; Initial Catalog=****;User ID=****;Password=****" />
</connectionStrings>
using (IDbConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["AOC"].ConnectionString)) { DynamicParameters sp = new DynamicParameters(); sp.Add("@Part_Number", Part_Number); sp.Add("@SerialNumber", SerialNumber); sp.Add("@type", type); Data = connection.Query<GD>("Data", sp, commandType: CommandType.StoredProcedure).SingleOrDefault(); }
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["AOC"].ConnectionString)) { var param = new DynamicParameters(); param.Add("@ppid1", barcode); param.Add("@ppid2", custID); param.Add("@stationid", stationid); //存儲過程判斷條件 param.Add("@PutResult", "", DbType.String, ParameterDirection.Output); db.Execute("AOC_SpotCheck", param, null, null, CommandType.StoredProcedure); PutResult = param.Get<string>("@PutResult"); if (PutResult == null || PutResult == "") { PutResult = "NG:數據不存在"; } }
EF框架:
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<connectionStrings>
<add name="OEE" connectionString="Data Source=; Initial Catalog=;Persist Security Info=True;User ID=;Password=" providerName="System.Data.SqlClient" />
</connectionStrings>
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
1 List<DBRead> DBList = new List<DBRead>(); //DBRead為實體類 2 using (var db = new DataContext()) 3 { 4 SqlParameter type = new SqlParameter("@type", DBparam.type); 5 SqlParameter equipmentID = new SqlParameter("@equipmentID", DBparam.Testpcid); 6 SqlParameter CollecttimeA = new SqlParameter("@CollecttimeA", DBparam.CollecttimeA); 7 SqlParameter CollecttimeB = new SqlParameter("@CollecttimeB", DBparam.CollecttimeB); 8 DBList = db.Database.SqlQuery<DBRead>("exec [OEEReport] @type,@equipmentID,@CollecttimeA,@CollecttimeB", type, equipmentID, CollecttimeA, CollecttimeB).Cast<DBRead>().ToList(); 9 db.SaveChanges(); 10 }
public class DataContext : DbContext { public DataContext() : base("OEE") { }//指定連接字符串 protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); // 移除表名公約 } public void FixEfProviderServicesProblem() { var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance; } }
