![](/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.