从不需要参数的存储过程中获取值
Getting a value from stored procedure which doesn't need parameters
我有一个如下所示的存储过程,它从我的数据库中检索前 3 行。
存储过程
USE [PaydayLunch]
GO
/****** Object: StoredProcedure [dbo].[GetPastPlaces] Script Date: 27/10/15 12:28:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetPastPlaces]
AS
SELECT TOP 3* From Past_Places
order by id desc
我的数据库有以下列:
- ID
- Past_Place
- 月份
- Click_Date
我需要从我的数据库中的第一行获取 'Months' 值,但我不知道如何在我的代码后面写这个,因为我找到的所有解决方案要么填充一个 gridview
或具有 min 不需要且不需要它们的参数。
我需要这个值,所以我可以在我认为的 IF
语句中使用它。
只是想让你知道我必须遵循使用另一个存储过程更新的代码 table。
protected void BtnDecideForMe_Click(object sender, EventArgs e)
{
string connection = ConfigurationManager.ConnectionStrings["PaydayLunchConnectionString1"].ConnectionString;
SqlConnection conn = new SqlConnection(connection);
using (SqlCommand cmd = new SqlCommand("dbo.GetRandomPlace", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
// Sets up the parameter
cmd.Parameters.Add("@OutputVar", SqlDbType.VarChar, 25).Direction = ParameterDirection.Output;
// Opens the SQL connection & execute's the 'GetRandomPlace' sproc
conn.Open();
cmd.ExecuteNonQuery();
// Reads the output value from @OutputVar in the sproc
string place = Convert.ToString(cmd.Parameters["@OutputVar"].Value);
conn.Close();
// Populates the input field
txtDestination.Text = place;
}
// Generates & updates past places table
SqlPastPlaces.InsertParameters["Past_Place"].DefaultValue = ((TextBox)txtDestination).Text;
SqlPastPlaces.InsertParameters["Month"].DefaultValue = DateTime.Now.ToString("MMMM");
SqlPastPlaces.InsertParameters["Click_Date"].DefaultValue = DateTime.Now.ToString();
SqlPastPlaces.Insert();
}
使用Reader:
SqlConnection connection = new SqlConnection(ConnectionString);
command = new SqlCommand("TestProcedure", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
reader = command.ExecuteReader();
List<Test> TestList = new List<Test>();
Test test;
while (reader.Read())
{
test = new Test();
test.ID = int.Parse(reader["ID"].ToString());
test.Name = reader["Name"].ToString();
TestList.Add(test);
}
connection.Close();
您的问题是您使用的 ExecuteNonQuery()
本质上会忽略您可能取回的任何数据。您需要将输出参数添加到您的过程或使用 SqlCommand.ExecuteReader
获取数据 reader,然后从中读取信息。
使用以下方式管理它
string connection = ConfigurationManager.ConnectionStrings["PaydayLunchConnectionString1"].ConnectionString;
SqlConnection conn = new SqlConnection(connection);
SqlCommand com = new SqlCommand(
"SELECT TOP (1) Month " +
"FROM Past_Places", conn);
try
{
conn.Open();
SqlDataReader reader = com.ExecuteReader();
while (reader.Read())
{
PastMonth.Text = reader["Month"].ToString();
}
reader.Close();
}
finally
{
conn.Close();
}
我有一个如下所示的存储过程,它从我的数据库中检索前 3 行。
存储过程
USE [PaydayLunch]
GO
/****** Object: StoredProcedure [dbo].[GetPastPlaces] Script Date: 27/10/15 12:28:39 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetPastPlaces]
AS
SELECT TOP 3* From Past_Places
order by id desc
我的数据库有以下列:
- ID
- Past_Place
- 月份
- Click_Date
我需要从我的数据库中的第一行获取 'Months' 值,但我不知道如何在我的代码后面写这个,因为我找到的所有解决方案要么填充一个 gridview
或具有 min 不需要且不需要它们的参数。
我需要这个值,所以我可以在我认为的 IF
语句中使用它。
只是想让你知道我必须遵循使用另一个存储过程更新的代码 table。
protected void BtnDecideForMe_Click(object sender, EventArgs e)
{
string connection = ConfigurationManager.ConnectionStrings["PaydayLunchConnectionString1"].ConnectionString;
SqlConnection conn = new SqlConnection(connection);
using (SqlCommand cmd = new SqlCommand("dbo.GetRandomPlace", conn))
{
cmd.CommandType = CommandType.StoredProcedure;
// Sets up the parameter
cmd.Parameters.Add("@OutputVar", SqlDbType.VarChar, 25).Direction = ParameterDirection.Output;
// Opens the SQL connection & execute's the 'GetRandomPlace' sproc
conn.Open();
cmd.ExecuteNonQuery();
// Reads the output value from @OutputVar in the sproc
string place = Convert.ToString(cmd.Parameters["@OutputVar"].Value);
conn.Close();
// Populates the input field
txtDestination.Text = place;
}
// Generates & updates past places table
SqlPastPlaces.InsertParameters["Past_Place"].DefaultValue = ((TextBox)txtDestination).Text;
SqlPastPlaces.InsertParameters["Month"].DefaultValue = DateTime.Now.ToString("MMMM");
SqlPastPlaces.InsertParameters["Click_Date"].DefaultValue = DateTime.Now.ToString();
SqlPastPlaces.Insert();
}
使用Reader:
SqlConnection connection = new SqlConnection(ConnectionString);
command = new SqlCommand("TestProcedure", connection);
command.CommandType = System.Data.CommandType.StoredProcedure;
connection.Open();
reader = command.ExecuteReader();
List<Test> TestList = new List<Test>();
Test test;
while (reader.Read())
{
test = new Test();
test.ID = int.Parse(reader["ID"].ToString());
test.Name = reader["Name"].ToString();
TestList.Add(test);
}
connection.Close();
您的问题是您使用的 ExecuteNonQuery()
本质上会忽略您可能取回的任何数据。您需要将输出参数添加到您的过程或使用 SqlCommand.ExecuteReader
获取数据 reader,然后从中读取信息。
使用以下方式管理它
string connection = ConfigurationManager.ConnectionStrings["PaydayLunchConnectionString1"].ConnectionString;
SqlConnection conn = new SqlConnection(connection);
SqlCommand com = new SqlCommand(
"SELECT TOP (1) Month " +
"FROM Past_Places", conn);
try
{
conn.Open();
SqlDataReader reader = com.ExecuteReader();
while (reader.Read())
{
PastMonth.Text = reader["Month"].ToString();
}
reader.Close();
}
finally
{
conn.Close();
}