C# SQL 服务器存储过程未返回预期值

C# SQL Server stored procedure not returning expected value

我把这个函数写到 return 一个数据集,我期待一个更小的数据集,因为我只期待一个值,但我得到一个相当臃肿的对象,我找不到我想要的值正在寻找,这会导致问题,因为我打算大量使用此功能。

我希望有人能发现我做错了什么,我已经包含了代码、returned 对象的屏幕截图以及我的期望。任何帮助将不胜感激。

如果我在这个问题中没有正确表达任何内容,请随时告诉我,我很难很好地表达我的想法。

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’,但未提供。”}

您要查找的值可能在 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];
    }
}

一个DataSet是一个可以包含很多表的对象。它不是必须的,但它可以,因此它还有许多字段、属性和方法来支持该角色。

对于此查询,请查看 ldstParameterValues.Tables[0].Rows[0]。在该行中,您还可以看到具有另一级别括号索引的列:

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

但是,这些结果的类型是 object。您需要强制转换值或在数据行上使用 GetX() 方法之一以获得具有有意义类型的结果。