我在SQL Server中有这个存储过程;
CREATE PROC GetChild
@Child_ID int
AS
SELECT * FROM Children WHERE Child_ID = @Child_ID
我从C#调用此存储过程。
我想知道,如果可以从此表中调用一列而不是从C#调用整个记录。?
答案 0 :(得分:2)
您只有三个选择。
重写Stored过程以返回所需的列。
e.g。 SELECT foo from Children Where Child_id = @Child_ID
使用DataReader,只需从中获取所需的列
直接使用阅读器
while (reader.Read())
`Console.WriteLine("{0}", reader.GetInt32(0));`
使用Linq扩展方法,它允许您对结果进行过滤和排序,以及只获取所需的列。
var List = rdr.Cast<IDataRecord>()
.Select(s => s.GetInt32(0)).ToList();
放弃存储过程并针对表写入Select语句。请参阅Pranay's answer
答案 1 :(得分:2)
假设您的意思是返回一列,如果这是您的存储过程的样子,那么不。它将始终将所有列返回给客户端。
您可以简单地忽略不需要的返回列。或者,您可以将存储过程更改为仅返回一列。但按原样,它总是返回所有这些。
答案 2 :(得分:1)
只需写下面的查询
select columnname from Children where Child_ID = @Child_ID
columnname-是您要检索的列的名称
代码
SqlConnection mySqlConnection =new SqlConnection("server=(local)\\SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI;");
SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
mySqlCommand.CommandText ="select columnname from Children where Child_ID = @Child_ID";
mySqlCommand .Parameters.Add("@Child_ID", SqlDbType.Int);
mySqlCommand .Parameters["@Child_ID"].Value = idvalue;
mySqlConnection.Open();
SqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader(CommandBehavior.SingleRow);
while (mySqlDataReader.Read()){
Console.WriteLine("mySqlDataReader[\" columnname\"] = " +
mySqlDataReader["columnname"]);
}
mySqlDataReader.Close();
mySqlConnection.Close();
答案 3 :(得分:0)
使用SqlDataReader
:
SqlConnection DbConn = new SqlConnection(YourConnStringHere);
SqlCommand ExecStoredProc = new SqlCommand();
ExecStoredProc.CommandType = CommandType.StoredProcedure;
ExecStoredProc.CommandText = "GetChild";
ExecStoredProc.Connection = DbConn;
ExecStoredProc.Parameters.AddWithValue("@ChildID", YourChildId);
using (DbConn)
{
DbConn.Open();
using (SqlDataReader sdr = ExecStoredProc.ExecuteReader())
{
while(sdr.Read())
// reference your column name like this:
// sdr.GetString(sdr.GetOrdinal("YourColumnName"));
}
}
您可以引用SqlDataReader.Read()
方法返回的任何列。同样,如果您要查找整数值:
int someInt = sdr.GetInt32(sdr.GetOrdinal("YourColumnName"));
答案 4 :(得分:0)
从这个帖子(Insert results of a stored procedure into a temporary table),您可能想尝试OPENROWSET。
首先,配置您的数据库,
sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO
然后,取决于您的连接:
SELECT yourcolumnname
FROM
OPENROWSET(
'SQLNCLI',
'server=yourservername;database=yourdbname;uid=youruserid;pwd=youruserpwd',
'EXEC [GetChild] yourchildid'
)
或
SELECT yourcolumnname
FROM
OPENROWSET(
'SQLNCLI',
'server=yourservername;database=yourdbname;Trusted_Connection=yes',
'EXEC [GetChild] yourchildid')
在仅检索一行时,我不会使用此解决方案。表现真的很糟糕。 为了检索大量的行,这应该可以胜任。