Мне нужно прочитать одну запись из базы данных (определяемую приложением запроса URL) и взять из нее одно поле ( "Стоимость" ). SQL в настоящее время в моем источнике данных для него просто:
SELECT [Cost] from [Cars] WHERE ([RegistrationNumber] = @RegistrationNumber)
... then @RegistrationNumber определяется как исходящий из QueryString.
Я все еще изучаю ASP.NET, поэтому, вероятно, я надеюсь, что есть очень простой способ сделать это. Я мог бы использовать ListView или что-то в этом роде, но я думаю, что немного переборщил только за одну часть данных.
Кроме того, я работаю на С#, если это имеет значение.
Предполагая, что вы используете объект SqlCommand
для выполнения своего sql, вы можете использовать ExecuteScalar()
, и он вернет первое значение из первой строки, которая возвращается из команды.
На странице документации, которую я связал, есть пример, но для краткости я включу его здесь:
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.Parameters.Add("@RegistrationNumber", SqlDbType.VarChar);
cmd.Parameters["@RegistrationNumber"].Value = ** your variable here**;
try
{
conn.Open();
double cost = (double)cmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Это "сырой" метод запуска вашего SQL. Поскольку вы используете SqlDataSource, то, что он делает за кулисами, за исключением того, что не использует ExecuteScalar(), он просто получает все данные. Вы можете выбрать отдельные поля, используя следующий код:
protected void Page_Load(object sender, EventArgs e)
{
DataView dv= (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
foreach (DataRowView dr in dv)
{
Label1.Text = dr["Cost"].ToString();
}
}
Это присвоит значение поля Label1. Если вы не хотите писать какой-либо код, может быть проще просто привязать его к простому элементу управления Repeater.
Я верю, что вы после этого команда SQLCommand ExecuteScalar.
Итак, вы бы использовали его как это (Отказ от ответственности: я не очень много делаю в С# с базами данных sql)
Int32 Cost = 0;
SQLCommand sqlcmd = New SQLCommand(SELECT [Cost] from [Cars] WHERE ([RegistrationNumber] = @RegistrationNumber), connection);
sqlcmd.Parameters.Add("@RegistrationNumber", SqlDbType.VarChar).Value = RegNumber;
try
{
conn.Open();
Cost = (Int32)sqlcmd.ExecuteScalar();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Это должно с надеждой работать.