gpt4 book ai didi

c# - 卡在 SqlDataReader.GetValues 方法上

转载 作者:行者123 更新时间:2023-11-30 19:01:48 24 4
gpt4 key购买 nike

我正在调用一个 SQL 存储过程,该过程返回一个包含用户及其老板的小表。我想做的是将此信息与应用程序不同部分中的变量进行比较,以启用/禁用 GridView 行的编辑。为实现这一点,GetValues 方法似乎会返回我需要的内容,即存储过程返回的整个数据集。我的想法是,一旦我的应用程序中有了这些数据,我就可以将该数据集加载到一个数组中,然后循环遍历它来完成我需要做的事情。

问题是这样的。在我下面的代码中,我收到了错误

Cannot implicitly convert type 'int' to 'object'

当我查看 documentation在这个方法上,返回值是一个int

我的问题是,由于存储过程包含字符串数据(用户和老板姓名),为什么 GetValues 方法返回一个 int?我的实际数据如何表示为数字以及如何将我的数据放入基于字符串的数组中?

我在网上看了很多例子和资料,这似乎是新手常遇到的问题。我只是不理解或不明白,而且我没有取得任何进展。非常感谢任何帮助!

    public Object[] GetDeptAppData()
{
Object[] myObject;
string sp_deptapp, sp_status, sp_supervisor;

//execute stored procedure to get data from database
SqlConnection sqlConnection = new SqlConnection("Data Source=MyServer;Initial Catalog=MyCatalog;Persist Security Info=True;User ID=MyUser;Password=MyPassword");
SqlCommand cmd = new SqlCommand();
SqlDataReader reader;

cmd.CommandText = "SP_Admin_DeptApp_Load";
cmd.CommandType = CommandType.StoredProcedure;

cmd.Connection = sqlConnection;
sqlConnection.Open();
reader = cmd.ExecuteReader();

if (reader.HasRows == true)
{
//sp_deptapp = reader.GetValue(0).ToString();
//sp_status = reader.GetValue(1).ToString();
//sp_supervisor = reader.GetValue(2).ToString();

myObject = reader.GetValues(myObject);
}
else
{
//nothing in reader, throw exception
}
sqlConnection.Close();

return myObject;
}

最佳答案

您遇到的错误位于这一行:

myObject = reader.GetValues(myObject);

myObject 是一个对象数组,GetValues 方法返回一个整数,其中包含放置在数组中的计数。因此,为了解决您的错误,您可以将该行更改为以下内容:

var count = reader.GetValues(myObject);

此外,在您的代码中,您只检索一行数据。如果您只期望一行,这当然很好。当需要多行时,您通常会像这样遍历这些行:

while (reader.Read())
{
// Read row and add row to list
}

有关如何使用 SqlDataReader 的示例,请参阅 link .


示例

如果你想检索多行并存储数据,我建议添加一个类来存储一行的数据(你可能想验证数据类型,以便它们与 SP 返回的类型相匹配):

public class Data
{
public string DeptApp { get; set; }
public string Status { get; set; } // this might be another data type
public string Supervisor { get; set; }
}

然后按如下方式检索行:

public Data[] GetDeptAppData()
{
//execute stored procedure to get data from database
using (SqlConnection sqlConnection = new SqlConnection("Data Source=MyServer;Initial Catalog=MyCatalog;Persist Security Info=True;User ID=MyUser;Password=MyPassword"))
{
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "SP_Admin_DeptApp_Load";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = sqlConnection;
sqlConnection.Open();
using (var reader = cmd.ExecuteReader())
{
if (!reader.HasRows)
{
// throw exception
}
var lst = new List<Data>();
while (reader.Read())
{
var row = new Data();
row.DeptApp = reader.GetString(0);
row.Status = reader.GetString(1);
row.Supervisor = reader.GetString(2);
lst.Add(row);
}
return lst.ToArray();
}
}
}

关于c# - 卡在 SqlDataReader.GetValues 方法上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21612005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com