![](/img/trans.png)
[英]How to avoid writing repetitive code for different numeric types in .NET
[英]How to avoid writing same code for different types
我正在使用 SQL 服務器和 SQL 服務器 CE 編寫 C# 程序。 如何避免編寫如下相同的代碼,變量databasestate
用於查看程序是否應該使用 SQL 服務器或 SQL 服務器 CE。
public static void Delete()
{
SqlCeCommand commce = new SqlCeCommand("Delete From Projekat WHERE IDProjekat = @ConID", conce);
SqlCommand comm = new SqlCommand("Delete From Projekat WHERE IDProjekat = @ConID", con);
if (CrossFormData.databasestate == false)
{
commce.Parameters.AddWithValue("@ConID", CrossFormData.ProjectID);
try
{
conce.Open();
commce.ExecuteNonQuery();
conce.Close();
MessageBox.Show("Deleted!");
}
catch (Exception)
{
MessageBox.Show("Something went wrong");
conce.Close();
}
}
else
{
comm.Parameters.AddWithValue("@ConID", CrossFormData.ProjectID);
try
{
con.Open();
comm.ExecuteNonQuery();
con.Close();
MessageBox.Show("Deleted!");
}
catch (Exception)
{
MessageBox.Show("Something went wrong");
con.Close();
}
}
}
如果使用 SQL 服務器 CE 讓你生氣,對不起,下次我將使用 SQLite。
如果我找不到方法,我會將它們分成兩個不同的類,這樣會更有條理。
SqlCeCommand
和SqlCommand
都派生自DbCommand
,因此針對基礎 class 進行編程:
var connection = CrossFormData.databasestate ? (DbConnection) con : conce;
using var command = connection.CreateCommand();
command.CommandText = "Delete From Projekat WHERE IDProjekat = @ConID";
command.Parameters.AddWithValue("@ConID", CrossFormData.ProjectID);
try
{
connection.Open();
command.ExecuteNonQuery();
MessageBox.Show("Deleted!");
}
catch (DbException)
{
MessageBox.Show("Something went wrong");
}
finally
{
connection.Close();
}
更好的是,使用Dapper之類的幫助程序庫來消除很多這樣的樣板:
var connection = CrossFormData.databasestate ? (DbConnection) con : conce;
connection.Execute("Delete From Projekat WHERE IDProjekat = @ConID", new { ConID = CrossFormData.ProjectID });
我看不出分成兩個類如何解決重復代碼的問題,但這是一個起點:SqlCeCommand 和 SqlCommand 都派生自 DbCommand,因此如果您可以使用命令的輸入參數(作為 DbCommand)重寫代碼無論是哪種情況,它都應該起作用。 此外,從我收集的內容來看,con 和 conce 應該是相同的 class 或共享父 class,因此希望不應該成為問題。 我也查找了使用的方法,它們都來自 DbCommand。 祝你好運,如果您需要更多信息,請告訴我(或者我可以編寫一些代碼來向您展示我的意思,我現在只是在吃飯,哈哈)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.