【发布时间】:2020-05-10 02:30:44
【问题描述】:
我有两个输入参数类型相似的方法,但参数本身不同,用于在方法内构建 SQL 语句。
C# 不喜欢这样 - “类型数据库已经定义了一个名为 'DatabaseSearch' 的成员,具有相同的参数类型。”
作为一个新手,这听起来像是我在构建类或方法错误?
我是否应该在方法之外构建 SQL 语句并将其及其参数传入?
// Surname ONLY
public void DatabaseSearch(DataGrid DataGrid, string surname)
{
string database_file_path = @"Data Source=.\MemberDB.db";
string sqlCmd = "Select * FROM Members WHERE Surname = @surname";
using (var con = new SQLiteConnection(database_file_path))
{
using (var cmd = new SQLiteCommand(con))
{
con.Open();
cmd.Parameters.AddWithValue("@surname", surname);
cmd.CommandText = sqlCmd;
var dataAdapter = new SQLiteDataAdapter(cmd);
var dt = new DataTable("Members");
dataAdapter.Fill(dt);
DataGrid.ItemsSource = dt.DefaultView;
dataAdapter.Update(dt);
}
}
}
// Firstname ONLY
public void DatabaseSearch(DataGrid DataGrid, string firstname)
{
string database_file_path = @"Data Source=.\MemberDB.db";
string sqlCmd = "Select * FROM Members WHERE FirstName = @firstname";
using (var con = new SQLiteConnection(database_file_path))
{
using (var cmd = new SQLiteCommand(con))
{
con.Open();
cmd.Parameters.AddWithValue("@firstname", firstname);
cmd.CommandText = sqlCmd;
var dataAdapter = new SQLiteDataAdapter(cmd);
var dt = new DataTable("Members");
dataAdapter.Fill(dt);
DataGrid.ItemsSource = dt.DefaultView;
dataAdapter.Update(dt);
}
}
}
总结:
你如何拥有两个具有相同类型参数的重载方法?
public void myMethod( int one, string one){
....some stuff done...
}
public void myMethod( int two, string two){
....different stuff done...
}
【问题讨论】:
-
重载仅适用于参数的类型 - 重载时名称没有任何意义。
-
将您的方法名称更改为更具体。即
public void SearchFirstName和public void SearchLastName -
将您的 UI 传递给这样的数据库调用也是一个坏主意。将两者分开,并使用
DataTable传递数据。 -
将您的方法名称更改为“SearchByFirstName”和“SearchByLastName”。原因是同一类中不能有两个或更多类似的方法签名。我还建议您是否可以遵循 oop 概念将操作代码与 UI 解耦
-
不,参数不相似但相同。 int 是 int,字符串是 astring。要查找的术语是“signatur”。
标签: c# methods overloading