当使用“从何处选择”不存在数据时,读取尝试无效
本文关键字:数据 读取 无效 不存在 何处 从何处选择 选择 | 更新日期: 2023-09-27 18:28:17
我正试图找到一种使用C#执行以下存储过程的方法。
ALTER PROCEDURE spLoadClients
@NetworkingChannel nvarchar(50)
AS
SELECT
Client_Groups
FROM
ClientTable
WHERE
Networking_Channel = (@NetworkingChannel)
RETURN
存储过程正确。我只需要找到合适的方法来使用C#执行它。
以下是我尝试过的:
SqlDataReader reader;
string UpdateCommand = "spLoadClients";
using (SqlConnection sqlConnectionCmdString = new SqlConnection(@"Data Source=.'SQLEXPRESS;AttachDbFilename=C:'Users'Shawn'Documents'Visual Studio 2010'Projects'Server'database'ClientRegit.mdf;Integrated Security=True;User Instance=True"))
using (SqlCommand sqlCommand = new SqlCommand(UpdateCommand, sqlConnectionCmdString))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlCommand.Parameters.Add("@NetworkingChannel", SqlDbType.NVarChar).Value = IntializedNetworks[i];
sqlConnectionCmdString.Open();
reader = sqlCommand.ExecuteReader();
// Data is accessible through the DataReader object here.
IntializedPostNet[i] = reader[i].ToString(); //trying to add data from reader into an array errors here
sqlConnectionCmdString.Close();
}
我一直收到一个错误,上面写着
不存在数据时读取的尝试无效。
我做错了什么?
您需要在SqlDataReader
上调用.Read()
方法-至少一次,才能实际返回数据。
此外,就像SqlConnection
和SqlCommand
一样,SqlDataReader
也实现了IDisposable
接口,因此应该真正封装在using
块中。
所以把这个添加到你的代码中:
sqlConnectionCmdString.Open();
using (reader = sqlCommand.ExecuteReader())
{
// iterate over the rows returned by the reader
while (reader.Read())
{
// Data is accessible through the DataReader object here.
IntializedPostNet[i] = reader[i].ToString(); //trying to add data from reader into an array errors here
}
reader.Close();
}
sqlConnectionCmdString.Close();
使用带有存储过程与Oledb的读取器时,可以使用此方法。
var list = (from IDataRecord r in reader
select new
{
FieldName1 = (string)r["Network"],
FieldName2 = (string)r["IPAddress"].ToString(),
FieldName3 = (Int32)r["AsPort"],
FieldName4 = (string)r["ThreadLocks"],
FieldName5 = (string)r["GroupBy"]
}).ToList();
当您使用带有sql字符串查询作为输入的读取器或Oledb内联查询时,您可以这样写来读取并添加到对象中。
while (objReader.Read())
{
//Upon reading Clean Data for fresh search
cboClientGroup.Items.Clear();
cboOccupation.Items.Clear();
cboCompany.Items.Clear();
cboClientID.Items.Clear();
//Apply Fresh Search
cboClientGroup.Items.Add(Convert.ToString(
objReader["Client_Groups"]));
cboOccupation.Items.Add(Convert.ToString(
objReader["Occupation"]));
cboCompany.Items.Add(Convert.ToString(
objReader["Company"]));
cboClientID.Items.Add(Convert.ToString(
objReader["ClientID"]));
}