c#sql server存储过程未返回预期值

jyztefdp  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(329)

我编写这个函数是为了返回一个数据集,我希望返回一个较小的数据集,因为我只希望返回一个值,但是我得到了一个相当臃肿的对象,我找不到我要找的值,这会导致问题,因为我打算大量使用这个函数。
我希望有人能发现我做错了什么,我已经包括了代码,返回对象的截图和我所期待的。任何帮助都将不胜感激。
如果我在这个问题上的措辞不正确,请随时告诉我,我很难很好地表达我的想法。

public DataSet getPartnerParameter(string parameter)
{
    using (var dbConnection = new SqlConnection(UnityHelper.IocContainer.Resolve<IConfigHelperService>().GetConnectionString("CASConnectionString")))
    {
        dbConnection.Open();

        using (var dbCommand = new SqlCommand("GETPARTNERPARAMETER"))
        {
            dbCommand.CommandType = CommandType.StoredProcedure;
            dbCommand.Connection = dbConnection;

            SqlParameter lstrParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
            lstrParameter.Value = parameter;
            dbCommand.Parameters.Add(lstrParameter);

            var ldaDPS = new SqlDataAdapter(dbCommand);
            var ldstParameterValues = new DataSet();
            ldaDPS.Fill(ldstParameterValues);

            return ldstParameterValues;
        }
    }
}


这就是我所期待的

编辑//
稍微修改了我的代码,但仍然不起作用。

public String[] getPartnerParameter(string parameter)
{
    using (var dbConnection = new SqlConnection(UnityHelper.IocContainer.Resolve<IConfigHelperService>().GetConnectionString("CASConnectionString")))
    {
        dbConnection.Open();

        SqlCommand dbCommand = new SqlCommand("GETPARTNERPARAMETER", dbConnection);
        dbCommand.CommandType = CommandType.StoredProcedure;

        SqlParameter lstrParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
        lstrParameter.Value = parameter;
        dbCommand.Parameters.Add(lstrParameter);

        SqlDataReader reader = dbCommand.ExecuteReader();
        string[] results = new string[2];
        while (reader.Read())
        {

            results[0] = reader[0].ToString();
            results[1] = reader[1].ToString();

        }
        if (results.Length < 1)
        {
            results[0] = "Cannot find Value";
            results[1] = "S";
            return results;
        }
        else
        {

            return results;
        }
    }

错误是这样的:{“过程或函数‘getpartnerparameter’需要参数'@parameter',但没有提供。”}

ryevplcw

ryevplcw1#

您要查找的值可能在dataset.tables[0].rows[0]行中。
但是,如果您希望返回一行,那么dataset对象似乎有点过分了。我建议避免使用sqldataadapter/dataset,而是使用sqldatareader。
未经测试的代码,但应提供如何使用它的要点:

using (SqlConnection connection = new SqlConnection(connectionString))
{
    connection.Open();

    SqlCommand dbCommand = new SqlCommand("GETPARTNERPARAMETER", connection);
    dbCommand.CommandType = CommandType.StoredProcedure;
    SqlParameter lstrParameter = new SqlParameter("@Parameter", SqlDbType.VarChar);
    lstrParameter.Value = "LexisNexisCreditConsentRequired";
    dbCommand.Parameters.Add(lstrParameter);

    SqlDataReader reader = dbCommand.ExecuteReader();
    while (reader.Read())
    {
        var yourValue = reader[0];
        var yourDataType = reader[1];
    }
}
ymzxtsji

ymzxtsji2#

DataSet 是一个可以包含许多表的对象。它不需要,但它可以,因此它还有许多字段、属性和方法来支持这个角色。
对于此查询,请参阅 ldstParameterValues.Tables[0].Rows[0] . 在该行中,您还可以看到具有另一级别括号索引的列:

DataRow row = ldstParameterValues.Tables[0].Rows[0];
var column0Value row[0];
var column1Value = row[1];

但是,这些结果的类型是object。您需要强制转换这些值或使用 GetX() 方法来获取具有有意义类型的结果。

相关问题