1

我在一个名为 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);

我如何也传递字符串?

4

2 回答 2

4

Func<SqlConnection, string>读作'一个接受SqlConnection参数并返回一个string'的函数 - 如果你删除 PointPerson 那么你就有了。

如果要从外部方法添加参数,可以执行以下操作:

var myParam = "some string";
SqlInteraction.sqlQueryReturnString(conn => getPKofUserLoggedIn(conn, myParam));
于 2013-11-06T16:38:00.257 回答
1

最后一个泛型类型参数Func是返回值。之前的是方法参数。您必须将您的第一个方法签名更改为:

public static string sqlQueryReturnString(Func<SqlConnection, string, string> sqlMethod)

这将允许它接受返回类型为stringandSqlConnectionstring参数的方法。

如果您不想/不能更改 的方法签名sqlQueryReturnString,那么您可以关闭外部变量:

string parameter = "myParameter";
sqlQueryReturString(conn => getPKofUserLoggedIn(conn, parameter));
于 2013-11-06T16:37:08.053 回答