我在一个名为SqlInteraction的类中有一个方法:
public static string sqlQueryReturnString(Func<SqlConnection, string> sqlMethod)
{
string result = "";
SqlConnection conn = new SqlConnection();
conn.ConnectionString = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
try
{
//open SQL connection
conn.Open();
result = sqlMethod(conn);
}
catch (Exception ex)
{
System.Diagnostics.Debug.Write(ex.ToString());
}
finally
{
conn.Close();
}
return result;
}
以下是使用它的另一个类中的另一种方法:
private string getPKofUserLoggedIn(SqlConnection conn, string PointPerson)
{
int result = 0;
SqlCommand getPKofUserLoggedIn = new SqlCommand("SELECT [PK_User] FROM [User] WHERE [LoginName] = @userIdParam", conn);
//create and assign parameters
getPKofUserLoggedIn.Parameters.AddWithValue("@userIdParam", PointPerson);
//execute command and retrieve primary key from the above insert and assign to variable
result = (int)getPKofUserLoggedIn.ExecuteScalar();
return result.ToString();
}
我在第二种方法中传递字符串时遇到问题。如果我删除'string PointPerson',则此调用有效:
SqlInteraction.sqlQueryReturnString(getPKofUserLoggedIn);
我如何传递字符串?
答案 0 :(得分:4)
Func<SqlConnection, string>
读作'一个带SqlConnection
参数并返回string
'的函数 - 如果你移除了PointPerson那么你就有了。
如果要从外部方法添加参数,可以执行以下操作:
var myParam = "some string";
SqlInteraction.sqlQueryReturnString(conn => getPKofUserLoggedIn(conn, myParam));
答案 1 :(得分:1)
Func
的最后一个泛型类型参数是返回值。之前的那些是方法参数。您必须将第一个方法签名更改为:
public static string sqlQueryReturnString(Func<SqlConnection, string, string> sqlMethod)
这将允许它接受返回类型为string
且SqlConnection
和string
参数的方法。
如果您不想/不能更改sqlQueryReturnString
的方法签名,那么您可以关闭外部变量:
string parameter = "myParameter";
sqlQueryReturString(conn => getPKofUserLoggedIn(conn, parameter));