我正在尝试使用 SQL-Server 数据库获取/返回多个值并将它们显示在 ASP.NET 页面上。
我正在使用存储过程在数据库端执行 SELECT 命令。
我能够返回与变量@PERSON匹配的第一个值,但每次只返回一行。
任何帮助将不胜感激。
数据库处理程序类
public MainSQL()
{
_productConn = new SqlConnection();
_productConnectionString += "data source=mssql.database.co.uk;InitialCatalog=test_data;User ID=username;Password=password";
_productConn.ConnectionString = _productConnectionString;
}
public string GetItemName(int PersonID)
{
string returnvalue = string.Empty;
SqlCommand myCommand = new SqlCommand("GetItem", _productConn);
myCommand.CommandType = CommandType.StoredProcedure;
myCommand.Parameters.Add(new SqlParameter("@PERSON", SqlDbType.Int));
myCommand.Parameters[0].Value = PersonID;
_productConn.Open();
returnvalue = (string)myCommand.ExecuteScalar();
_productConn.Close();
return (string)returnvalue;
}
存储过程
USE [test_data]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [ppir].[GetItem]
(
@PERSON int
)
AS
/*SET NOCOUNT ON;*/
SELECT Description FROM [Items] WHERE PersonID = @PERSON
RETURN
return.aspx
namespace test
{
public partial class Final_Page : System.Web.UI.Page
{
MainSQL GetInfo;
protected void Page_Load(object sender, EventArgs e)
{
int PersonId = (int)Session["PersonID"];
GetInfo = new MainSQL();
string itemname = GetInfo.GetItemName(PersonId);
ReturnItemName.Text = itemname;
} // End Page_Load
} // End Class
} // End Namespace
最佳答案
你应该使用sql datareader来代替。:
ExecuteScalar 仅返回第一个结果,而 reader 通过循环返回每个结果,直到 reader.Read()==false。
例如:
DataReader data_reader= MySqlCommand.ExecuteReader( );
while(data_reader.Read())
{
...
}
关于c# - 从数据库获取多个值 ASP.NET/C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8104949/