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();
}

2 番目の方法で文字列を渡すのに問題があります。「string PointPerson」を削除すると、この呼び出しが機能します。

SqlInteraction.sqlQueryReturnString(getPKofUserLoggedIn);

文字列もどのように渡すのですか?

4

2 に答える 2

1

の最後のジェネリック型パラメーターFuncは return です。その前のものはメソッドのパラメーターです。最初のメソッド シグネチャを次のように変更する必要があります。

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

stringこれにより、戻り値の型がandパラメータSqlConnectionであるメソッドを受け入れることができます。string

のメソッド シグネチャを変更したくない/変更できない場合はsqlQueryReturnString、外部変数を閉じることができます。

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