C#方法重载-具有类似参数的2种方法
我有两个具有相似输入参数类型的方法,但参数本身不同,用于在方法中构建SQL语句 C#不喜欢这样——“类型数据库已经用相同的参数类型定义了一个名为“DatabaseSearch”的成员。” 作为一个新手,这听起来像是我构造了错误的类或方法 我是否应该在方法外部构建SQL语句,并将其及其参数传入C#方法重载-具有类似参数的2种方法,c#,methods,overloading,C#,Methods,Overloading,我有两个具有相似输入参数类型的方法,但参数本身不同,用于在方法中构建SQL语句 C#不喜欢这样——“类型数据库已经用相同的参数类型定义了一个名为“DatabaseSearch”的成员。” 作为一个新手,这听起来像是我构造了错误的类或方法 我是否应该在方法外部构建SQL语句,并将其及其参数传入 // Surname ONLY public void DatabaseSearch(DataGrid DataGrid, string surname) { strin
// 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...
}
您可以更改方法名称或更改参数的顺序。第一种方法更好
publicvoiddatabasesearchbyfirstname(int-one,stringone){
//…做了一些事。。。
}
public void数据库searchbysurname(int-two,string-two){
//…做了不同的事情。。。
}
重载仅对参数类型有效-当涉及重载时,名称没有任何意义。请将方法名称更改为更具体的名称。i、 e.public void SearchFirstName
和public void SearchLastName
这样将用户界面传递到数据库调用中也是个坏主意。将两者分开,并使用DataTable
传递数据。将方法名称更改为“SearchByFirstName”和“SearchByStratName”。原因是在同一类中不能有两个或更多类似的方法签名。我还建议您遵循oop概念,将操作代码与UINo分离,参数不相似,但相同。int是int,字符串是astring。要寻找的术语是“signature”。谢谢,显然它不能按照我想要的方式来完成,最好的解决方案是使用两个不同名称的方法。更改参数的顺序是一个好主意,但会让人困惑。